\start
Date: Sat, 1 Mar 2008 01:49:55 -0600
From: Tim Daly
To: list
Subject: 20080229.01.tpd.patch (add additonial hyperdoc	page translations)

This patch extends the available firefox hyperdoc pages.

Tim

========================================================================
diff --git a/changelog b/changelog
index 78b70dc..52e3269 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080229 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080222 tpd src/Makefile move hyperdoc bitmaps location
 20080222 tpd src/hyper/Makefile move hyperdoc bitmaps location
 20080222 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index 1bfc01b..7afa4e8 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -232,7 +232,6 @@ all: ${PAGES}
 	@ ${TANGLE} -R"signatures.txt" bookvol11.pamphlet >signatures.txt
 
 clean:
-	@ rm -rf bitmaps
 	@ rm -f *.xhtml
 	@ rm -f rcm3720.input
 	@ rm -f signatures.txt
@@ -458,7 +457,6 @@ PAGES=rootpage.xhtml \
             dbexpressioninteger.xhtml \
             dbfractioninteger.xhtml \
             dbfractionpolynomialinteger.xhtml \
-            dbopbinary.xhtml \
             dbopacos.xhtml \
             dbopacosh.xhtml \
             dbopacot.xhtml \
@@ -480,6 +478,7 @@ PAGES=rootpage.xhtml \
             dbopbesselk.xhtml \
             dbopbessely.xhtml \
             dbopbeta.xhtml \
+            dbopbinary.xhtml \
             dbopcardinalnumber.xhtml \
             dbopcoefficient.xhtml \
             dbopcoefficients.xhtml \
@@ -515,13 +514,14 @@ PAGES=rootpage.xhtml \
             dbopdigits.xhtml \
             dbopdimension.xhtml \
             dbopdivide.xhtml \
+            dbopdivisors.xhtml \
             dbopei.xhtml \
             dbopeigenmatrix.xhtml \
             dbopeigenvalues.xhtml \
             dbopeigenvector.xhtml \
             dbopeigenvectors.xhtml \
             dbopelt.xhtml \
-            dbopequalsign.xhtml \
+            dbopequal.xhtml \
             dbopeulerphi.xhtml \
             dbopeval.xhtml \
             dbopevenq.xhtml \
@@ -624,7 +624,7 @@ PAGES=rootpage.xhtml \
             dbopsetrowbang.xhtml \
             dbopsetsubmatrixbang.xhtml \
             dbopsign.xhtml \
-            dbopsimplify.xhtml \
+            dbopsimplify.xhtml\
             dbopsec.xhtml \
             dbopsech.xhtml \
             dbopseries.xhtml \
@@ -643,6 +643,7 @@ PAGES=rootpage.xhtml \
             dbopsubmatrix.xhtml \
             dbopsubmatrix.xhtml \
             dbopsubmod.xhtml \
+            dbopsumofkthpowerdivisors.xhtml \
             dboptan.xhtml \
             dboptanh.xhtml \
             dboptaylor.xhtml \
@@ -657,9 +658,9 @@ PAGES=rootpage.xhtml \
             dbopvertconcat.xhtml \
             dbopwholepart.xhtml \
             dbopwholeragits.xhtml \
-            dbopzeroq.xhtml \
             dbopzeroof.xhtml \
             dbopzerosof.xhtml \
+            dbopzeroq.xhtml \
             dbpolynomialinteger.xhtml \
             dbpolynomialfractioninteger.xhtml \
           systemvariables.xhtml \
@@ -670,10 +671,9 @@ PAGES=rootpage.xhtml \
           numberspage.xhtml \
             numintegers.xhtml \
               numgeneralinfo.xhtml \
-                basicfunctions.xhtml \
-                primesandfactorization.xhtml \
-                somenumbertheoreticfunctions.xhtml \
-                integernumbertheoryfunctions.xhtml \
+                numbasicfunctions.xhtml \
+                  numintegerfractions.xhtml \
+                numnumbertheoreticfunctions.xhtml \
               numfactorization.xhtml \
               numfunctions.xhtml \
               numexamples.xhtml \
@@ -3687,293 +3687,6 @@ abstract algebra
 <<page foot>>
 @
 
-\subsection{basicfunctions.xhtml}
-<<basicfunctions.xhtml>>=
-<<standard head>>
-  <script type="text/javascript">
-<<handlefreevars>>
-<<axiom talker>>
-  </script>
- </head>
- <body>
-<<page head>>
-The size of an integer in Axiom is only limited by the amount of 
-computer storage you have available. The usual arithmetic operations
-are available.
-<ul>
- <li>
-  <input type="submit" id="p1" class="subbut" 
-    onclick="makeRequest('p1');"
-    value="2^(5678-4856+2*17)" />
-  <div id="ansp1"><div></div></div>
- </li>
-</ul>
-There are a number of ways of working with the sign of an integer.
-Let's use this x as an example.
-<ul>
- <li>
-  <input type="submit" id="p2" class="subbut" 
-    onclick="makeRequest('p2');"
-    value="x:=-101" />
-  <div id="ansp2"><div></div></div>
- </li>
-</ul>
-First of all, there is the absolute value function.
-<ul>
- <li>
-  <input type="submit" id="p3" class="subbut" 
-    onclick="handleFree(['p2','p3']);"
-    value="abs(x)" />
-  <div id="ansp3"><div></div></div>
- </li>
-</ul>
-The <a href="dbopsign.xhtml">sign</a> operation returns -1 if its 
-argument is negative, 0 if zero and 1 if positive.
-<ul>
- <li>
-  <input type="submit" id="p4" class="subbut" 
-    onclick="handleFree(['p2','p4']);"
-    value="sign(x)" />
-  <div id="ansp4"><div></div></div>
- </li>
-</ul>
-You can determine if an integer is negative in several other ways.
-<ul>
- <li>
-  <input type="submit" id="p5" class="subbut" 
-    onclick="handleFree(['p2','p5']);"
-    value="x &lt; 0" />
-  <div id="ansp5"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p6" class="subbut" 
-    onclick="handleFree(['p2','p6']);"
-    value="x &lt;= -1" />
-  <div id="ansp6"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p7" class="subbut" 
-    onclick="handleFree(['p2','p7']);"
-    value="negative?(x)" />
-  <div id="ansp7"><div></div></div>
- </li>
-</ul>
-Similarly, you can find out if it is positive.
-<ul>
- <li>
-  <input type="submit" id="p8" class="subbut" 
-    onclick="handleFree(['p2','p8']);"
-    value="x > 0" />
-  <div id="ansp8"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p9" class="subbut" 
-    onclick="handleFree(['p2','p9']);"
-    value="x >= 1" />
-  <div id="ansp9"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p10" class="subbut" 
-    onclick="handleFree(['p2','p10']);"
-    value="positive?(x)" />
-  <div id="ansp10"><div></div></div>
- </li>
-</ul>
-This is the recommended way of determining whether an integer is zero.
-<ul>
- <li>
-  <input type="submit" id="p11" class="subbut" 
-    onclick="handleFree(['p2','p11']);"
-    value="zero?(x)" />
-  <div id="ansp11"><div></div></div>
- </li>
-</ul>
-<hr/>
-Use the <a href="dbopzeroq.xhtml">zero?</a> operation whenever you are
-testing any mathematical object for equality with zero. This is usually
-more efficient than using <a href="dbopequalsign.xhtml">=</a> (think of
-matrices; it is easier to tell if a matrix is zero by just checking term 
-by term than constructing another ``zero'' matrix and comparing the
-two matrices term by term) and also avoids the problem that
-<a href="dbopequalsign.xhtml">=</a> is usually used for creating equations.
-<hr/>
-This is the recommended way of determining whether an integer is
-equal to one.
-<ul>
- <li>
-  <input type="submit" id="p12" class="subbut" 
-    onclick="handleFree(['p2','p12']);"
-    value="one?(x)" />
-  <div id="ansp12"><div></div></div>
- </li>
-</ul>
-This syntax is used to test equality using <a href="dbopequalsign.xhtml">=</a>.
-It says that you want a <a href="db.xhtml?Boolean">Boolean</a> (true or
-false) answer rather than an equation.
-<ul>
- <li>
-  <input type="submit" id="p13" class="subbut" 
-    onclick="handleFree(['p2','p13']);"
-    value="(x=-101)@Boolean" />
-  <div id="ansp13"><div></div></div>
- </li>
-</ul>
-The operations <a href="dbopoddq.xhtml">odd?</a> and
-<a href="dbopevenq.xhtml">even?</a> determine whether an integer is odd 
-or even, respectively. They each return a 
-<a href="db.xhtml?Boolean">Boolean</a> object.
-<ul>
- <li>
-  <input type="submit" id="p14" class="subbut" 
-    onclick="handleFree(['p2','p14']);"
-    value="odd?(x)" />
-  <div id="ansp14"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p15" class="subbut" 
-    onclick="handleFree(['p2','p15']);"
-    value="even?(x)" />
-  <div id="ansp15"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopgcd.xhtml">gcd</a> computes the greatest
-common divisor of two integers.
-<ul>
- <li>
-  <input type="submit" id="p16" class="subbut" 
-    onclick="makeRequest('p16');"
-    value="gcd(56788,43688)" />
-  <div id="ansp16"><div></div></div>
- </li>
-</ul>
-The operation <a href="dboplcm.xhtml">lcm</a> computes their least
-common multiple.
-<ul>
- <li>
-  <input type="submit" id="p17" class="subbut" 
-    onclick="makeRequest('p17');"
-    value="lcm(56788,43688)" />
-  <div id="ansp17"><div></div></div>
- </li>
-</ul>
-To determine the maximum of two integers, use <a href="dbopmax.xhtml">max</a>.
-<ul>
- <li>
-  <input type="submit" id="p18" class="subbut" 
-    onclick="makeRequest('p18');"
-    value="max(678,567)" />
-  <div id="ansp18"><div></div></div>
- </li>
-</ul>
-To determine the minimum, use <a href="dbopmin.xhtml">min</a>.
-<ul>
- <li>
-  <input type="submit" id="p19" class="subbut" 
-    onclick="makeRequest('p19');"
-    value="min(678,567)" />
-  <div id="ansp19"><div></div></div>
- </li>
-</ul>
-The <a href="dbopreduce.xhtml">reduce</a> operation is used to extend 
-binary operations to more than two arguments. For example, you can use
-<a href="dbopreduce.xhtml">reduce</a> to find the maximum integer in a
-list or compute the least common multiple of all integers in the list.
-<ul>
- <li>
-  <input type="submit" id="p20" class="subbut" 
-    onclick="makeRequest('p20');"
-    value="reduce(max,[2,45,-89,78,100,-45])" />
-  <div id="ansp20"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p21" class="subbut" 
-    onclick="makeRequest('p21');"
-    value="reduce(min,[2,45,-89,78,100,-45])" />
-  <div id="ansp21"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p22" class="subbut" 
-    onclick="makeRequest('p22');"
-    value="reduce(gcd,[2,45,-89,78,100,-45])" />
-  <div id="ansp22"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p23" class="subbut" 
-    onclick="makeRequest('p23');"
-    value="reduce(lcm,[2,45,-89,78,100,-45])" />
-  <div id="ansp23"><div></div></div>
- </li>
-</ul>
-The infix operator "/" is not used to compute the quotient of integers.
-Rather, it is used to create rational numbers as described in 
-<a href="db.xhtml?Fraction">Fraction</a>.
-<ul>
- <li>
-  <input type="submit" id="p24" class="subbut" 
-    onclick="makeRequest('p24');"
-    value="13/4" />
-  <div id="ansp24"><div></div></div>
- </li>
-</ul>
-The infix operation <a href="dbopquo.xhtml">quo</a> computes the integer
-quotient.
-<ul>
- <li>
-  <input type="submit" id="p25" class="subbut" 
-    onclick="makeRequest('p25');"
-    value="13 quo 4" />
-  <div id="ansp25"><div></div></div>
- </li>
-</ul>
-The infix operation <a href="dboprem.xhtml">rem</a> computes the integer
-remainder.
-<ul>
- <li>
-  <input type="submit" id="p26" class="subbut" 
-    onclick="makeRequest('p26');"
-    value="13 rem 4" />
-  <div id="ansp26"><div></div></div>
- </li>
-</ul>
-One integer is evenly divisible by another if the remainder is zero.
-The operation <a href="dbopexquo.xhtml">exquo</a> can also be used.
-See <a href="axbook/section-2.5.xhtml">Unions</a>. for an example.
-<ul>
- <li>
-  <input type="submit" id="p27" class="subbut" 
-    onclick="makeRequest('p27');"
-    value="zero?(167604736446952 rem 2003644)" />
-  <div id="ansp27"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopdivide.xhtml">divide</a> returns a record of
-the quotient and remainder and thus is more efficient when both are needed.
-<ul>
- <li>
-  <input type="submit" id="p28" class="subbut" 
-    onclick="makeRequest('p28');"
-    value="d:=divide(13,4)" />
-  <div id="ansp28"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p29" class="subbut" 
-    onclick="handleFree(['p28','p29']);"
-    value="d.quotient" />
-  <div id="ansp29"><div></div></div>
- </li>
-</ul>
-Records are discussed in detail in 
-<a href="axbook/section-2.4.xhtml">Records</a>.
-<ul>
- <li>
-  <input type="submit" id="p30" class="subbut" 
-    onclick="handleFree(['p28','p30']);"
-    value="d.remainder" />
-  <div id="ansp30"><div></div></div>
- </li>
-</ul>
-<<page foot>>
-@
 \subsection{basiclimit.xhtml}
 <<basiclimit.xhtml>>=
 <<standard head>>
@@ -8736,6 +8449,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopdivisors.xhtml}
+<<dbopdivisors.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+      dbopdivisors not implemented
+<<page foot>>
+@
+
 \subsection{dbopei.xhtml}
 <<dbopei.xhtml>>=
 <<standard head>>
@@ -8786,23 +8509,23 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
-\subsection{dbopequalsign.xhtml}
-<<dbopequalsign.xhtml>>=
+\subsection{dbopelt.xhtml}
+<<dbopelt.xhtml>>=
 <<standard head>>
  </head>
  <body>
 <<page head>>
-      dbopequalsign not implemented
+      dbopelt not implemented
 <<page foot>>
 @
 
-\subsection{dbopelt.xhtml}
-<<dbopelt.xhtml>>=
+\subsection{dbopequal.xhtml}
+<<dbopequal.xhtml>>=
 <<standard head>>
  </head>
  <body>
 <<page head>>
-      dbopelt not implemented
+      dbopequal not implemented
 <<page foot>>
 @
 
@@ -9026,6 +8749,7 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+
 \subsection{dbopjacobi.xhtml}
 <<dbopjacobi.xhtml>>=
 <<standard head>>
@@ -9076,6 +8800,7 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+
 \subsection{dboplegendre.xhtml}
 <<dboplegendre.xhtml>>=
 <<standard head>>
@@ -9222,7 +8947,7 @@ the operations will have extra ones added at some stage.
  </head>
  <body>
 <<page head>>
-     dbopmoebiusmu not implemented
+      dbopmoebiusmu.xhtml not implemented
 <<page foot>>
 @
 
@@ -10006,6 +9731,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopsumofkthpowerdivisors.xhtml}
+<<dbopsumofkthpowerdivisors.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+     dbopsumofkthpowerdivisors.xhtml not implemented
+<<page foot>>
+@
+
 \subsection{dboptan.xhtml}
 <<dboptan.xhtml>>=
 <<standard head>>
@@ -10116,33 +9851,33 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
-\subsection{dbopzeroq.xhtml}
-<<dbopzeroq.xhtml>>=
+\subsection{dbopzeroof.xhtml}
+<<dbopzeroof.xhtml>>=
 <<standard head>>
  </head>
  <body>
 <<page head>>
-      dbopzeroq not implemented
+      dbopzeroof not implemented
 <<page foot>>
 @
 
-\subsection{dbopzeroof.xhtml}
-<<dbopzeroof.xhtml>>=
+\subsection{dbopzerosof.xhtml}
+<<dbopzerosof.xhtml>>=
 <<standard head>>
  </head>
  <body>
 <<page head>>
-      dbopzeroof not implemented
+      dbopzerosof not implemented
 <<page foot>>
 @
 
-\subsection{dbopzerosof.xhtml}
-<<dbopzerosof.xhtml>>=
+\subsection{dbopzeroq.xhtml}
+<<dbopzeroq.xhtml>>=
 <<standard head>>
  </head>
  <body>
 <<page head>>
-      dbopzerosof not implemented
+      dbopzeroq not implemented
 <<page foot>>
 @
 
@@ -34690,16 +34425,6 @@ lists of points in the plane.
 <<page foot>>
 @
 
-\subsection{integernumbertheoryfunctions.xhtml}
-<<integernumbertheoryfunctions.xhtml>>=
-<<standard head>>
- </head>
- <body>
-<<page head>>
-integernumbertheoryfunctions not implemented
-<<page foot>>
-@
-
 %%J
 \subsection{jenks.xhtml}
 <<jenks.xhtml>>=
@@ -36154,6 +35879,295 @@ Enter search string (use <b>*</b> for wild card unless counter-indicated):
 @
 
 %%N
+\subsection{numbasicfunctions.xhtml}
+<<numbasicfunctions.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Basic Functions</div>
+  <hr/>
+The size of an integer in Axiom is only limited by the amount of computer
+storage you have available. The usual arithmetic operations are available.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="2^(5678-4856+2*17)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+There are a number of ways of working with the sign of an integer. Let's
+use the x as an example.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="x:=-101" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+First of all, there is the absolute value function.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p2','p3']);"
+    value="abs(x)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+The <a href="dbopsign.xhtml">sign</a> operation returns -1 if its argument
+is negative, 0 if zero and 1 if positive.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p2','p4']);"
+    value="sign(x)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+You can determine if an integer is negative in several other ways.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p2','p5']);"
+    value="x &lt; 0" />
+  <div id="ansp5"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p2','p6']);"
+    value="x &lt;= -1" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p2','p7']);"
+    value="negative?(x)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+Similarly, you can find out if it is positive.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p2','p8']);"
+    value="x > 0" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p2','p9']);"
+    value="x >= 1" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p2','p10']);"
+    value="positive?(x)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+This is the recommended way of determining whether an integer is zero.
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="handleFree(['p1','p11']);"
+    value="zero?(x)" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+<hr/>
+Use the <a href="dbopzeroq.xhtml">zero?</a> whenever you are testing any
+mathematical object for equality with zero. This is usually more efficient
+than using <a href="dbopequal.xhtml">=</a> (think of matrices: it is easier
+to tell if a matrix is zero by just checking term by term than constructing
+another "zero" amtrix and comparing the two matrices term by term) and also
+avoids the problem that <a href="dbopequal.xhtml">=</a> is usually used
+for creating equations.
+<hr/>
+This is the recommended way of determining whether an integer is equal to one.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p2','p12']);"
+    value="one?(x)" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
+This syntax is used to test equality using <a href="dbopequal.xhtml">=</a>.
+It says that you want a <a href="db.xhtml?Boolean">Boolean</a> (true or false)
+answer rather than an equation.
+<ul>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="handleFree(['p2','p13']);"
+    value="(x=-101)@Boolean" />
+  <div id="ansp13"><div></div></div>
+ </li>
+</ul>
+The operations <a href="dbopoddq.xhtml">odd?</a> and 
+<a href="dbopevenq.xhtml">even?</a> determine whether an integer is odd
+or even, respectively. They each return a 
+<a href="db.xhtml?Boolean">Boolean</a>
+object.
+<ul>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="handleFree(['p2','p14']);"
+    value="odd?(x)" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="handleFree(['p2','p15']);"
+    value="even?(x)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopgcd.xhtml">gcd</a> computes the greatest common
+divisor of two integers.
+<ul>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="makeRequest('p16');"
+    value="gcd(56788,43688)" />
+  <div id="ansp16"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dboplcm.xhtml">lcm</a> computes their least common
+multiple.
+<ul>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="makeRequest('p17');"
+    value="lcm(56788,43688)" />
+  <div id="ansp17"><div></div></div>
+ </li>
+</ul>
+To determine the maximum of two integers, use <a href="dbopmax.xhtml">max</a>.
+<ul>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="makeRequest('p18');"
+    value="max(678,567)" />
+  <div id="ansp18"><div></div></div>
+ </li>
+</ul>
+To determine the minimum, use <a href="dbopmin.xhtml">min</a>.
+<ul>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+    onclick="makeRequest('p20');"
+    value="min(678,567)" />
+  <div id="ansp20"><div></div></div>
+ </li>
+</ul>
+The <a href="dbopreduce.xhtml">reduce</a> operation is used to extend
+binary operations to more than two arguments. For example, you can use
+<a href="dbopreduce.xhtml">reduce</a> to find the maximum integer in a
+list or compute the least common multiple of all integers in a list.
+<ul>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+    onclick="makeRequest('p21');"
+    value="reduce(max,[2,45,-89,78,100,-45])" />
+  <div id="ansp21"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p22" class="subbut" 
+    onclick="makeRequest('p22');"
+    value="reduce(min,[2,45,-89,78,100,-45])" />
+  <div id="ansp22"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p23" class="subbut" 
+    onclick="makeRequest('p23');"
+    value="reduce(gcd,[2,45,-89,78,100,-45])" />
+  <div id="ansp23"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p24" class="subbut" 
+    onclick="makeRequest('p24');"
+    value="reduce(lcm,[2,45,-89,78,100,-45])" />
+  <div id="ansp24"><div></div></div>
+ </li>
+</ul>
+The infix operator "/" is not used to compute the quotient of integers.
+Rather , it is used to create rational numbers as described in
+<a href="numintegerfractions.xhtml">Fractions</a>.
+<ul>
+ <li>
+  <input type="submit" id="p25" class="subbut" 
+    onclick="makeRequest('p25');"
+    value="13/4" />
+  <div id="ansp25"><div></div></div>
+ </li>
+</ul>
+The infix operator <a href="dbopquo.xhtml">quo</a> computes the integer
+quotient.
+<ul>
+ <li>
+  <input type="submit" id="p26" class="subbut" 
+    onclick="makeRequest('p26');"
+    value="13 quo 4" />
+  <div id="ansp26"><div></div></div>
+ </li>
+</ul>
+The infix operation <a href="dboprem.xhtml">rem</a> computes the integer
+remainder.
+<ul>
+ <li>
+  <input type="submit" id="p27" class="subbut" 
+    onclick="makeRequest('p27');"
+    value="13 rem 4" />
+  <div id="ansp27"><div></div></div>
+ </li>
+</ul>
+One integer is evenly divisible by another if the remainder is zero.
+The operation <a href="dbopexquo.xhtml">exquo</a> can also be used. See
+<a href="axbook/section-2.5.xhtml">Unions</a> for an example.
+<ul>
+ <li>
+  <input type="submit" id="p28" class="subbut" 
+    onclick="makeRequest('p28');"
+    value="zero?(167604736446952 rem 2003644)" />
+  <div id="ansp28"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopdivide.xhtml">divide</a> returns a record of
+the quotient and remainder and thus is more efficient when both are needed.
+<ul>
+ <li>
+  <input type="submit" id="p29" class="subbut" 
+    onclick="makeRequest('p29');"
+    value="d:=divide(13,4)" />
+  <div id="ansp29"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p30" class="subbut" 
+    onclick="handleFree(['p29','p30']);"
+    value="d.quotient" />
+  <div id="ansp30"><div></div></div>
+ </li>
+</ul>
+Records are discussed in detail in 
+<a href="axbook/section-2.4.xhtml">Records</a>.
+<ul>
+ <li>
+  <input type="submit" id="p31" class="subbut" 
+    onclick="handleFree(['p29','p31']);"
+    value="d.remainder" />
+  <div id="ansp31"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
 \subsection{numberspage.xhtml}
 <<numberspage.xhtml>>=
 <<standard head>>
@@ -36943,20 +36957,138 @@ is the expansion of the square root of 11.
 \subsection{numexamples.xhtml}
 <<numexamples.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      numexamples not implemented
+  <div align="center">Examples</div>
+  <hr/>
+One can show that if an integer of the form 2**k+1 is prime, then k
+must be a power of two.
+
+Pierre Fermat conjectured that every integer of the form 2**(2**n)+1
+is prime. Let's look for a counterexample. First define a function:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="noresult" 
+    onclick="makeRequest('p1');"
+    value="f(n:NNI):INT == 2^(2^n)+1" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Now try commands like:
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="factor f(1)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p3']);"
+    value="factor f(2)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+until you find an integer of this form which is composite. You can also
+try the following command:
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p4']);"
+    value="[factor f(n) for n in 1..6]" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Obviously, Fermat didn't have access to Axiom.
 <<page foot>>
 @
 
 \subsection{numfactorization.xhtml}
 <<numfactorization.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      numfactorization not implemented
+  <div align="center">Primes and Factorization</div>
+  <hr/>
+Use the operation <a href="dbopfactor.xhtml">factor</a> to factor integers.
+It returns an object of type <a href="db.xhtml?Factored(Integer)">
+Factored Integer</a>. See <a href="factored.xhtml">Factored</a> for a 
+discussion of the manipulation of factored objects.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="factor 102400" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopprimeq.xhtml">prime?</a> returns true or false
+depending on whether its argument is a prime.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="prime? 7" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="prime? 8" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopnextprime.xhtml">nextPrime</a> returns the 
+least prime number greater than its argument.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="nextPrime 100" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopprevprime.xhtml">prevPrime</a> returns the 
+greatest prime number less than its argument.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="makeRequest('p5');"
+    value="prevPrime 100" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+To compute all primes between two integers (inclusively), use the
+operation <a href="dbopprimes.xhtml">primes</a>.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="makeRequest('p6');"
+    value="primes(100,175)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+You might sometimes want to see the factorization of an integer
+when it is considered a Gaussian (that is, complex) integer. See
+<a href="dbcomplexcomplex.xhtml">Complex</a> for more details.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="makeRequest('p8');"
+    value="factor(2::Complex Integer)" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
 <<page foot>>
 @
 
@@ -37151,10 +37283,281 @@ Additional Topics:
 \subsection{numfunctions.xhtml}
 <<numfunctions.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      numfunctions not implemented
+  <div align="center">Integer Number Theory Functions</div>
+  <hr/>
+The <a href="db.xhtml?IntegerNumberTheoryFunctions">
+IntegerNumberTheoryFunctions</a> package contains a variety of
+operations of interest to number theorists. Many of these operations
+deal with divisibility properties of integers (Recall that an integer
+a divides an integer b if there is an integer c such that b=a*c.)
+
+The operation <a href="dbopdivisors.xhtml">divisors</a> returns a list
+of the divisors of an integer
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="div144:=divisors(144)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+You can now compute the number of divisors of 144 and the sum of the
+divisors of 144 by counting and summing the elements of the list we
+just created.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="#(div144)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p3']);"
+    value="reduce(+,div144)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Of course, you can compute the number of divisors of an integer n, 
+usually denoted d(n), and the sum of the divisors of an integer n,
+usually denoted &#x003C2;(n), without ever listing the divisors of n.
+
+In Axiom, you can simply call the operations
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="numberOfDivisors(144)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="makeRequest('p5');"
+    value="sumOfDivisors(144)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+The key is that d(n) and &#x003C2;(n) are "multiplicative functions". 
+This means that when n and m are relatively prime, that is, when n and
+m have no factors in common, then d(nm)=d(n)d(m) and &#x003C2;(nm)=
+&#x003C2;(n)&#x003C2;(m). Note that these functions are trivial to 
+compute when n is a prime power and are computed for general n from
+the prime factorization of n. Other examples of multiplicative functions
+are &#x003C2;_k(n), the sum of the k-th powers of the divisors of n and
+&#x003C6;(n), the number of integers between 1 and n which are prime to n.
+The corresponding Axiom operations are called
+<a href="dbopsumofkthpowerdivisors.xhtml">sumOfKthPowerDivisors</a> and
+<a href="dbopeulerphi.xhtml">eulerPhi</a>.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="makeRequest('p6');"
+    value="sumOfKthPowerDivisors(144,2)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="makeRequest('p7');"
+    value="eulerPhi(144)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+
+An interesting function is called &#x003BC;(n), the Moebius mu function,
+defined as 
+<pre>
+        0 if n has a repeated prime factor 
+          (i.e. is divisible by a square)
+  &#x003BC;(n)= 1 if n is 1
+       (-1)^k if n is the product of k distinct primes
+</pre>
+The corresponding Axiom operation is 
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="makeRequest('p8');"
+    value="moebiusMu(2*2*2)" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="makeRequest('p9');"
+    value="moebiusMu(1)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="makeRequest('p10');"
+    value="moebiusMu(5*7*13)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+This function occurs in the following theorem:
+<br/>
+<b>Theorem</b>(Moebius Inversion Formula):<br/>
+Let f(n) be a function on the positive integers and let F(n) be defined
+by F(n)=sum of f(n) over d | n where the sum is taken over the positive
+divisors of n. Then the values of f(n) can be recovered from the values
+of F(n):f(n) = sum of &#x003BC;F(n/d) over d|n, where the sum is taken
+over the positive divisors of n.
+
+When f(n)=1, the F(n)=d(n). Thus, if you sum &#x003BC;(d)*d(n/d) over 
+the positive divisors of d of n, you should always get 1.
+<ul>
+ <li>
+  <input type="submit" id="p11" class="noresult" 
+    onclick="makeRequest('p11');"
+    value="f1(n)==reduce(+,[moebiusMu(d)*numberOfDivisors(quo(n,d)) for d in divisors(n)])" />
+  <div id="ansp11"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p11','p12']);"
+    value="f1(200)" />
+  <div id="ansp12"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="handleFree(['p11','p13']);"
+    value="f1(846)" />
+  <div id="ansp13"><div></div></div>
+ </li>
+</ul>
+Similarly, when f(n)=n, then F(n)=&#x003C2;(n). Thus, if you sum 
+&#x003BC;(d)*&#x003C2;(n/d) over the positive divisors d of n, you
+should always get n.
+<ul>
+ <li>
+  <input type="submit" id="p14" class="noresult" 
+    onclick="makeRequest('p14');"
+    value="f2(n)==reduce(+,[moebiusMu(d)*sumOfDivisors(quo(n,d)) for d in divisors(n)])" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="handleFree(['p14','p15']);"
+    value="f2(200)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="handleFree(['p14','p16']);"
+    value="f2(846)" />
+  <div id="ansp16"><div></div></div>
+ </li>
+</ul>
+The Fibonacci numbers are defined by
+<pre>
+  F(1)=1
+  F(2)=1
+  F(n)=F(n-1)+F(n-2) for n=3,4,...
+</pre>
+The operation <a href="dbopfibonacci.xhtml">fibonacci</a> computes the
+nth Fibonacci number.
+<ul>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="makeRequest('p17');"
+    value="fibonacci(25)" />
+  <div id="ansp17"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="makeRequest('p18');"
+    value="[fibonacci(n) for n in 1..15]" />
+  <div id="ansp18"><div></div></div>
+ </li>
+</ul>
+Fibonacci numbers can also be expressed as sums of binomial
+coefficients.
+<ul>
+ <li>
+  <input type="submit" id="p19" class="noresult" 
+    onclick="makeRequest('p19');"
+    value="fib(n)==reduce(+,[binomial(n-1-k,k) for k in 0..quo(n-1,2)])" />
+  <div id="ansp19"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+    onclick="handleFree(['p19','p20']);"
+    value="fib(25)" />
+  <div id="ansp20"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+    onclick="handleFree(['p19','p21']);"
+    value="[fib(n) for n in 1..15]" />
+  <div id="ansp21"><div></div></div>
+ </li>
+</ul>
+
+Quadratic symbols can be computed with the operations
+<a href="dboplegendre.xhtml">legendre</a> and
+<a href="dbopjacobi.xhtml">jacobi</a>. The Legendre symbol (a/p) is
+defined for integers a and p with p an odd prime number. By definition,
+<pre>
+        = -1 when a is not a square (mod p)
+  (a/p) =  0 when a is divisible by p
+        = +1 when a is a square (mod p)
+</pre>
+You compute (a/p) via the command legendre(a,p)
+<ul>
+ <li>
+  <input type="submit" id="p22" class="subbut" 
+    onclick="makeRequest('p22');"
+    value="legendre(3,5)" />
+  <div id="ansp22"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p23" class="subbut" 
+    onclick="makeRequest('p23');"
+    value="legendre(23,691)" />
+  <div id="ansp23"><div></div></div>
+ </li>
+</ul>
+
+The Jacobi symbol (a/n) is the usual extension of the Legendre symbol,
+where n is an arbitrary integer. The most important property of the
+Jacobi symbol is the following: if K is a quadratic field with 
+discriminant d and quadratic character &#x003C7;, the &#x003C7;(n)=(d/n).
+Thus, you can use the Jacobi symbol to compute, say, the class numbers
+of imaginary quadratic fields from a standard class number formula. This
+function computes the class number of the imaginary quadratic field with
+discriminant d.
+<ul>
+ <li>
+  <input type="submit" id="p24" class="noresult" 
+    onclick="makeRequest('p24');"
+    value="h(d)==quo(reduce(+,[jacobi(d,k) for k in 1..quo(-d,2)]),2-jacobi(d,2))" />
+  <div id="ansp24"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p25" class="subbut" 
+    onclick="handleFree(['p24','p25']);"
+    value="h(-163)" />
+  <div id="ansp25"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p26" class="subbut" 
+    onclick="handleFree(['p24','p26']);"
+    value="h(-499)" />
+  <div id="ansp26"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p27" class="subbut" 
+    onclick="handleFree(['p24','p27']);"
+    value="h(-1832)" />
+  <div id="ansp27"><div></div></div>
+ </li>
+</ul>
+
 <<page foot>>
 @
 
@@ -37164,37 +37567,36 @@ Additional Topics:
  </head>
  <body>
 <<page head>>
-Axiom provides many operations for manipulating arbitrary precision
-integers. In this section we will show some of those that come from
-<a href="db.xhtml?Integer">Integer</a> itself plus some that are
-implemented in other packages. More examples of using integers are in
-the following sections:
-More examples of expansions are available in
-<a href="integernumbertheoryfunctions.xhtml">IntegerNumberTheoryFunctions</a>,
+  <div align="center">General Integer Information</div>
+  <hr/>
+Axiom provides many operations for manipulating arbitrary precision integers.
+In this section we will show some of those that come from 
+<a href="db.html?Integer">Integer</a> itself plus some that are implemented
+in other packages. More examples of integers are in the following sections:
+<a href="axbook/section-1.4.xhtml">Numbers</a>.
+<a href="numfunctions.xhtml">IntegerNumberTheoryFunctions</a>,
 <a href="numrepeatingdecimals.xhtml">DecimalExpansion</a>,
 <a href="numrepeatingbinaryexpansions.xhtml">BinaryExpansion</a>,
 <a href="numrepeatinghexexpansions.xhtml">HexadecimalExpansion</a>, and
-<a href="db.xhtml?RadixExpansion">RadixExpansion</a>. 
+<a href="numotherbases.xhtml">RadixExpansion</a>
 <ul>
- <li>
-  <a href="basicfunctions.xhtml">
-   Basic Functions
-  </a>
- </li>
- <li>
-  <a href="primesandfactorization.xhtml">
-   Primes and Factorization
-  </a>
- </li>
- <li>
-  <a href="somenumbertheoreticfunctions.xhtml">
-   Some Number Theoretic Functions
-  </a>
- </li>
+ <li> <a href="numbasicfunctions.xhtml">Basic Functions</a></li>
+ <li> <a href="numnumbertheoreticfunctions.xhtml">
+        Some Number Theoretic Functions</a></li>
 </ul>
 <<page foot>>
 @
 
+\subsection{numintegerfractions.xhtml}
+<<numintegerfractions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+      numintegerfractions not implemented
+<<page foot>>
+@
+
 \subsection{numintegers.xhtml}
 <<numintegers.xhtml>>=
 <<standard head>>
@@ -37278,7 +37680,7 @@ Additional topics
   </tr>
   <tr>
    <td>
-    <a href="numexamples.xhtml">Functions</a>
+    <a href="numexamples.xhtml">Examples</a>
    </td>
    <td>
     Examples from number theory
@@ -37579,6 +37981,114 @@ To see other operations use the system command
 <<page foot>>
 @
 
+\subsection{numnumbertheoreticfunctions.xhtml}
+<<numnumbertheoreticfunctions.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Some Number Theoretic Functions</div>
+  <hr/>
+Axiom provides several number theoretic operations for integers.
+More examples are in 
+<a href="numfunctions.xhtml">IntegerNumberTheoryFunctions</a>,
+
+The operation <a href="dbopfibonacci.xhtml">fibonacci</a> computes the 
+Fibonacci numbers. The algorithm has a running time O(log(n)**3) for
+argument n.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="[fibonacci(k) for k in 0..]" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dboplegendre.xhtml">legendre</a> computes the 
+Legendre symbol for its two integer arguments where the second one is
+prime. If you know the second argument to be prime, use 
+<a href="dbopjacobi.xhtml">jacobi</a> instead where no check is made.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="[legendre(i,11) for i in 0..10]" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopjacobi.xhtml">jacobi</a> computes the Jacobi symbol
+for its two integer arguments. By convention, 0 is returned if the greatest
+common divisor of the numerator and denominator is not 1.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="[jacobi(i,15) for i in 0..9]" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopeulerphi.xhtml">eulerPhi</a> compute the values
+of Euler's &#x003C6;-function where &#x003C6;(n) equals the number of
+positive integers less than or equal to n that are relatively prime to the
+positive integer n.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="[eulerPhi i for i in 1..]" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopmoebiusmu.xhtml">moebiusMu</a> computes the 
+Moebius &#x003BC; function.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="makeRequest('p5');"
+    value="[moebiusMu i for i in 1..]" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Although they have somewhat limited utility, Axiom provides Roman numerals.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="makeRequest('p6');"
+    value="a:=roman(78)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="makeRequest('p7');"
+    value="b:=roman(87)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p6','p7','p8']);"
+    value="a+b" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p6','p7','p9']);"
+    value="a*b" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p6','p7','p10']);"
+    value="b rem a" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
 \subsection{numnumericfunctions.xhtml}
 <<numnumericfunctions.xhtml>>=
 <<standard head>>
@@ -38092,7 +38602,7 @@ Issue the system command
  </li>
 </ul>
 to display the full list of operations defined by
-<a href="db.xhtml"?RadixExpansion>RadixExpansion</a>. More examples of
+<a href="db.xhtml?RadixExpansion">RadixExpansion</a>. More examples of
 expansions are available in
 <a href="numrepeatingdecimals.xhtml">DecimalExpansion</a>,
 <a href="numrepeatingbinaryexpansions.xhtml">BinaryExpansion</a>, and
@@ -38274,10 +38784,135 @@ to display the full list of operations defined by
 \subsection{numproblems.xhtml}
 <<numproblems.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      numproblems not implemented
+  <div align="center">Problems</div>
+  <hr/>
+One can show that if an integer of the form 2**k-1 is prime then
+k must be prime. 
+<br/>
+<b>Proof</b>
+Suppose that k=m*n is a non-trivial factorization. Then
+<pre>
+       2^m = 1 (mod (2^m-1))
+   2^(m*n) = 1 (mod (2^m-1))
+  so 2^m-1 is a non-trivial factor of 2^k-1
+</pre>
+
+<b>Problem</b> Find the smallest prime p such that 2**p-1 is not prime
+<br/>
+<b>Answer</b>
+<br/>
+First, define a function:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="noresult" 
+    onclick="makeRequest('p1');"
+    value="f(n:NNI):INT == 2^n-1" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+You can try factoring f(p) as p ranges through the set of primes.
+For example,
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="factor f(7)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+This gets tedious after a while, so let's use Axiom's stream facility.
+A streamm is essentially an infinite sequence. First, we create a stream
+consisting of the positive integers:
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="ints:=[n for n in 1..]" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Now, we create a stream consisting of the primes:
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p2','p4']);"
+    value="primes:=[x for x in ints | prime? x]" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Here is the 25th prime:
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p2','p5']);"
+    value="primes.25" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Next, create the stream of numbers of the form 2**p-1 with p prime:
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p6']);"
+    value="numbers:=[f(n) for n in primes]" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+Finally, form the stream of factorizations of the elements of numbers:
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p6','p7']);"
+    value="factors:=[factor n for n in numbers]" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+You can see that the fifth number in the stream (2047=23*89) is the first
+one that has a non-trivial factorization. Since 2**1148, the solution
+to the problem is 11.
+
+Here is another way to see that 2047 is the first number in the stream
+that is composite:
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p3','p4','p6','p8']);"
+    value="nums:=[x for x in numbers | not prime? x]" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+<br/><br/>
+<b>Problem</b>: Find the smallest positive integer n such that 
+n**2-n+41 is not prime.
+<br/>
+<b>Answer</b>: When n=41, n**2-n+41=41**2, which certainly isn't prime.
+Is there any smaller integer that works? Here are the first 40 values:
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="makeRequest('p9');"
+    value="numbs:=[n**2-n+41 for n in 0..40]" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+Now have Axiom factor the numbers on this list:
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p9','p10']);"
+    value="[factor n for n in numbs]" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+You can see that 41 is the smallest positive integer n such that
+n**2-n+41 is not prime.
 <<page foot>>
 @
 
@@ -38430,6 +39065,8 @@ to display the full list of operations defined by
  </head>
  <body>
 <<page head>>
+  <div align="center">Quotient Fields</div>
+  <hr/>
 The <a href="db.xhtml?Fraction">Fraction</a> domain implements quotients.
 The elements must belong to a domain of category 
 <a href="db.xhtml?IntegralDomain">IntegralDomain</a>: multiplication 
@@ -38579,6 +39216,8 @@ Conversion is discussed in detail in
  </head>
  <body>
 <<page head>>
+  <div align="center">Rational Numbers</div>
+  <hr/>
 Like integers, rational numbers can be arbitrarily large. For example:
 <ul>
  <li>
@@ -42119,88 +42758,6 @@ You can also substitute numerical values for some or all of the variables.
 <<page foot>>
 @
 
-\subsection{primesandfactorization.xhtml}
-<<primesandfactorization.xhtml>>=
-<<standard head>>
-  <script type="text/javascript">
-<<handlefreevars>>
-<<axiom talker>>
-  </script>
- </head>
- <body>
-<<page head>>
-Use the operation <a href="dbopfactor.xhtml">factor</a> to factor integers.
-It returns an object of type <a href="db.xhtml?Factored(Integer)">
-Factored Integer</a>. See <a href="factored.xhtml">Factored</a> for a
-discussion of the manipulation of factored objects.
-<ul>
- <li>
-  <input type="submit" id="p1" class="subbut" 
-    onclick="makeRequest('p1');"
-    value="factor 102400" />
-  <div id="ansp1"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopprimeq.xhtml">prime?</a> returns true or false
-depending on whether its argument is a prime.
-<ul>
- <li>
-  <input type="submit" id="p2" class="subbut" 
-    onclick="makeRequest('p2');"
-    value="prime? 7" />
-  <div id="ansp2"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p3" class="subbut" 
-    onclick="makeRequest('p3');"
-    value="prime? 8" />
-  <div id="ansp3"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopnextprime.xhtml">nextPrime</a> returns the
-least prime greater than its argument.
-<ul>
- <li>
-  <input type="submit" id="p4" class="subbut" 
-    onclick="makeRequest('p4');"
-    value="nextPrime 100" />
-  <div id="ansp4"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopprevprime.xhtml">prevPrime</a> returns the 
-greatest prime less than its argument
-<ul>
- <li>
-  <input type="submit" id="p5" class="subbut" 
-    onclick="makeRequest('p5');"
-    value="prevPrime 100" />
-  <div id="ansp5"><div></div></div>
- </li>
-</ul>
-To compute all primes between two integers (inclusively), use the 
-operation <a href="dbopprimes.xhtml">primes</a>.
-<ul>
- <li>
-  <input type="submit" id="p6" class="subbut" 
-    onclick="makeRequest('p6');"
-    value="primes(100,175)" />
-  <div id="ansp6"><div></div></div>
- </li>
-</ul>
-You might sometimes want to see the factorization of an integer when it is
-considered a Gaussian integer. See <a href="db.xhtml?Complex">Complex</a>
-for more details.
-<ul>
- <li>
-  <input type="submit" id="p7" class="subbut" 
-    onclick="makeRequest('p7');"
-    value="factor(2::Complex Integer)" />
-  <div id="ansp7"><div></div></div>
- </li>
-</ul>
-
-<<page foot>>
-@
 
 \subsection{puiseuxseries.xhtml}
 <<puiseuxseries.xhtml>>=
@@ -43096,103 +43653,6 @@ Enter the size of the matrix:
 
 @
 
-\subsection{somenumbertheoreticfunctions.xhtml}
-<<somenumbertheoreticfunctions.xhtml>>=
-<<standard head>>
-  <script type="text/javascript">
-<<handlefreevars>>
-<<axiom talker>>
-  </script>
- </head>
- <body>
-<<page head>>
-Axiom provides several number theoretic operations for integers.
-More examples are in <a href="integernumbertheoryfunctions.xhtml">
-IntegerNumberTheoryFunctions</a>.
-
-The operation <a href="dbopfibonacci.xhtml">fibonacci</a> computes the
-Fibonacci numbers. The algorithm has running time O(log(n)^3) for
-argument n.
-<ul>
- <li>
-  <input type="submit" id="p1" class="subbut" 
-    onclick="makeRequest('p1');"
-    value="[fibonacci(i) for i in 0..]" />
-  <div id="ansp1"><div></div></div>
- </li>
-</ul>
-The operation <a href="dboplegendre.xhtml">legendre</a> computes the 
-Legendre symbol for its two integer arguments where the second one is prime.
-If you know the second argument to be prime, use 
-<a href="dbopjacobi.xhtml">jacobi</a> instead where no check is made.
-<ul>
- <li>
-  <input type="submit" id="p2" class="subbut" 
-    onclick="makeRequest('p2');"
-    value="[legendre(i,11) for i in 0..10]" />
-  <div id="ansp2"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopjacobi.xhtml">jacobi</a> computes the Jacobi 
-symbol for its two integer arguments. By convention, 0 is returned if
-the greatest common divisor of the numerator and denominator is not 1.
-<ul>
- <li>
-  <input type="submit" id="p3" class="subbut" 
-    onclick="makeRequest('p3');"
-    value="[jacobi(i,15) for i in 0..9]" />
-  <div id="ansp3"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopeulerphi.xhtml">eulerPhi</a> computes the 
-values of Euler's phi function where phi(n) equals the number of positive
-integers less than or equal to n that are relatively prime to the positive
-integer n.
-<ul>
- <li>
-  <input type="submit" id="p4" class="subbut" 
-    onclick="makeRequest('p4');"
-    value="[eulerPhi i for i in 1..]" />
-  <div id="ansp4"><div></div></div>
- </li>
-</ul>
-The operation <a href="dbopmoebiusmu.xhtml">moebiusMu</a> 
-computes the Moebius mu function.
-<ul>
- <li>
-  <input type="submit" id="p5" class="subbut" 
-    onclick="makeRequest('p5');"
-    value="[moebiusMu i for i in 1..]" />
-  <div id="ansp5"><div></div></div>
- </li>
-</ul>
-The Ei function computes the <a href="dbopei.xhtml">Exponential Integral</a>.
-<ul>
- <li>
-  <input type="submit" id="p6" class="subbut" 
-    onclick="makeRequest('p6');"
-    value="[Ei(x/10.0) for x in 1..10]" />
-  <div id="ansp6"><div></div></div>
- </li>
-</ul>
-Although they have somewhat limited utility, Axiom provides Roman numerals.
-<ul>
- <li>
-  <input type="submit" id="p7" class="subbut" 
-    onclick="makeRequest('p7');"
-    value="a:=roman(78)" />
-  <div id="ansp7"><div></div></div>
- </li>
- <li>
-  <input type="submit" id="p8" class="subbut" 
-    onclick="makeRequest('p8');"
-    value="b:=roman(87)" />
-  <div id="ansp8"><div></div></div>
- </li>
-</ul>
-<<page foot>>
-@
-
 \subsection{summation.xhtml}
 <<summation.xhtml>>=
 <<standard head>>
@@ -43962,5 +44422,3 @@ static char axiom_bits[] = {
 \bibitem{1} nothing
 \end{thebibliography}
 \end{document}
-
-

\start
Date: Sun, 2 Mar 2008 00:17:36 -0600
From: Tim Daly
To: list
Subject: 20080301.01.tpd.patch (add additional hyperdoc	page translations)

The patch adds additional hyperdoc page translations -- Tim

=========================================================================
diff --git a/changelog b/changelog
index 52e3269..d14449f 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080301 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080229 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080222 tpd src/Makefile move hyperdoc bitmaps location
 20080222 tpd src/hyper/Makefile move hyperdoc bitmaps location
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index 7afa4e8..f3d863e 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -534,6 +534,7 @@ PAGES=rootpage.xhtml \
             dbopfirstdenom.xhtml \
             dbopfirstnumer.xhtml \
             dbopfractragits.xhtml \
+            dbopfractionpart.xhtml \
             dbopgamma.xhtml \
             dbopgcd.xhtml \
             dbophex.xhtml \
@@ -582,6 +583,10 @@ PAGES=rootpage.xhtml \
             dbopoddq.xhtml \
             dbopoperator.xhtml \
             dboporthonormalbasis.xhtml \
+            dbopoutputfixed.xhtml \
+            dbopoutputfloating.xhtml \
+            dbopoutputgeneral.xhtml \
+            dbopoutputspacing.xhtml \
             dboppadicfraction.xhtml \
             dboppartialfraction.xhtml \
             dboppartialquotients.xhtml \
@@ -616,6 +621,7 @@ PAGES=rootpage.xhtml \
             dboprootof.xhtml \
             dboprootsimp.xhtml \
             dboprootsof.xhtml \
+            dbopround.xhtml \
             dboprow.xhtml \
             dboprowechelon.xhtml \
             dbopsetcolumnbang.xhtml \
@@ -652,6 +658,7 @@ PAGES=rootpage.xhtml \
             dboptrace.xhtml \
             dboptranspose.xhtml \
             dboptrigs.xhtml \
+            dboptruncate.xhtml \
             dbopvariables.xhtml \
             dbopvectorise.xhtml \
             dbopvectorspace.xhtml \
@@ -683,6 +690,10 @@ PAGES=rootpage.xhtml \
               numquotientfields.xhtml \
             nummachinefloats.xhtml \
             numfloat.xhtml \
+              introtofloat.xhtml \
+              conversionfunctions.xhtml \
+              outputfunctions.xhtml \
+              determinantofhilbert.xhtml \
             numcomplexnumbers.xhtml \
             numfinitefields.xhtml \
             numnumericfunctions.xhtml \
@@ -5907,6 +5918,170 @@ The available test suites are:
 <<page foot>>
 @
 
+\subsection{conversionfunctions.xhtml}
+<<conversionfunctions.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Conversion Functions</div>
+  <hr/>
+You can use conversion (see 
+<a href="axbook/section-9.27.xhtml#subsec-9.27.2">Jenks section 9.27.2</a>)
+to go back and forth between
+<a href="db.xhtml?Integer">Integer</a>,
+<a href="db.xhtml?Fraction(Integer)">Fraction(Integer)</a> and
+<a href="db.xhtml?Float">Float</a>, as appropriate.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="i:=3::Float" />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="i::Integer" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p3']);"
+    value="i::Fraction Integer" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Since you are explicitly asking for a conversion, you must take 
+responsibility for any loss of exactness.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="r:=3/7::Float" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p4','p5']);"
+    value="r::Fraction Integer" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+This conversion cannot be performed: use 
+<a href="dboptruncate.xhtml">truncate</a> or
+<a href="dbopround.xhtml">round</a> if that is what you intend.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p4','p6']);"
+    value="r::Integer" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+The operations
+<a href="dboptruncate.xhtml">truncate</a> and
+<a href="dbopround.xhtml">round</a> truncate ...
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="makeRequest('p7');"
+    value="truncate 3.6" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+and round to the nearest integral <a href="db.xhtml?Float">Float</a>
+respectively.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="makeRequest('p8');"
+    value="round 3.6" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="makeRequest('p9');"
+    value="truncate(-3.6)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="makeRequest('p10');"
+    value="round(-3.6)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopfractionpart.xhtml">fractionPart</a>
+computes the fractional part of x, that is, x-truncate x.
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="makeRequest('p11');"
+    value="fractionPart 3.6" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+The operation <a href="dbopdigits.xhtml">digits</a> allows the user to
+set the precision. It returns the previous value it was using.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="makeRequest('p12');"
+    value="digits 40" />
+  <div id="ansp12"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="makeRequest('p13');"
+    value="sqrt 0.2" />
+  <div id="ansp13"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="makeRequest('p14');"
+    value="pi()$Float" />
+  <div id="ansp14"><div></div></div>
+ </li>
+</ul>
+The precision is only limited by the computer memory available.
+Calculations at 500 or more digits of precision are not difficult.
+<ul>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="makeRequest('p15');"
+    value="digits 500" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="makeRequest('p16');"
+    value="pi()$Float" />
+  <div id="ansp16"><div></div></div>
+ </li>
+</ul>
+Reset <a href="dbopdigits.xhtml">digits</a> to its default value.
+<ul>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="makeRequest('p17');"
+    value="digits 20" />
+  <div id="ansp17"><div></div></div>
+ </li>
+</ul>
+Numbers of type <a href="db.html?Float">Float</a> are represented as a record
+of two integers, namely, the mantissa and the exponent where the base
+of the exponent is binary. That is, the floating point number of the
+binary. That is, the floating point number (m,e) represents the number
+m*2**e. A consequence of using a binary base is that decimal numbers
+can not, in general, be represented exactly.
+<<page foot>>
+@
+
 \subsection{crytopage.xhtml}
 <<cryptopage.xhtml>>=
 <<standard head>>
@@ -8649,6 +8824,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopfractionpart.xhtml}
+<<dbopfractionpart.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopfractionpart not implemented
+<<page foot>>
+@
+
 \subsection{dbopgamma.xhtml}
 <<dbopgamma.xhtml>>=
 <<standard head>>
@@ -9101,6 +9286,46 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopoutputfixed.xhtml}
+<<dbopoutputfixed.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopoutputfixed not implemented
+<<page foot>>
+@
+
+\subsection{dbopoutputfloating.xhtml}
+<<dbopoutputfloating.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopoutputfloating not implemented
+<<page foot>>
+@
+
+\subsection{dbopoutputgeneral.xhtml}
+<<dbopoutputgeneral.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopoutputgeneral not implemented
+<<page foot>>
+@
+
+\subsection{dbopoutputspacing.xhtml}
+<<dbopoutputspacing.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopoutputspacing not implemented
+<<page foot>>
+@
+
 \subsection{dboppadicfraction.xhtml}
 <<dboppadicfraction.xhtml>>=
 <<standard head>>
@@ -9481,6 +9706,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopround.xhtml}
+<<dbopround.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopround not implemented
+<<page foot>>
+@
+
 \subsection{dboprow.xhtml}
 <<dboprow.xhtml>>=
 <<standard head>>
@@ -9821,6 +10056,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dboptruncate.xhtml}
+<<dboptruncate.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dboptruncate not implemented
+<<page foot>>
+@
+
 \subsection{dbopvariables.xhtml}
 <<dbopvariables.xhtml>>=
 <<standard head>>
@@ -9964,6 +10209,106 @@ the operations will have extra ones added at some stage.
 
 @
 
+\subsection{determinantofhilbert.xhtml}
+<<determinantofhilbert.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Example: Determinant of a Hilbert Matrix</div>
+  <hr/>
+Consider the problem of computing the determinant of a 10 by 10 
+Hilbert matrix. The (i,j)-th entry of a Hilbert matrix is given by
+1/(i+j+1).
+
+First do the computation using rational numbers to obtain the exact result.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+  value="a:Matrix FRAC INT:=matrix [ [1/(i+j+1) for j in 0..9] for i in 0..9]"
+   />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+This version of <a href="dbopdeterminant.xhtml">determinant</a> uses 
+Gaussian elimination.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="d:=determinant a" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p2','p3']);"
+    value="d::Float" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Now use hardware floats.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+  value=
+   "b:Matrix DFLOAT:=matrix [ [1/(i+j+1$DFLOAT) for j in 0..9] for i in 0..9]"
+   />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+The result given by hardware floats is correct to only four significant
+digits of precision. In the jargon of numerical analysis, the Hilbert
+matrix is said to be "ill-conditioned".
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p4','p5']);"
+    value="determinant b" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Now repeat the computation at a higher precision using 
+<a href="db.html?Float">Float</a>
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="makeRequest('p6');"
+    value="digits 40" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="makeRequest('p7');"
+  value=
+   "c:Matrix Float:=matrix [ [1/(i+j+1$Float) for j in 0..9] for i in 0..9]"
+   />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p7','p8']);"
+    value="determinant c" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+Reset <a href="dbopdigits.xhtml">digits</a> to its default value.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="makeRequest('p9');"
+    value="digits 20" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
 \subsection{differentiate.xhtml}
 <<differentiate.xhtml>>=
 <<standard head>>
@@ -34425,6 +34770,54 @@ lists of points in the plane.
 <<page foot>>
 @
 
+\subsection{introtofloat.xhtml}
+<<introtofloat.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Introduction to Float</div>
+  <hr/>
+Scientific notation is supported for input and output of floating
+point numbers. A floating point number is written as a string of 
+digits containing a decimal point optionally followed by the letter "E",
+and then the exponent. We begin by doing some calculations using
+arbitrary precision floats. The default precision is twenty decimal
+digits.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="1.234" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+A decimal base for the exponent is assumed, so the number 1.234E2 denotes
+1.234*10**2
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="1.234E2" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+The normal arithmetic operations are available for floating point numbers.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="sqrt(1.2+2.3/3.4^4.5)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
 %%J
 \subsection{jenks.xhtml}
 <<jenks.xhtml>>=
@@ -37201,24 +37594,29 @@ see <a href="axbook/book-contents.xhtml#chapter7">Graphics</a> in section 7,
 in section 8.1, and <a href="nummachinefloats.xhtml">DoubleFloat</a>
 <ul>
  <li>
+  <a href="introtofloat.xhtml">Introduction to Float</a> (see 
   <a href="axbook/section-9.27.xhtml#subsec-9.27.1">
-   Introduction to Float
-  </a>
+   Jenks section 9.27.1
+  </a>)
  </li>
  <li>
+  <a href="conversionfunctions.xhtml">Conversion Functions</a> (see
   <a href="axbook/section-9.27.xhtml#subsec-9.27.2">
-   Conversion Functions
-  </a>
+   Jenks section 9.27.2
+  </a>)
  </li>
  <li>
+  <a href="outputfunctions.xhtml">Output Functions</a> (see
   <a href="axbook/section-9.27.xhtml#subsec-9.27.3">
-   Output Functions
-  </a>
+   Jenks, section 9.27.3
+  </a>)
  </li>
  <li>
+  <a href="determinantofhilbert.xhtml">
+   An Example: Determinant of a Hilbert Matrix</a> (see
   <a href="axbook/section-9.27.xhtml#subsec-9.27.4">
-   An Example: Determinant of a Hilbert Matrx
-  </a>
+   Jenks, section 9.27.4
+  </a>)
  </li>
 </ul>
 <<page foot>>
@@ -40118,6 +40516,99 @@ X transpose is just a row and X is just a column.
 <<page foot>>
 @
 
+\subsection{outputfunctions.xhtml}
+<<outputfunctions.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Output Functions</div>
+  <hr/>
+A number of operations exist for specifying how numbers of type
+<a href="db.html?Float">Float</a> are to be displayed. By default,
+spaces are inserted every ten digits in the output for readability.
+(Not that you cannot include spaces in the input form of a floating
+point number, though you can use underscores.)
+
+Output spacing can be modified with the 
+<a href="dbopoutputspacing.xhtml">outputSpacing</a> operation. This
+inserts no spaces and then displays the value of x.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="outputSpacing 0; x:=sqrt 0.2" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Issue this to have the spaces inserted every 5 digits.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="outputSpacing 5; x" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+By default, the system displays floats in either fixed format or
+scientific format, depending on the magnitude of the number.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p3']);"
+    value="y:=x/10^10" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+A particular format may be requested with the operations
+<a href="dbopoutputfloating.xhtml">outputFloating</a> and
+<a href="dbopoutputfixed.xhtml">outputFixed</a>.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p4']);"
+    value="outputFloating(); x" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p5']);"
+    value="outputFixed(); y" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Additionally, you can ask for n digits to be displayed after the 
+decimal point.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p3','p6']);"
+    value="outputFloating 2; y" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p7']);"
+    value="outputFixed 2; x" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+The <a href="dbopoutputgeneral.xhtml">outputGeneral</a> function resets
+the output printing to the default behavior.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="makeRequest('p8');"
+    value="outputGeneral()" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
 
 %%P
 \subsection{pagelist.xhtml}

\start
Date: Sun, 2 Mar 2008 16:05:53 -0600
From: Tim Daly
To: list
Subject: 20080302.01.tpd.patch (add additional hyperdoc	page translations)

This patch adds additional hyperdoc page translations -- Tim

========================================================================
diff --git a/changelog b/changelog
index d14449f..7966a8b 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080302 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080301 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080229 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080222 tpd src/Makefile move hyperdoc bitmaps location
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index f3d863e..4871419 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -473,6 +473,7 @@ PAGES=rootpage.xhtml \
             dbopasech.xhtml \
             dbopatan.xhtml \
             dbopatanh.xhtml \
+            dbopbernoullib.xhtml \
             dbopbesseli.xhtml \
             dbopbesselj.xhtml \
             dbopbesselk.xhtml \
@@ -480,6 +481,8 @@ PAGES=rootpage.xhtml \
             dbopbeta.xhtml \
             dbopbinary.xhtml \
             dbopcardinalnumber.xhtml \
+            dbopchebyshevt.xhtml \
+            dbopchebyshevu.xhtml \
             dbopcoefficient.xhtml \
             dbopcoefficients.xhtml \
             dbopcoerce.xhtml \
@@ -503,11 +506,13 @@ PAGES=rootpage.xhtml \
             dbopcsc.xhtml \
             dbopcsch.xhtml \
             dbopcycleragits.xhtml \
+            dbopcyclotomic.xhtml \
             dbopd.xhtml \
             dbopdecimal.xhtml \
             dbopdefiningpolynomial.xhtml \
             dbopdegree.xhtml \
             dbopdenom.xhtml \
+            dbopdraw.xhtml \
             dbopdeterminant.xhtml \
             dbopdiagonalmatrix.xhtml \
             dbopdigamma.xhtml \
@@ -522,6 +527,7 @@ PAGES=rootpage.xhtml \
             dbopeigenvectors.xhtml \
             dbopelt.xhtml \
             dbopequal.xhtml \
+            dbopeulere.xhtml \
             dbopeulerphi.xhtml \
             dbopeval.xhtml \
             dbopevenq.xhtml \
@@ -537,6 +543,7 @@ PAGES=rootpage.xhtml \
             dbopfractionpart.xhtml \
             dbopgamma.xhtml \
             dbopgcd.xhtml \
+            dbophermiteh.xhtml \
             dbophex.xhtml \
             dbophorizconcat.xhtml \
             dbophtrigs.xhtml \
@@ -546,6 +553,7 @@ PAGES=rootpage.xhtml \
             dbopinverse.xhtml \
             dbopinvmod.xhtml \
             dbopjacobi.xhtml \
+            dboplaguerrel.xhtml \
             dboplaurent.xhtml \
             dboplcm.xhtml \
             dbopleadingcoefficient.xhtml \
@@ -8224,6 +8232,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopbernoullib.xhtml}
+<<dbopbernoullib.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopbernoullib not implemented
+<<page foot>>
+@
+
 \subsection{dbopbesseli.xhtml}
 <<dbopbesseli.xhtml>>=
 <<standard head>>
@@ -8284,6 +8302,26 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopchebyshevt.xhtml}
+<<dbopchebyshevt.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopchebyshevt not implemented
+<<page foot>>
+@
+
+\subsection{dbopchebyshevu.xhtml}
+<<dbopchebyshevu.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopchebyshevu not implemented
+<<page foot>>
+@
+
 \subsection{dbopcoefficient.xhtml}
 <<dbopcoefficient.xhtml>>=
 <<standard head>>
@@ -8514,6 +8552,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopcyclotomic.xhtml}
+<<dbopcyclotomic.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopcyclotomic not implemented
+<<page foot>>
+@
+
 \subsection{dbopd.xhtml}
 <<dbopd.xhtml>>=
 <<standard head>>
@@ -8564,6 +8612,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopdraw.xhtml}
+<<dbopdraw.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopdraw not implemented
+<<page foot>>
+@
+
 \subsection{dbopdeterminant.xhtml}
 <<dbopdeterminant.xhtml>>=
 <<standard head>>
@@ -8704,6 +8762,16 @@ the operations will have extra ones added at some stage.
 <<page foot>>
 @
 
+\subsection{dbopeulere.xhtml}
+<<dbopeulere.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopeulere not implemented
+<<page foot>>
+@
+
 \subsection{dbopeulerphi.xhtml}
 <<dbopeulerphi.xhtml>>=
 <<standard head>>
@@ -8854,6 +8922,16 @@ dbopfractionpart not implemented
 <<page foot>>
 @
 
+\subsection{dbophermiteh.xhtml}
+<<dbophermiteh.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbophermiteh not implemented
+<<page foot>>
+@
+
 \subsection{dbophex.xhtml}
 <<dbophex.xhtml>>=
 <<standard head>>
@@ -8945,6 +9023,16 @@ dbopfractionpart not implemented
 <<page foot>>
 @
 
+\subsection{dboplaguerrel.xhtml}
+<<dboplaguerrel.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dboplaguerrel not implemented
+<<page foot>>
+@
+
 \subsection{dboplaurent.xhtml}
 <<dboplaurent.xhtml>>=
 <<standard head>>
@@ -38490,6 +38578,10 @@ Although they have somewhat limited utility, Axiom provides Roman numerals.
 \subsection{numnumericfunctions.xhtml}
 <<numnumericfunctions.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body onload="resetvars();">
 <<page head>>
@@ -38687,6 +38779,318 @@ of the functions yield an error if the result is not real.
   <div id="ansp6"><div></div></div>
  </li>
 </ul>
+A number of additional operations may be used to compute numerical
+values. These are special polynomial functions that can be evaluated
+for values in any commutative ring R, and in particular for values in
+any floating-point type. The following operations are provided by the
+package <a href="db.html?OrthogonalPolynomialFunctions">
+OrthogonalPolynomialFunctions</a>:
+<ul>
+ <li> <a href="dbopchebyshevt.xhtml">chebyshevT</a>:
+      (nonNegativeInteger,R) -> R
+   <br/>
+      chebyshevT(n,z) is the nth Chebyshev polynomial of the first kind,
+      T[n](z). These are defined by 
+   <br/>
+      (1-t*z)/(1-2*t*z*t**2)=sum(T[n](z)*t**n,n=0..)
+ </li>
+ <li> <a href="dbopchebyshevu.xhtml">chebyshevU</a>:
+      (nonNegativeInteger,R) -> R
+   <br/>
+      chebyshevU(n,z) is the nth Chebyshev polynomial of the second kind,
+      U[n](z). These are defined by 
+   <br/>
+     1/(1-2*t*z+t**2)=sum(U[n](z)*t**n,n=0..)
+ </li>
+ <li> <a href="dbophermiteh.xhtml">hermiteH</a>:
+      (NonNegativeInteger,R) -> R
+   <br/>
+      hermiteH(n,z) is the nth Hermite polynomial, H[n](z). These are
+      defined by
+   <br/>
+      exp(2*t*z-t**2)=sum(H[n](z)*t**n/n!,n=0..)
+ </li>
+ <li> <a href="dboplaguerrel.xhtml">laguerreL</a>:
+      (NonNegativeInteger,R) -> R
+   <br/>
+       laguerreL(n,z) is the nth Laguerre polynomial, L[n](z). These are
+       defined by      
+   <br/>
+       (exp(-t*z/(1-t))/(1-t)=sum(L[n](z)*t**n/n!,n=0..)
+ </li>
+ <li> <a href="dboplaguerrel.xhtml">laguerreL</a>:
+      (NonNegativeInteger,NonNegativeInteger,R) -> R
+   <br/>
+      labuerreL(m,n,2) is the associated Laguerre polynomial, L&lt;m>[n](z).
+      This is the nth derivative of L[n](z).
+ </li>
+ <li> <a href="dboplegendrep.xhtml">legendreP</a>:
+      (NonNegativeInteger,R) -> R
+   <br/>
+      legendreP(n,z) is the nth Legendre polynomial, P[n](z). These are 
+      defined by
+   <br/>
+    1/sqrt(1-2*z*t+t**2)=sum(P[n](z)*t**n,n=0..)
+ </li>
+</ul>
+<br/>
+<br/>
+These operations require non-negative integers for the indices,
+but otherwise the argument can be given as desired.
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="makeRequest('p7');"
+    value="[chebyshevT(i,z) for i in 0..5]" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+The expression chebyshevT(n,z) evaluates to the nth Chebyshev polynomial
+of the first kind.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="makeRequest('p8');"
+    value="chebyshevT(3,5.0+6.0*%i)" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="makeRequest('p9');"
+    value="chebyshevT(3,5.0::DoubleFloat)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+The expression chebyshevU(n,z) evaluates to the nth Chebyshev polynomial
+of the second kind.
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="makeRequest('p10');"
+    value="[chebyshevU(i,z) for i in 0..5]" />
+  <div id="ansp10"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="makeRequest('p11');"
+    value="chebyshevU(3,0.2)" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+The expression hermiteH(n,z) evaluates to the nth Hermite polynomial.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="makeRequest('p12');"
+    value="[hermiteH(i,z) for i in 0..5]" />
+  <div id="ansp12"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="makeRequest('p13');"
+    value="hermiteH(100,1.0)" />
+  <div id="ansp13"><div></div></div>
+ </li>
+</ul>
+The expression laguerreL(n,z) evaluates to the nth Laguerre polynomial.
+<ul>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="makeRequest('p14');"
+    value="[laguerreL(i,z) for i in 0..4]" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="makeRequest('p15');"
+    value="laguerreL(4,1.2)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="makeRequest('p16');"
+    value="[laguerreL(j,3,z) for j in 0..4]" />
+  <div id="ansp16"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="makeRequest('p17');"
+    value="laguerreL(1,3,2.1)" />
+  <div id="ansp17"><div></div></div>
+ </li>
+</ul>
+The expression legendreP(n,z) evaluates to the nth Legendre polynomial.
+<ul>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="makeRequest('p18');"
+    value="[legendreP(i,z) for i in 0..5]" />
+  <div id="ansp18"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p19" class="subbut" 
+    onclick="makeRequest('p19');"
+    value="legendreP(3,3.0*%i)" />
+  <div id="ansp19"><div></div></div>
+ </li>
+</ul>
+<br/>
+<br/>
+Finally, three number-theoretic polynomial operations may be evaluated.
+The following operations are provided by the package
+<a href="db.xhtml?NumberTheoreticPolynomialFunctions">
+NumberTheoreticPolynomialFunctions</a>.
+<ul>
+ <li> <a href="dbopbernoullib.xhtml">bernoulliB</a>:
+      (NonNegativeInteger,R) -> R
+   <br/>
+      bernoulliB(n,z) is the nth Bernoulli polynomial, B[n](z). These are
+      defined by
+   <br/>
+      t*exp(z*t)/(exp t - 1)=sum(B[n](z)*t**n/n! for n=0..)
+ </li>
+ <li> <a href="dbopeulere.xhtml">eulerE</a>:
+      (NonNegativeInteger,R) -> R
+   <br/>
+      eulerE(n,z) is the nth Euler polynomial, E[n](z). These are defined by
+   <br/>
+      2*exp(z*t)/(exp t + 1)=sum(E[n](z)*t**n/n! for n=0..)
+ </li>
+ <li> <a href="dbopcyclotomic.xhtml">cyclotomic</a>:
+      (NonNegativeInteger,R) -> R
+   <br/>
+      cyclotomic(n,z) is the nth cyclotomic polynomial &#x003C6;(n,z).
+      This is the polynomial whose roots are precisely the primitive nth
+      roots of unity. This polynomial has degree given by the Euler
+      totient function &#x003C6;(n).
+ </li>
+</ul>
+
+The expression bernoulliB(n,z) evaluates to the nth Bernoulli polynomial.
+<ul>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+    onclick="makeRequest('p20');"
+    value="bernoulliB(3,z)" />
+  <div id="ansp20"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+    onclick="makeRequest('p21');"
+    value="bernoulliB(3,0.7+0.4*%i)" />
+  <div id="ansp21"><div></div></div>
+ </li>
+</ul>
+The expression eulerE(n,z) evaluates to the nth Euler polynomial.
+<ul>
+ <li>
+  <input type="submit" id="p22" class="subbut" 
+    onclick="makeRequest('p22');"
+    value="eulerE(3,z)" />
+  <div id="ansp22"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p23" class="subbut" 
+    onclick="makeRequest('p23');"
+    value="eulerE(3,0.7+0.4*%i)" />
+  <div id="ansp23"><div></div></div>
+ </li>
+</ul>
+The expression cyclotomic(n,z) evaluates to the nth cyclotomic polynomial.
+<ul>
+ <li>
+  <input type="submit" id="p24" class="subbut" 
+    onclick="makeRequest('p24');"
+    value="cyclotomic(3,z)" />
+  <div id="ansp24"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p25" class="subbut" 
+    onclick="makeRequest('p25');"
+    value="cyclotomic(3,(-1.0+0.0*%i)**(2/3))" />
+  <div id="ansp25"><div></div></div>
+ </li>
+</ul>
+<br/>
+<br/>
+Drawing complex functions in Axiom is presently somewhat awkward compared
+to drawing real functions. It is necessary to use the 
+<a href="dbopdraw.xhtml">draw</a> operations that operate on functions
+rather than expressions.
+
+This is the complex exponential function. When this is displayed in color,
+the height is the value of the real part of the function and the color is
+the imaginary part. Red indicates large negative imaginary values, green
+indicates imaginary values near zero and blue/violet indicates large
+positive imaginary values.
+<ul>
+ <li>
+  <input type="submit" id="p26" class="subbut" 
+    onclick="makeRequest('p26');"
+    value='draw((x,y)+->real exp complex(x,y),-2..2,-2*%pi..2*%pi,colorFunction==(x,y)+->imag exp complex(x,y),title=="exp(x+%i*y)",style=="smooth")' />
+  <div id="ansp26"><div></div></div>
+ </li>
+</ul>
+This is the complex arctangent function. Again, the height is the real part
+of the function value but here the color indicates the function value's phase.
+The position of the branch cuts are clearly visible and one can see that the
+function is real only for a real argument.
+<ul>
+ <li>
+  <input type="submit" id="p27" class="subbut" 
+    onclick="makeRequest('p27');"
+    value='vp:=draw((x,y)+->real atan complex(x,y),-%pi..%pi,-%pi..%pi,colorFunction==(x,y)+->argument atan complex(x,y),title=="atan(x+%i*y)",style=="shade"); rotate(vp,-160,-45); vp' />
+  <div id="ansp27"><div></div></div>
+ </li>
+</ul>
+This is the complex Gamma function.
+<ul>
+ <li>
+  <input type="submit" id="p28" class="subbut" 
+    onclick="makeRequest('p28');"
+    value='draw((x,y)+->max(min(real Gamma complex(x,y),4),-4),-%pi..%pi,-%pi..%pi,style=="shade",colorFunction==(x,y)+->argument Gamma complex(x,y),title=="Gamma(x+%i*y)",var1Steps==50,var2Steps==50)' />
+  <div id="ansp28"><div></div></div>
+ </li>
+</ul>
+This shows the real Beta function near the origin.
+<ul>
+ <li>
+  <input type="submit" id="p29" class="subbut" 
+    onclick="makeRequest('p29');"
+    value='draw(Beta(x,y)/100,x=-1.6..1.7,y=-1.6..1.7,style=="shade",title=="Beta(x,y)",var1Steps==40,var2Steps==40)' />
+  <div id="ansp29"><div></div></div>
+ </li>
+</ul>
+This is the Bessel function J(alpha,x) for index alpha in the range -6..4 and
+argument x in the range 2..14.
+<ul>
+ <li>
+  <input type="submit" id="p30" class="subbut" 
+    onclick="makeRequest('p30');"
+    value='draw((alpha,x)+->min(max(besselJ(alpha,x+8),-6), 6),-6..4,-6..6,title=="besselJ(alpha,x)",style=="shade",var1Steps==40,var2Steps==40)' />
+  <div id="ansp30"><div></div></div>
+ </li>
+</ul>
+This is the modified Bessel function I(alpha,x) evaluated for various real
+values of the index alpha and fixed argument x=5.
+<ul>
+ <li>
+  <input type="submit" id="p31" class="subbut" 
+    onclick="makeRequest('p31');"
+    value="draw(besselI(alpha,5),alpha=-12..12,unit==[5,20])" />
+  <div id="ansp31"><div></div></div>
+ </li>
+</ul>
+This is similar to the last example except the index alpha takes on complex
+values in a 6x6 rectangle centered on the origin.
+<ul>
+ <li>
+  <input type="submit" id="p32" class="subbut" 
+    onclick="makeRequest('p32');"
+    value='draw((x,y)+->real besselI(complex(x/20,y/20),5),-60..60,-60..60,colorFunction==(x,y)+->argument besselI(complex(x/20,y/20),5),title=="besselI(x+i*y,5)",style=="shade")' />
+  <div id="ansp32"><div></div></div>
+ </li>
+</ul>
 <<page foot>>
 @
 
\start
Date: Mon, 3 Mar 2008 12:05:38 -0600
From: Tim Daly
To: list
Subject: Lisp

I'd encourage you to spend a few minutes reading
http://www.defmacro.org/ramblings/lisp.html

It is a gentle introduction to the reason why I'm moving
all of the internal code to common lisp. 

Tim

\start
Date: Mon, 3 Mar 2008 13:41:07 -0500
From: Bill Page
To: Tim Daly
Subject: Re: Lisp

Tim,

Did you actually read this article? In fact the article contains the
specific reason why you should *not* be converting BOOT code to Lisp:
(my emphasis ** ** below):

---------

...

Domain Specific Languages

In this article we've already encountered two domain specific
languages: Ant (specific to dealing with project builds) and our
unnamed mini-language for dealing with to-do lists. The difference is
that Ant was written from scratch using XML, an XML parser, and Java
while our language is embedded into Lisp and is easily created within
a couple of minutes.

We've already discussed the benefits of DSLs, mainly why Ant is using
XML, not Java source code. **Lisp lets us create as many DSLs as we
need for our problem.** We can create domain specific languages for
creating web applications, writing massively multiplayer games, doing
fixed income trading, solving the protein folding problem, dealing
with transactions, etc. We can layer these languages on top of each
other and create a language for writing web-based trading applications
by taking advantage of our web application language and bond trading
language. Every day we'd reap the benefits of this approach, much like
we reap the benefits of Ant.

Using DSLs to solve problems results in much more compact,
maintainable, flexible programs. In a way we create them in Java by
creating classes that help us solve the problem. The difference is
that Lisp allows us to take this abstraction to the next level: we're
not limited by Java's parser. Think of writing build scripts in Java
itself using some supporting library. Compare it to using Ant. Now
apply this same comparison to every single problem you've ever worked
on and you'll begin to glimpse a small share of the benefits offered
by Lisp.

-------

BOOT is just another DSL. Writing Axiom internals in BOOT does not
mean that we are no longer use Lisp, rather it means we are simply
using Lisp in the way it was intended to be used.

Regards,
Bill Page.

On 3/3/08, Tim Daly wrote:
> I'd encourage you to spend a few minutes reading
>  http://www.defmacro.org/ramblings/lisp.html
>
>  It is a gentle introduction to the reason why I'm moving
>  all of the internal code to common lisp.

\start
Date: Mon, 3 Mar 2008 16:50:23 -0500
From: Tim Daly
To: Bill Page
Subject: Re: Lisp

>Did you actually read this article? In fact the article contains the
>specific reason why you should *not* be converting BOOT code to Lisp:
>(my emphasis ** ** below):

Funny how we read the same article differently.

I have a large program for work (approx 50k lines of lisp) that 
contains 2 domain-specific languages within the program. One of
the languages, for example, lets me write conditional conncurrent
assigments in a language that is very close to the specification
that I'm given. It is close enough so the authors of the original
specification write the lisp code for their specs in a separate file.

Thus, the specification reads something like:

  a := f(x,y,x)

and my "domain specific language" that the specification author
writes is:

  (assign a (f x y x))

I COULD have written it as "strings" that read exactly like the
original syntax but I gained several advantages by using lisp-like
syntax. 

The first is that my "parser" for this "language" is (read). It took
me milliseconds to implement the parser and it is fully debugged.

The second is that the language is actually macros which expand into
XML for communication, assembler for testing, and conditional
concurrent assignments for use. So the same surface syntax is
trivially macro-expanded in context.

The third is that the domain-specific language can by extended
without modifying my program. Thus when the author wanted to do
an optimization for evaluating one of the arguments he only needed
to write, in his external spec file:

(defun optimizeExpression (e) ...)

(assign a `(f ,(optimizeExpression x) y z))

and it all "just worked". So the lisp-like syntax allows anyone
downstream of me to modify and extend the syntax and semantics
without change to my program.



If I wrote a "boot-like syntax" aka "strings" I'd have to write and
debug a parser. Then I'd have to be involved in discussions about
what "grammar" to accept, and I'd have teach the spec author about
making their grammer unambiguous. Debugging failing code would involve
figuring out what failed where, since the source is gone. And I would
not be able to run the source code interpreted so I could single-step it,
thus increasing debugging time. Nor could I trace the surface syntax
without knowing the kind of code generated and the mangled names.

So my 50k lines of lisp would be 100k lines, 50k of which is a
"strings" to lisp parser/translator. The end result would be more
complex, much harder to understand, much harder to debug, and much
less flexible and dynamic.

\start
Date: Mon, 3 Mar 2008 15:44:18 -0600
From: Tim Daly
To: Bill Page
Subject: Lisp

I guess the fundamental point is this: 

  Using s-expression syntax allows the full use of lisp.

Lisp, unlike any other programming language, allows you to use
the interpreter, the compiler, and macros anywhere and everywhere.
At any time that you need them you can use them and "it just works".
In addition, the end user of your program also has them available
(if you do it "in the lisp spirit").

As soon as you move away from the s-expression syntax you lose it all.
You have to write "strings" that "have meaning", given by a parser,
compiler, translator, etc. Lisp loses the special property of
"turtles all the way down". It becomes just another programming
language.

Boot turns lisp into "just another language".

\start
Date: Mon, 03 Mar 2008 17:34:00 -0500
From: William Sit
To: Bill Page, Tim Daly
Subject: Re: Lisp

As I read your quoted passage and comments, it occurs to 
me (disclaimer: I am not a language expert, so take my 
comments with a large grain of salt) that the even more 
important statement to be emphasized is: "We can layer 
these languages on top of each other and create a language 
for writing web-based trading applications" where instead 
of "trading" we can replace it with Axiom or mathematical. 
After all I find that each category and domain in Axiom is 
a DSL (domain specific language) that the founders "layer 
these languages on top of each other to create a language" 
for new DSLs. That is what contributed to Axiom's problem 
solving power in mathematics. The underlyling lisp is just 
the foundation that allows the bootstrap and maybe 
streamlining some foundational operations. Lisp is of 
course important, but I imagine if there were a Tim-twin 
who favors another foundational language other than lisp, 
Axiom could be built on that as well. (In some way, FOAM 
can be considered as one such foundational language for 
Aldor.)

But as a simple user of Axiom, the most important thing 
for me is that "it works."

William


On Mon, 3 Mar 2008 13:41:07 -0500
  Bill Page wrote:
>Tim,
>
>Did you actually read this article? In fact the article 
>contains the
>specific reason why you should *not* be converting BOOT 
>code to Lisp:
>(my emphasis ** ** below):
>
>---------
>
>...
>
>Domain Specific Languages
>
>In this article we've already encountered two domain 
>specific
>languages: Ant (specific to dealing with project builds) 
>and our
>unnamed mini-language for dealing with to-do lists. The 
>difference is
>that Ant was written from scratch using XML, an XML 
>parser, and Java
>while our language is embedded into Lisp and is easily 
>created within
>a couple of minutes.
>
>We've already discussed the benefits of DSLs, mainly why 
>Ant is using
>XML, not Java source code. **Lisp lets us create as many 
>DSLs as we
>need for our problem.** We can create domain specific 
>languages for
>creating web applications, writing massively multiplayer 
>games, doing
>fixed income trading, solving the protein folding 
>problem, dealing
>with transactions, etc. We can layer these languages on 
>top of each
>other and create a language for writing web-based trading 
>applications
>by taking advantage of our web application language and 
>bond trading
>language. Every day we'd reap the benefits of this 
>approach, much like
>we reap the benefits of Ant.
>
>Using DSLs to solve problems results in much more 
>compact,
>maintainable, flexible programs. In a way we create them 
>in Java by
>creating classes that help us solve the problem. The 
>difference is
>that Lisp allows us to take this abstraction to the next 
>level: we're
>not limited by Java's parser. Think of writing build 
>scripts in Java
>itself using some supporting library. Compare it to using 
>Ant. Now
>apply this same comparison to every single problem you've 
>ever worked
>on and you'll begin to glimpse a small share of the 
>benefits offered
>by Lisp.
>
>-------
>
>BOOT is just another DSL. Writing Axiom internals in BOOT 
>does not
>mean that we are no longer use Lisp, rather it means we 
>are simply
>using Lisp in the way it was intended to be used.
>
>Regards,
>Bill Page.
>
>On 3/3/08, Tim Daly 
>Tim Daly wrote:
>> I'd encourage you to spend a few minutes reading
>>  http://www.defmacro.org/ramblings/lisp.html
>>
>>  It is a gentle introduction to the reason why I'm 
>>moving
>>  all of the internal code to common lisp.

\start
Date: Tue, 4 Mar 2008 00:33:57 -0600
From: Tim Daly
To: list
Subject: 20080303.01.tpd.patch (add additional hyperdoc	page translations)

This patch adds additional hyperdoc page translations

=======================================================================
diff --git a/changelog b/changelog
index 7966a8b..4d6ce3b 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080303 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080302 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080301 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080229 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index 4871419..76c0e51 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -589,6 +589,7 @@ PAGES=rootpage.xhtml \
             dbopnumer.xhtml \
             dbopnumeric.xhtml \
             dbopoddq.xhtml \
+            dboponedimensionalarray.xhtml \
             dbopoperator.xhtml \
             dboporthonormalbasis.xhtml \
             dbopoutputfixed.xhtml \
@@ -9354,6 +9355,16 @@ dboplaguerrel not implemented
 <<page foot>>
 @
 
+\subsection{dboponedimensionalarray.xhtml}
+<<dboponedimensionalarray.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dboponedimensionalarray not implemented
+<<page foot>>
+@
+
 \subsection{dbopoperator.xhtml}
 <<dbopoperator.xhtml>>=
 <<standard head>>
@@ -35087,6 +35098,8 @@ infinity; the step size is any positive integer.
  </head>
  <body>
 <<page head>>
+  <div align="center">Linear Algebra</div>
+  <hr/>
   <table>
    <tr>
     <td>
@@ -36235,20 +36248,342 @@ to display the full list of operations defined by
 \subsection{lin1darrays.xhtml}
 <<lin1darrays.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      lin1darrays not implemented
+  <div align="center">One Dimensional Array</div>
+  <hr/>
+The <a href="db.html?OneDimensionalArray">OneDimensionalArray</a> is used
+for storing data in a one-dimensional indexed data structure. Such an array
+is a homogeneous data structure in that all the entries of the array must
+belong to the same Axiom domain. Each array has a fixed length specified
+by the user and arrays are not extensible. The indexing of 
+one-dimensional arrays is one-based. This means that the "first" element of
+an array is given the index 1. See also
+<a href="db.html?Vector">Vector</a> and
+<a href="db.html?FlexibleArray">FlexibleArray</a>. To create a 
+one-dimensional array, apply the operation
+<a href="dboponedimensionalarray.xhtml">oneDimensionalArray</a> to a list.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="oneDimensionalArray [i^2 for i in 1..10]" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Another approach is to first create a, a one-dimensional array of 10 0's.
+<a href="db.html?OneDimensionalArray">OneDimensionalArray</a> has a 
+convenient abbreviation 
+<a href="db.html?OneDimensionalArray">ARRAY1</a>.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="a:ARRAY1 INT := new(10,0)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Set each ith element to i, then display the result.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p2','p3']);"
+    value="for i in 1..10 repeat a.i:=i ; a" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Square each element by mapping the function i+->i**2 onto each element.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p2','p4']);"
+    value="map!(i+->i^2,a); a" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Reverse the elements in place.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5']);"
+    value="reverse! a" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Swap the 4th and 5th element.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6']);"
+    value="swap!(a,4,5); a" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+Sort the elements in place.
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7']);"
+    value="sort! a" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+Create a new one-dimensional array b containing the last 5 elements of a.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8']);"
+    value="b:=a(6..10)" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+Replace the first 5 elements of a with those of b.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p9']);"
+    value="copyInto!(a,b,1)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
 <<page foot>>
 @
 
 \subsection{lin2darrays.xhtml}
 <<lin2darrays.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      lin2darrays not implemented
+  <div align="center">Two Dimensional Array</div>
+  <hr/>
+The <a href="db.xhtml?TwoDimensionalArray">TwoDimensionalArray</a> is used
+for storing data in a two-dimensional data structure indexed by row and by
+column. Such an array is a homogeneous data structure in that all the
+entries of the array must belog to the same Axiom domain (although see
+the <a href="axbook/section-2.6.xhtml">Any</a> domain). Each array has a
+fixed number of rows and columns specified by the user and arrays are not
+extensible. In Axiom, the indexing of two-dimensional arrays is one-based.
+This means that both the "first" row of an array and the "first" column of
+an array are given the index 1. Thus, the entry in the upper left corner
+of an array is in position (1,1).
+
+The operation <a href="dbopnew.xhtml">new</a> creates an array with a
+specified number of rows and columns and fills the components of that
+array with a specified entry. The arguments of this operation specify the
+number of rows, the number of columns, and the entry. This creates a
+five-by-four array of integers, all of which are zero.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="arr:ARRAY2 INT:=new(5,4,0)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+The entries of this array can be set to other integers using the
+operation <a href="dbopsetelt.xhtml">setelt</a>.
+
+Issue this to set the element in the upper left corner of this array to 17.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="setelt(arr,1,1,17)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Now the first element of the array is 17.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p2','p3']);"
+    value="arr" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Likewise, elements of an array are extracted using the operation
+<a href="dbopelt.xhtml">elt</a>.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p2','p4']);"
+    value="elt(arr,1,1)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Another way to use these two operations is as follows. This sets the
+element in position (3,2) of the array to 15.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p5']);"
+    value="arr(3,2):=15" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+This extracts the element in position (,32) of the array.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p6']);"
+    value="arr(3,2)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+The operations <a href="dbopelt.xhtml">elt</a> and 
+<a href="dbopsetelt.xhtml">setelt</a> come equipped with an error check which 
+verifies that the indices are in the proper ranges. For example, the
+above array has five rows and four columns, so if you ask for the entry
+in position (6,2) with arr(6,2) Axiom displays an error message. If there
+is no need for an error check, you can call the operations
+<a href="dbopqelt.xhtml">qelt</a> and 
+<a href="dbopqseteltbang.xhtml">qsetelt!</a> which provide the same 
+functionality but without the error check. Typically, these operations
+are called in well-tested programs.
+
+The operations <a href="dboprow.xhtml">row</a> and
+<a href="dbopcolumn.xhtml">column</a> extract rows and columns, 
+respectively, and return objects of 
+<a href="db.xhtml?OneDimensionalArray">OneDimensionalArray</a> with the
+same underlying element type.
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p7']);"
+    value="row(arr,1)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p8']);"
+    value="column(arr,1)" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+
+You can determine the dimensions of an array by calling the operations
+<a href="dbopnrows.xhtml">nrows</a> and <a href="dbopncols.xhtml">ncols</a>, 
+which return the number of rows and columns, respectively.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p1','p9']);"
+    value="nrows(arr)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p10']);"
+    value="ncols(arr)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+To apply an operation to every element of an array, use 
+<a href="dbopmap.xhtml">map</a>. This creates a new array. This
+expression negates every element.
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p11']);"
+    value="map(-,arr)" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+This creates an array where all the elements are doubled.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p12']);"
+    value="map((x+->x+x),arr)" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
+To change the array destructively, use 
+<a href="dbopmapbang.xhtml">map!</a> instead of
+<a href="dbopmap.xhtml">map</a>. If you need to make a copy of any array, 
+use <a href="dbopcopy.xhtml">copy</a>.
+<ul>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p13']);"
+    value="arrc:=copy(arr)" />
+  <div id="ansp13"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p13','p14']);"
+    value="map!(-,arrc)" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p13','p14','p15']);"
+    value="arrc" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p16']);"
+    value="arrc:=copy(arr)" />
+  <div id="ansp16"><div></div></div>
+ </li>
+</ul>
+Use <a href="dbopmemberq.xhtml">member?</a> to see if a given element 
+is in an array.
+<ul>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p17']);"
+    value="member?(17,arr)" />
+  <div id="ansp17"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p18']);"
+    value="member?(10317,arr)" />
+  <div id="ansp18"><div></div></div>
+ </li>
+</ul>
+To see how many times an element appears in an array, use 
+<a href="dbopcount.xhtml">count</a>.
+<ul>
+ <li>
+  <input type="submit" id="p19" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p19']);"
+    value="count(17,arr)" />
+  <div id="ansp19"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+    onclick="handleFree(['p1','p2','p5','p20']);"
+    value="count(0,arr)" />
+  <div id="ansp20"><div></div></div>
+ </li>
+</ul>
+
+For more information about the operations available for
+<a href="db.xhtml?TwoDimensionalArray">TwoDimensionalArray</a>, issue
+<ul>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+    onclick="makeRequest('p21');"
+    value=")show TwoDimensionalArray" />
+  <div id="ansp21"><div></div></div>
+ </li>
+</ul>
+For more information on related topics, see
+<a href="pagematrix.xhtml">Matrix</a> and
+<a href="lin1darrays.xhtml">OneDimensionalArray</a>
 <<page foot>>
 @
 
\start
Date: Tue, 4 Mar 2008 20:22:55 -0500
From: Bill Page
To: Tim Daly
Subject: Re: Lisp

On 3/3/08, Tim Daly wrote:
>
> Funny how we read the same article differently.
>

Indeed!

> ...
> Thus, the specification reads something like:
>
>  a := f(x,y,x)
>
> and my "domain specific language" that the specification
> author writes is:
>
>  (assign a (f x y x))
>

Why do you call this a "domain specific language"?

Suppose you were the editor of a scientific journal and you wanted to
be able to allow people who only wrote in French to contribute to your
journal. How happy would you make them if you told them that they
could use their own language - provided - that the syntax and grammar
was the same as English?

> I COULD have written it as "strings" that read exactly like
> the original syntax but I gained several advantages by using
> lisp-like syntax.

What you wrote is not just lisp-like, it *is* Lisp.

>
> The first is that my "parser" for this "language" is (read).

Perhaps that is a clue that what you are actually doing is writing in Lisp? ;)

> It took me milliseconds to implement the parser and it
> is fully debugged.
>

No. You are simply writing in Lisp.

\start
Date: Tue, 4 Mar 2008 20:33:07 -0500
From: Bill Page
To: Tim Daly
Subject: Re: Lisp

On 3/3/08, Tim Daly wrote:
> I guess the fundamental point is this:
>
>   Using s-expression syntax allows the full use of lisp.
>

That is an empty statement.

> ...
> As soon as you move away from the s-expression syntax you
> lose it all. You have to write "strings" that "have meaning", given
> by a parser, compiler, translator, etc. Lisp loses the special
> property of "turtles all the way down". It becomes just another
> programming language.

Nonesense. Many languages have the property that expressions in the
language (or even whole programs) can be represented as a data
structure in that language. For example, Gaby has provided such a
domain for OpenAxiom written in SPAD and called Syntax. There is
nothing very special about s-expressions that cannot also be expressed
by some other tree-like recursive data type.

>
>  Boot turns lisp into "just another language".
>

Lisp is "just another language".

\start
Date: Tue, 4 Mar 2008 20:44:47 -0500
From: Bill Page
To: William Sit
Subject: Re: Lisp

On 3/3/08, William Sit wrote:
>
> As I read your quoted passage and comments, it occurs
> to me (disclaimer: I am not a language expert, so take
> my comments with a large grain of salt) that the even
> more important statement to be emphasized is:
> "We can layer these languages on top of each other
>  and create a language for writing web-based trading
> applications"
> where instead of "trading" we can replace it with Axiom
> or mathematical.

Yes, I agree with you completely!

>  After all I find that each category and domain in Axiom
> is a DSL (domain specific language) that the founders
> "layer these languages on top of each other to create a
> language" for new DSLs.

I think would should distinguish a new "language" from simply
extending a language by inventing new data types to a library,
otherwise the concept of a domain-specific language becomes rather
trivial.

> That is what contributed to Axiom's problem solving
> power in mathematics. The underlyling lisp is just
> the foundation that allows the bootstrap and maybe
> streamlining some foundational operations. Lisp is of
> course important, but I imagine if there were a Tim-twin
> who favors another foundational language other than lisp,
> Axiom could be built on that as well.

Yes, I agree.

> (In some way, FOAM can be considered as one such
> foundational language for Aldor.)
>

Usually FOAM would be considered a kind of "Abstract
Machine". This term is also often applied to Lisp. In fact
as you know Lisp was once used as the model for a real
machine (actually implemented in microcode).

>  But as a simple user of Axiom, the most important
> thing for me is that "it works."
>

Personally I really wish that that were true, but all of my experience
with Axiom over the last few years demonstrates to me that using Axiom
is still really rather difficult - too difficult for most people. I
think Axiom has some very good ideas, some of which have not yet
really found their way into other more modern languages, but the gap
has narrowed considerably in the last few years. And now there is a
very active computer algebra project called Sage doing almost all of
the things that would really be worth doing in Axiom, in Python
instead.

\start
Date: Wed, 5 Mar 2008 01:56:39 -0600
From: Tim Daly
To: Bill Page
Subject: Lisp

Bill,

To quote the article:

  "For many months the Lisp advocates pressed on. I was baffled. 
   Many extremely intelligent people I know and had much respect 
   for were praising Lisp with almost religious dedication. There
   had to be something there, something I couldn't afford not to
   get my hands on! Eventually my thirst for knowledge won me over.
   ...[snip].... And then I got it.

   The enlightenment came instantaneously. One moment I understood
   nothing, and the next moment everything clicked into place. I've
   achieved nirvana. Dozens of times I heard Eric Raymond's statement
   quoted by different people: "Lisp is worth learning for the profound
   enlightenment experience you will have when you finally get it; that
   experience will make you a better programmer for the rest of your
   days, even if you never actually use Lisp itself a lot." I never
   understood this statement. I never believed it could be true. And
   finally, after all the pain, it made sense!. There was more truth
   to it than I ever could have imagined. I've achieved an almost
   divine state of mind, an instantaneous enlightenment experience
   that turned my view of computer science on its head in less than
   a single second"


I wrote:
> I COULD have written it as "strings" that read exactly like 
> the original syntax but I gained several advantages by using
> lisp-like syntax.

You wrote:
> What you wrote is not just lisp-like, it *is* lisp

which, if you deeply understood what you said, would be a profound statement.





Either you "get it" or you don't. There is no half-way with Lisp.  
There are no words to explain what it means to "get it" until you do 
... and then there is no reason to explain it; you get it. 

I wasn't trying to start a language debate. I was only trying to point
people at a very gentle introduction by someone who suddenly "got it"
and was trying to help others "see the whole elephant". 

Why don't we just let this rest and not turn it into a debate. 

\start
Date: Wed, 5 Mar 2008 03:37:56 -0600
From: Tim Daly
To: list
Subject: 20080304.01.tpd.patch (add additional hyperdoc	page translations)

This patch adds additional hyperdoc page translations

=======================================================================
diff --git a/changelog b/changelog
index 4d6ce3b..6b2c6be 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080304 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080303 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080302 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080301 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index 76c0e51..ec9dbe3 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -496,6 +496,7 @@ PAGES=rootpage.xhtml \
             dbopcontent.xhtml \
             dbopcontinuedfraction.xhtml \
             dbopconvergents.xhtml \
+            dbopconvert.xhtml \
             dbopcopy.xhtml \
             dbopcos.xhtml \
             dbopcosh.xhtml \
@@ -503,8 +504,10 @@ PAGES=rootpage.xhtml \
             dbopcoth.xhtml \
             dbopcount.xhtml \
             dbopcountableq.xhtml \
+            dbopcreate3space.xhtml \
             dbopcsc.xhtml \
             dbopcsch.xhtml \
+            dbopcurve.xhtml \
             dbopcycleragits.xhtml \
             dbopcyclotomic.xhtml \
             dbopd.xhtml \
@@ -564,6 +567,9 @@ PAGES=rootpage.xhtml \
             dboplog.xhtml \
             dboploggamma.xhtml \
             dbopmainvariable.xhtml \
+            dbopmakegraphimage.xhtml \
+            dbopmakeobject.xhtml \
+            dbopmakeviewport3d.xhtml \
             dbopmap.xhtml \
             dbopmapbang.xhtml \
             dbopmatrix.xhtml \
@@ -658,6 +664,7 @@ PAGES=rootpage.xhtml \
             dbopsubmatrix.xhtml \
             dbopsubmatrix.xhtml \
             dbopsubmod.xhtml \
+            dbopsurface.xhtml \
             dbopsumofkthpowerdivisors.xhtml \
             dboptan.xhtml \
             dboptanh.xhtml \
@@ -779,8 +786,25 @@ PAGES=rootpage.xhtml \
             linconversion.xhtml \
           graphicspage.xhtml \
             graphexamples.xhtml \
+              graphexamplesassorted.xhtml \
+              graphexamplesthreed.xhtml \
+              graphexamplesonevariable.xhtml \
+              graphexamplesparametric.xhtml \
+              graphexamplespolar.xhtml \
+              graphexamplesimplicit.xhtml \
+              graphexampleslistofpoints.xhtml \
             graph2d.xhtml \
+              graph2dimplicit.xhtml \
+              graph2dlistsofpoints.xhtml \
+              graph2donevariable.xhtml \
+              graph2dparametric.xhtml \
+              graph2dpolar.xhtml \
             graph3d.xhtml \
+              graph3dobjects.xhtml \
+              graph3dparametric.xhtml \
+              graph3dsurfaces.xhtml \
+              graph3dtubeplots.xhtml \
+              graph3dtwovariables.xhtml \
             graphviewports.xhtml \
           algebrapage.xhtml \
             algnumbertheory.xhtml \
@@ -8453,6 +8477,16 @@ dbopchebyshevu not implemented
 <<page foot>>
 @
 
+\subsection{dbopconvert.xhtml}
+<<dbopconvert.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopconvert not implemented
+<<page foot>>
+@
+
 \subsection{dbopcopy.xhtml}
 <<dbopcopy.xhtml>>=
 <<standard head>>
@@ -8523,6 +8557,15 @@ dbopchebyshevu not implemented
 <<page foot>>
 @
 
+\subsection{dbopcreate3space.xhtml}
+<<dbopcreate3space.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopcreate3space not implemented
+<<page foot>>
+@
 \subsection{dbopcsc.xhtml}
 <<dbopcsc.xhtml>>=
 <<standard head>>
@@ -8543,6 +8586,15 @@ dbopchebyshevu not implemented
 <<page foot>>
 @
 
+\subsection{dbopcurve.xhtml}
+<<dbopcurve.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopcurve not implemented
+<<page foot>>
+@
 \subsection{dbopcycleragits.xhtml}
 <<dbopcycleragits.xhtml>>=
 <<standard head>>
@@ -9135,6 +9187,35 @@ dboplaguerrel not implemented
 <<page foot>>
 @
 
+\subsection{dbopmakegraphimage.xhtml}
+<<dbopmakegraphimage.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopmakegraphimage not implemented
+<<page foot>>
+@
+
+\subsection{dbopmakeobject.xhtml}
+<<dbopmakeobject.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopmakeobject not implemented
+<<page foot>>
+@
+
+\subsection{dbopmakeviewport3d.xhtml}
+<<dbopmakeviewport3d.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopmakeviewport3d not implemented
+<<page foot>>
+@
 \subsection{dbopmap.xhtml}
 <<dbopmap.xhtml>>=
 <<standard head>>
@@ -10065,6 +10146,15 @@ dbopround not implemented
 <<page foot>>
 @
 
+\subsection{dbopsurface.xhtml}
+<<dbopsurface.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopsurface not implemented
+<<page foot>>
+@
 \subsection{dbopsumofkthpowerdivisors.xhtml}
 <<dbopsumofkthpowerdivisors.xhtml>>=
 <<standard head>>
@@ -34751,7 +34841,486 @@ rule not built into the system you can use Axiom's
  </head>
  <body>
 <<page head>>
-      graphexamples not implemented
+  <div align="center">Graphics Examples</div>
+  <hr/>
+Here are some examples of Axiom graphics.
+<ul>
+ <li> <a href="graphexamplesassorted.xhtml">Assorted Examples</a><br/>
+   Examples of each type of Axiom Graphics
+ </li>
+ <li> <a href="graphexamplesthreed.xhtml">Three Dimensional Graphics</a><br/>
+   Plot parametrically defined surfaces of three functions.
+ </li>
+ <li> <a href="graphexamplesonevariable.xhtml">
+   Functions of One Variable</a><br/>
+   Plot curves defined by an equation y=f(x)
+ </li>
+ <li> <a href="graphexamplesparametric.xhtml">Parametric Curves</a><br/>
+   Plot curves defined by parametric equations x=f(t), y=f(t)
+ </li>
+ <li> <a href="graphexamplespolar.xhtml">Polar Coordinates</a><br/>
+   Plot curves given in polar form by an equation r=f(&#x003B8;)
+ </li>
+ <li> <a href="graphexamplesimplicit.xhtml">Implicit Curves</a><br/>
+   Plot non-singular curves defined by a polynomial equation
+ </li>
+ <li> <a href="graphexampleslistofpoints.xhtml">Lists of Points</a><br/>
+   Plot lists of points in the (x,y)-plane
+ </li> 
+</ul>
+<<page foot>>
+@
+
+\subsection{graphexamplesassorted.xhtml}
+<<graphexamplesassorted.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Assorted Graphics Examples</div>
+  <hr/>
+Function of two variables: z=f(x,y)
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(sin(x*y),x=-2.5..2.5,y=-2.5..2.5)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Function of one variable: y=f(x)
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="draw(sin tan x - tan sin x,x=0..6)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Plane parametric curve: x=f(t),y=g(t)
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="draw(curve(sin(t)*sin(2*t),sin(3*t)*sin(4*t)),t=0..2*%pi)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Space parametric curve: x=f(t),y=g(t),z=h(t)
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="draw(curve(sin(t)*sin(2*t),sin(3*t)*sin(4*t),sin(5*t)*sin(6*t)),t=0..2*%pi)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Polar coordinates: r=f(&#x003B8;)
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="makeRequest('p5');"
+    value="draw(sin(17*t),t=0..2*%pi,coordinates==polar)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Implicit curves: p(x,y)=0
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="makeRequest('p6');"
+    value="draw(y^2+y=x^3-x,x,y,range==[-2..2,-2..1])" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+
+\subsection{graphexamplesimplicit.xhtml}
+<<graphexamplesimplicit.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Implicit Curves</div>
+  <hr/>
+A Conic Section (Hyperbola)
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(x*y=1,x,y,range==[-3..3,-3..3])" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+An Elliptic Curve
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="draw(y^2+y=x^3-x,x,y,range==[-2..2,-2..1])" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Cartesian Ovals
+<ul>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="p:=((x^2+y^2+1)-8*x)^2-(8*(x^2+y^2+1)-4*x-1)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p3','p4']);"
+    value='draw(p=0,x,y,range==[-1..11,-7..7],title=="Cartesian Ovals")' />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Cassinian Ovals: two loops
+<ul>
+ <li>
+  <input type="submit" id="p5" class="noresult" 
+    onclick="makeRequest('p5');"
+    value="q:=(x^2+y^2+7^2)^2-(6^4+4*7^2*x^2)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p5','p6']);"
+    value='draw(q=0,x,y,range==[-10..10,-4..4],title=="Cassinian Oval")' />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+
+\subsection{graphexampleslistofpoints.xhtml}
+<<graphexampleslistofpoints.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Plotting Lists of Points</div>
+  <hr/>
+<ul>
+ <li>
+  <input type="submit" id="p1" class="noresult" 
+    onclick="makeRequest('p1');"
+    value="p:=map(point,[[1.,1.],[0.,1.],[0.,0.],[1.,0.],[1.,.5],[.5,0.],[0.,.5],[.5,1.],[.25,.25],[.25,.75],[.75,.75],[.75,.25]])" />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="noresult" 
+    onclick="makeRequest('p2');"
+    value="llp:=[[p.1,p.2],[p.2,p.3],[p.3,p.4],[p.4,p.1],[p.5,p.6],[p.6,p.7],[p.7,p.8],[p.8,p.5],[p.9,p.10],[p.10,p.11],[p.11,p.12],[p.12,p.9]]" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="lsize:=[6,6,6,6,8,8,8,8,10,10,10,10]" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="noresult" 
+    onclick="makeRequest('p4');"
+    value="pc1:=pastel red()" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="noresult" 
+    onclick="makeRequest('p5');"
+    value="pc2:=dim green()" />
+  <div id="ansp5"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p6" class="noresult" 
+    onclick="makeRequest('p6');"
+    value="pc3:=pastel yellow()" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="noresult" 
+    onclick="makeRequest('p7');"
+    value="lpc:=[pc1,pc1,pc1,pc1,pc2,pc2,pc2,pc2,pc3,pc3,pc3,pc3]" />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="noresult" 
+    onclick="makeRequest('p8');"
+    value="lc:=[pastel blue(), light yellow(), dim green(), bright red(), light green(), dim yellow(), bright blue(), dark red(), pastel red(), light blue(), dim green(), light yellow()]" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="noresult" 
+    onclick="makeRequest('p9');"
+    value="g:=makeGraphImage(llp,lpc,lc,lsize)$GRIMAGE" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10']);"
+    value='makeViewport2D(g,[title("Lines")])$VIEW2D' />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+The <a href="dbopmakeviewport2d.xhtml">makeViewport2D</a> command takes a
+list of options as a parameter in this example. The string "Lines" is
+designated as the viewport's title.
+<<page foot>>
+@
+
+
+\subsection{graphexamplesonevariable.xhtml}
+<<graphexamplesonevariable.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Functions of One Variable</div>
+  <hr/>
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(sin tan x - tan sin x, x=0..6)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="draw(sin x + cos x, x=0..2*%pi)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="draw(sin(1/x),x=-1..1)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="draw(x*sin(1/x),x=-1..1)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+
+\subsection{graphexamplesparametric.xhtml}
+<<graphexamplesparametric.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Parametric Curves</div>
+  <hr/>
+The Lemnicate of Bernoulli
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(curve(cos(t/(1+sin(t)^2)),sin(t)*cos(t)/(1+sin(t)^2)),t=-%pi..%pi)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Lissajous curve
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="draw(curve(9*sin(3*t/4),8*sin(t)),t=-4*%pi..4*%pi)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+A gnarly closed curve
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="draw(curve(sin(t)*sin(2*t)*sin(3*t),sin(4*t)*sin(5*t)*sin(6*t)),t=0..2*%pi)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Another closed curve
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="draw(curve(cos(4*t)*cos(7*t),cos(4*t)*sin(7*t)),t=0..2*%pi)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+
+\subsection{graphexamplespolar.xhtml}
+<<graphexamplespolar.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Polar Coordinates</div>
+  <hr/>
+A circle
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(1,t=0..2*%pi,coordinates==polar)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+A spiral
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="draw(t,t=0..100,coordinates==polar)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+A Petal Curve
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="draw(sin(4*t),t=0..2*%pi,coordinates==polar)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+A Limacon
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="draw(2+3*sin(t),t=0..2*%pi,coordinates==polar)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{graphexamplesthreed.xhtml}
+<<graphexamplesthreed.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Three Dimensional Graphics</div>
+  <hr/>
+Plots of parametric surfaces defined by functions f(u,v), g(u,v) and h(u,v).
+
+Pear Surface
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value='draw(surface((1+exp(-100*u*u))*sin(%pi*u)*sin(%pi*v),(1+exp(-100*u*u))*sin(%pi*u)*cos(%pi*v),(1+exp(-100*u*u))*cos(%pi*u)),u=0..1,v=0..2,title=="Pear")' />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+
+Trigonometric Screw
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value='draw(surface(x*cos(y),x*sin(y),y*cos(x)),x=-4..4,y=0..2*%pi,var1Steps==40,var2Steps==40,title=="Trigonometric Screw")' />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+
+Etruscan Venus
+<ul>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="a:=1.3*cos(2*x)*cos(y)+sin(y)*cos(x)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="noresult" 
+    onclick="makeRequest('p4');"
+    value="b:=1.3*sin(2*x)*cos(y)-sin(y)*sin(x)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="noresult" 
+    onclick="makeRequest('p5');"
+    value="c:=2.5*cos(y)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p3','p4','p5','p6']);"
+    value='draw(surface(a,b,c),x=0..%pi,y=-%pi..%pi,var1Steps==40,var2Steps==40,title=="Etruscan Venus")' />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+
+Banchoff Klein Bottle
+<ul>
+ <li>
+  <input type="submit" id="p7" class="noresult" 
+    onclick="makeRequest('p7');"
+    value="f:=cos(x)*(cos(x/2)*(sqrt(2)+cos(y))+(sin(x/2)*sin(y)*cos(y)))" />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="noresult" 
+    onclick="makeRequest('p8');"
+    value="g:=sin(x)*(cos(x/2)*(sqrt(2)+cos(y))+(sin(x/2)*sin(y)*cos(y)))" />
+  <div id="ansp8"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p9" class="noresult" 
+    onclick="makeRequest('p9');"
+    value="h:=-sin(x/2)*(sqrt(2)+cos(y))+cos(x/2)*sin(y)*cos(y)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p7','p8','p9','p10']);"
+    value='draw(surface(f,g,h),x=0..4*%pi,y=0..2*%pi,var1Steps==50,var2Steps==50,title=="Banchoff Klein Bottle")' />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+
 <<page foot>>
 @
 
@@ -34813,20 +35382,887 @@ lists of points in the plane.
 \subsection{graph2d.xhtml}
 <<graph2d.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Two Dimensional Graphics</div>
+  <hr/>
+<ul>
+ <li> <a href="graph2donevariable.xhtml">Functions of One Variable</a><br/>
+      Plot curves defined by an equation y=f(x)
+ </li>
+ <li> <a href="graph2dparametric.xhtml">Parametric Curves</a><br/>
+      Plot curves defined by parametric equations x=f(t), y=g(t)
+ </li>
+ <li> <a href="graph2dpolar.xhtml">Polar Coordinates</a><br/>
+      Plot curves given in polar form by an equation r=f(&#x003B8;)
+ </li>
+ <li> <a href="graph2dimplicit.xhtml">Implicit Curves</a><br/>
+      Plot non-singulare curves defined by a polynomial equation
+ </li>
+ <li> <a href="graph2dlistsofpoints.xhtml">List of Points</a><br/>
+      Plot lists of points in the (x,y)-plane
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{graph2dimplicit.xhtml}
+<<graph2dimplicit.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Implicit Curves</div>
+  <hr/>
+Axiom has facilities for graphing a non-singular algebraic curve in a
+rectangular region of the plane. An algebraic curve is a curve defined by
+a polynomial equation p(x,y)=0. Non-singular means that the curve is
+"smooth" in that it does not cross itself or come to a point (cusp). 
+Algebraically, this means that for any point (a,b) on the curve (i.e.
+a point such that p(a,b)=0), the partial derivatives dp/dx(a,b) and
+dp/dy(a,b) are not both zero. We require that the polynomial have rational
+or integral coefficients. Here is a Cartesian ovals algebraic curve 
+example: 
+<ul>
+ <li>
+  <input type="submit" id="p1" class="noresult" 
+    onclick="makeRequest('p1');"
+    value="p:=((x^2+y^2+1)-8*x)^2-(8*(x^2+y^2+1)-4*x-1)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value='draw(p=0,x,y,range==[-1..11,-7..7],title=="Cartesian Ovals")' />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+A range must be declared for each variable specified in the algebraic
+curve equation.
+<<page foot>>
+@
+
+\subsection{graph2dlistsofpoints.xhtml}
+<<graph2dlistsofpoints.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">List of Points</div>
+  <hr/>
+Axiom has the ability to create lists of points in a two dimensional 
+graphics viewport. This is done by utilizing the 
+<a href="db.xhtml?GraphImage">GraphImage</a> and
+<a href="db.xhtml?TwoDimensionalViewport">TwoDimensionalViewport</a>
+domain facilities.
+
+In this example, the <a href="dbopmakegraphimage.xhtml">makeGraphImage</a>
+takes a list of lists of points parameter, a list of colors for each point
+in the graph, a list of colors for each line in the graph, and a list of
+numbers which indicate the size of each point in the graph. The following
+lines create list of lists of points which can be read be made into two
+dimensional graph images.
+
+First we make a list of points
+<ul>
+ <li>
+  <input type="submit" id="p1" class="noresult" 
+    onclick="makeRequest('p1');"
+    value="p:=map(point,[[1.,1.],[0.,1.],[0.,0.],[1.,0.],[1.,.5],[.5,0.],[0.,.5],[.5,1.],[.25,.25],[.25,.75],[.75,.75],[.75,.25]])" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Then we select pairs of these points which represent the endpoints of lines.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="noresult" 
+    onclick="makeRequest('p2');"
+    value="llp:=[[p.1,p.2],[p.2,p.3],[p.3,p.4],[p.4,p.1],[p.5,p.6],[p.6,p.7],[p.7,p.8],[p.8,p.5],[p.9,p.10],[p.10,p.11],[p.11,p.12],[p.12,p.9]]" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Next we set the point color and size, and the line color for all components
+of the graph.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="lsize:=[6,6,6,6,8,8,8,8,10,10,10,10]" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="noresult" 
+    onclick="makeRequest('p4');"
+    value="pc1:=pastel red()" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="noresult" 
+    onclick="makeRequest('p5');"
+    value="pc2:=dim green()" />
+  <div id="ansp5"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p6" class="noresult" 
+    onclick="makeRequest('p6');"
+    value="pc3:=pastel yellow()" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="noresult" 
+    onclick="makeRequest('p7');"
+    value="lpc:=[pc1,pc1,pc1,pc1,pc2,pc2,pc2,pc2,pc3,pc3,pc3,pc3]" />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="noresult" 
+    onclick="makeRequest('p8');"
+    value="lc:=[pastel blue(), light yellow(), dim green(), bright red(), light green(), dim yellow(), bright blue(), dark red(), pastel red(), light blue(), dim green(), light yellow()]" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+Now the graph image is created and named according to the component
+specifications indicated above. The 
+<a href="dbopmakeviewport2d.xhtml">makeViewport2D</a> command then
+creates a two dimensional viewport for this graph according to the list
+of options specified within the brackets.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="noresult" 
+    onclick="makeRequest('p9');"
+    value="g:=makeGraphImage(llp,lpc,lc,lsize)$GRIMAGE" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+The <a href="dbopmakeviewport2d.xhtml">makeViewport2D</a> command takes a
+list of options as a parameter. In this example the string "Lines" is 
+designated as the viewport's title.
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p9','p10']);"
+    value='makeViewport2D(g,[title("Lines")])$VIEW2D' />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{graph2donevariable.xhtml}
+<<graph2donevariable.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Functions of One Variable</div>
+  <hr/>
+Here we wish to plot a function y=f(x) on the interval [a,b]. As an 
+example, let's take the function y=sin(tan(x))-tan(sin(x)) on the interval
+[0,6]. Here is the simplest command that will do this:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(sin(tan(x))-tan(sin(x)),x=0..6)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Notice that Axiom compiled a function before the graph was put on the 
+screen. The expression sin(tan(x))-tan(sin(x)) was converted to a compiled
+function so that its value for various values of x could be computed 
+quickly and efficiently. Let's graph the same function on a different
+interval and this time we'll give the graph a title. The title is a string,
+which is an optional argument of the command 'draw'.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+ value='draw(sin(tan(x))-tan(sin(x)),x=10..16,title=="y=sin tan x-tan sin x")'
+  />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Once again the expression sin(tan(x))-tan(sin(x)) was converted to a 
+compiled function before any points were computed. If you want to graph the
+same function on a number of intervals, it's a good idea to write down a
+function definition so that the function only has to be compiled once. 
+Here's an example:
+<ul>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="f(x)==(x-1)*(x-2)*(x-3)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p3','p4']);"
+    value='draw(f,0..2,title=="y=f(x) on [0,2]")' />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p3','p5']);"
+    value='draw(f,0..4,title=="y=f(x) on [0,4]")' />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Notice that our titles can be whatever we want, as long as they are
+encloded by double quotes. However, a title which is too long to fit
+within the viewport title window will be clipped.
+<<page foot>>
+@
+
+\subsection{graph2dparametric.xhtml}
+<<graph2dparametric.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      graph2d not implemented
+  <div align="center">Parametric Curves</div>
+  <hr/>
+One way of producing interesting curves is by using parametric equations.
+Let x=f(t) and y=g(t) for two functions f and g as the parameter t ranges
+over an interval [a,b]. Here's an example:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(curve(sin(t)*sin(2*t)*sin(3*t),sin(4*t)*sin(5*t)*sin(6*t)),t=0..2*%pi)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Here 0..2*%pi represents the interval over which the variable t ranges.
+In the case of parametric curves, Axiom will compile two functions, one for
+each of the functions f and g. You may also put a title on a graph. The
+title may be an arbitrary string and is an optional argument to the
+command 'draw'. For example:
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value='draw(curve(cos(t),sin(t)),t=0..2*%pi,title=="The Unit Circle")' />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+If you plan on plotting x=f(t), y=g(t) as t ranges over several intervals,
+you may want to define functions f and g, so that they need not be
+recompiled every time you create a new graph. Here's an example:
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="makeRequest('p3');"
+    value="f(t:SF):SF == sin(3*t/4)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="makeRequest('p4');"
+    value="g(t:SF):SF == sin(t)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p3','p4','p5']);"
+    value="draw(curve(f,g),0..%pi)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p3','p4','p6']);"
+    value="draw(curve(f,g),-%pi..2*%pi)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p3','p4','p7']);"
+    value="draw(curve(f,g),-4*%pi..4*%pi)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+These examples show how the curve changes as the range of the parameter
+t varies.
+<<page foot>>
+@
+
+\subsection{graph2dpolar.xhtml}
+<<graph2dpolar.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Polar Coordinates</div>
+  <hr/>
+Graphs in polar coordinates are given by an equation r=f(&#x003B8;) as
+theta ranges over an interval. This is equivalent to the parametric curve
+x=f(&#x003B8;)*cos(&#x003B8;),y=f(&#x003B8;)*sin(&#x003B8;) as &#x003B8;
+ranges over the same interval. You may create such curves using the
+command 'draw', with the optional argument 'coordinates==polar'. 
+Here are some examples:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value='draw(1,t=0..2*%pi,coordinates==polar,title=="The Unit Circle")' />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+  value='draw(sin(17*t),t=0..2*%pi,coordinates==polar,title=="A Petal Curve")'
+   />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+You may also define your own functions, when you plan on plotting the same
+curve as &#x003B8; varies over several intervals.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="f(t)==cos(4*t/7)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p3','p4']);"
+    value="draw(f,0..2*%pi,coordinates==polar)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p3','p5']);"
+    value="draw(f,0..14*%pi,coordinates==polar)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+For information on plotting graphs in other coordinate systems see the
+pages for the <a href="db.xhtml?CoordinateSystems">CoordinateSystems</a>
+domain.
 <<page foot>>
 @
 
+
 \subsection{graph3d.xhtml}
 <<graph3d.xhtml>>=
 <<standard head>>
  </head>
  <body>
 <<page head>>
-      graph3d not implemented
+  <div align="center">Three Dimensional Graphing</div>
+  <hr/>
+<ul>
+ <li> <a href="graph3dtwovariables.xhtml">Functions of Two Variables</a><br/>
+      Plot surfaces defined by an equation z=f(x,y)
+ </li>
+ <li> <a href="graph3dparametric.xhtml">Parametric Curves</a><br/>
+      Plot curves defined by equations x=f(t), y=g(t), z=h(t)
+ </li>
+ <li> <a href="graph3dtubeplots.xhtml">Parametric Tube Plots</a><br/>
+      Plot a tube around a parametric space curve
+ </li>
+ <li> <a href="graph3dsurfaces.xhtml">Parametric Surfaces</a><br/>
+      Plot surfaces defined by x=f(u,v), y=g(u,v), z=h(u,v)
+ </li>
+ <li> <a href="graph3dobjects.xhtml">Building Objects</a><br/>
+      Create objects constructed from geometric primitives
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{graph3dobjects.xhtml}
+<<graph3dobjects.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Building Three Dimensional Objects from Primatives</div>
+  <hr/>
+Rather than using the <a href="dbopdraw.xhtml">draw</a> and
+<a href="dbopmakeobject.xhtml">makeObject</a> commands, you can create
+three-dimensional graphs from primitives. Operation 
+<a href="dbopcreate3space.xhtml">create3Space</a> creates a three-space
+object to which points, curves, and polygons can be added using the
+operations from the <a href="db.xhtml?ThreeSpace">ThreeSpace</a> domain.
+The resulting object can then be displayed in a viewport using
+<a href="dbopmakeviewport3d.xhtml">makeViewport3D</a>.
+
+Create the empty three-space object space.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="space:=create3Space()$(ThreeSpace DFLOAT)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Objects can be sent to this space using the operations exported by the
+<a href="db.xhtml?ThreeSpace">ThreeSpace</a> domain. The following examples
+place curves into space.
+
+Add these three curves to the space.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="closedCurve(space,[ [0,30,20],[0,30,30],[0,40,30],[0,40,100],[0,30,100],[0,30,110],[0,60,110],[0,60,100],[0,50,100],[0,50,30],[0,60,30],[0,60,20]])" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p3']);"
+    value="closedCurve(space,[ [80,0,30],[80,0,100],[70,0,110],[40,0,110],[30,0,100],[30,0,90],[40,0,90],[40,0,95],[45,0,100],[65,0,100],[70,0,95],[70,0,35]])" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p4']);"
+    value="closedCurve(space,[ [70,0,35],[65,0,30],[45,0,30],[40,0,35],[40,0,60],[50,0,60],[50,0,70],[30,0,70],[30,0,30],[40,0,20],[70,0,20],[80,0,30]])" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Create and display the viewport using 
+<a href="dbopmakeviewport3d.xhtml">makeViewport3D</a>. Options may also be
+given but here are displayed as a list with values enclosed in parentheses.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5']);"
+    value='makeViewport3D(space,title=="Letters")' />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+<br/>
+<br/>
+Cube Example
+<br/>
+As a second example of the use of primitives, we generate a cube using
+a polygon mesh. It is important to use a consistent orientation of the
+polygons for correct generation of three-dimensional objects.
+
+Again start with an empty three-space object.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="makeRequest('p6');"
+    value="spaceC:=create3Space()$(ThreeSpace DFLOAT)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+For convenience, give the <a href="db.xhtml?DoubleFloat">DoubleFloat</a>
+values +1 and -1 names.
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="makeRequest('p7');"
+    value="x:DFLOAT:=1" />
+  <div id="ansp7"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="makeRequest('p8');"
+    value="y:DFLOAT:=-1" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+Define the vertices of the cube.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p7','p8','p9']);"
+    value="a:=point [x,x,y,1::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p7','p8','p10']);"
+    value="b:=point [y,x,y,4::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="handleFree(['p7','p8','p11']);"
+    value="c:=point [y,x,x,8::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp11"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p7','p8','p12']);"
+    value="d:=point [x,x,x,12::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp12"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="handleFree(['p7','p8','p13']);"
+    value="e:=point [x,y,y,16::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp13"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="handleFree(['p7','p8','p14']);"
+    value="f:=point [y,y,y,20::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="handleFree(['p7','p8','p15']);"
+    value="g:=point [y,y,x,24::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="handleFree(['p7','p8','p16']);"
+    value="h:=point [x,y,x,27::DFLOAT]$(Point DFLOAT)" />
+  <div id="ansp16"><div></div></div>
+ </li>
+</ul>
+Add the faces of the cube as polygons to the space using a consistent
+orientation.
+<ul>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="handleFree(['p6','p7','p8','p9','p10','p11','p12','p13','p14','p15','p16','p17']);"
+    value="polygon(spaceC,[d,c,g,h]); polygon(spaceC,[d,h,e,a]); polygon(spaceC,[c,d,a,b]); polygon(spaceC,[g,c,b,f]); polygon(spaceC,[h,g,f,e]); polygon(spaceC,[e,f,b,a])" />
+  <div id="ansp17"><div></div></div>
+ </li>
+</ul>
+Create and display the viewport.
+<ul>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="handleFree(['p6','p7','p8','p9','p10','p11','p12','p13','p14','p15','p16','p17','p18']);"
+    value='makeViewport3D(spaceC,title=="Cube")' />
+  <div id="ansp18"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{graph3dparametric.xhtml}
+<<graph3dparametric.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Parametric Space Curves</div>
+  <hr/>
+This page describes the plotting in three dimensional space of a curve
+defined by the parametric equations x=f(t), y=g(t), z=h(t), where f,g, and
+h are functions of the parameter t which ranges over a specified interval.
+The basic draw command for this function utilizes either the uncompiled
+functions or compiled functions format and uses the 
+<a href="dbopcurve.xhtml">curve</a> command to specify the three
+functions for the x, y, and z components of the curve. The general format
+for uncompiled functions is:
+<pre>
+   draw(curve(f(t),g(t),h(t)), t=a..b)
+</pre>
+where a..b is the segment defining the interval [a,b] over which the
+parameter t ranges. In this case the functions are not compiled until
+the draw command is executed. Here is an example:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(curve(cos(t),sin(t),t),t=-12..12)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+In the case of compiled functions, the functions are named and compiled
+independently. This is useful if you intend to use the functions often,
+or if the functions are long and complex. The following lines show 
+functions whose parameters are of the type SmallFloat. The functions
+are compiled and stored by Axiom when entered.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="noresult" 
+    onclick="makeRequest('p2');"
+    value="i1(t:SF):SF==sin(t)*cos(3*t/5)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="i2(t:SF):SF==cos(t)*cos(3*t/5)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="noresult" 
+    onclick="makeRequest('p4');"
+    value="i3(t:SF):SF==cos(t)*sin(3*t/5)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Once the functions are compiled the draw command only needs the names of
+the functions to execute. Here is a compiled functions example:
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p2','p3','p4','p5']);"
+    value="draw(curve(i1,i2,i3),0..15*%pi)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Note that the parameter range does not take the variable name as in the
+case of uncompiled functions. It is understood that the indicated range
+applies to the parameter of the functions, which in this case is t.
+<<page foot>>
+@
+
+\subsection{graph3dsurfaces.xhtml}
+<<graph3dsurfaces.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Parametric Surfaces</div>
+  <hr/>
+Graphing a surface defined by x=f(u,v), y=g(u,v), z=h(u,v). This page
+describes plotting of surfaces defined by the parametric equations of two
+variables, x=f(u,v), y=g(u,v), and z=h(u,v), for which the ranges of u and
+v are explicitly defined. The basic draw command for this function utilizes
+either the uncompiled function or compiled function format and uses the
+<a href="dbopsurface.xhtml">surface</a> command to specify the three 
+functions for the x, y, and z components of the surface. The general 
+format for uncompiled functions is:
+<pre>
+    draw(surface(f(u,v),g(u,v),h(u,v)), u=a..b, v=c..d)
+</pre>
+where a..b and c..d are segments defining the intervals [a,b] and [c,d]
+over which the parameters u and v span. In this case the functions are 
+not compiled until the draw command is executed. Here is an example of a
+surface plotted using the parabolic cylindrical coordinate system option:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(surface(u*cos(v),u*sin(v),v*cos(u)),u=-4..4,v=0..2*%pi,coordinates==parabolicCylindrical)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+In the case of compiled functions, the functions are named and compiled
+independentlyh. This is useful if you intend to use the functions often,
+or if the functions are long and complex. The following lines show functions
+whose parameters are of the type SmallFloat. The functions are compiled and
+stored by Axiom when entered.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="noresult" 
+    onclick="makeRequest('p2');"
+    value="n1(u:SF,v:SF):SF == u*cos(v)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="n2(u:SF,v:SF):SF == u*sin(v)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="noresult" 
+    onclick="makeRequest('p4');"
+    value="n3(u:SF,v:SF):SF == u" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Once the function is compiled the draw command only needs the names of
+the functions to execute. Here is a compiled functions example plotted
+using the toroidal coordinate system option:
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p2','p3','p4','p5']);"
+    value="draw(surface(n1,n2,n3),1.0..4.0,1.0..4*%pi,coordinates==toroidal(1$SF))" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Note that the parameter ranges do not take the variable names as in the case
+of uncompiled functions. The variables are entered in the order in which 
+they are defined in the function specification. In this case the first
+range specifies the u-variable and the second range specifies the v-variable.
+<<page foot>>
+@
+
+\subsection{graph3dtubeplots.xhtml}
+<<graph3dtubeplots.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Parametric Tube Plots</div>
+  <hr/>
+This page describes the plotting in three dimensional space of a tube
+around a parametric space curve defined by the parametric equations
+x=f(t), y=g(t), z=h(t), where f, g, and h are functions of the parameter t
+which ranges over a specified interval. The basic draw command for this
+function utilizes either the uncompiled functions or compiled functions
+format and uses the <a href="dbopcurve.xhtml">curve</a> command to specify
+the three functions for the x, y, and z components of the curve. This uses
+the same format as that for space curves except that it requires a
+specification for the radius of the tube. If the radius of the tube is 0,
+then the result is the space curve itself. The general format for 
+uncompiled functions is:
+<pre>
+    draw(curve(f(t),g(t),h(t)),t=a..b,tubeRadius==r)
+</pre>
+where a..b is the segment defining the interval [a,b] over which the
+parameter t ranges, and the tubeRadius is indicated by the variable r. 
+In this case the functions are not compiled until the draw command is
+executed. Here is an example:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(curve(sin(t)*cos(3*t/5),cos(t)*cos(3*t/5),cos(t)*sin(3*t/5)),t=0..15*%pi,tubeRadius==.15)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+In the case of compiled functions, the functions are named and compiled
+independently. This is useful if you intend to use the functions often,
+or if the functions are long and complex. The following lines show 
+functions whose parameters are of the type SmallFloat. The functions are
+compiled and stored by Axiom when entered.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="noresult" 
+    onclick="makeRequest('p2');"
+    value="t1(t:SF):SF==4/(2-sin(3*t))*cos(2*t)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="t2(t:SF):SF==4/(2-sin(3*t))*sin(2*t)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="noresult" 
+    onclick="makeRequest('p4');"
+    value="t3(t:SF):SF==4/(2-sin(3*t))*cos(3*t)" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+Once the function is compiled the draw command only needs the names of
+the functions to execute. Here is a compiled functions example of a trefoil
+knot:
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p2','p3','p4','p5']);"
+    value="draw(curve(t1,t2,t3),0..2*%pi,tubeRadius==.2)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Note that the parameter range does not take the variable name as in the
+case of uncompiled functions. It is understood that the indicated range
+applies to the parameter of the functions, which in this case is t. 
+Typically, the radius of the tube should be set between 0 and 1. A radius
+of less than 0 results in it's positive counterpart and a radius of greater
+than one cause self-intersection.
+<<page foot>>
+@
+
+\subsection{graph3dtwovariables.xhtml}
+<<graph3dtwovariables.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Functions of Two Variables</div>
+  <hr/>
+This page describes the plotting of surfaces defined by an equation of
+two variables, z=f(x,y), for which the ranges of x and y are explicitly
+defined. The basic draw command for this function utilizes either the
+uncompiled function or compiled function format. The general format for an
+uncompiled function is:
+<pre>
+   draw(f(x,y), x=a..b, y=c..d)
+</pre>
+where a..b and c..d are segments defining the intervals [a,b] and [c,d]
+over which the variables x and y span. In this case, the function is not
+compiled until the draw command is executed. Here is an example:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="draw(cos(x*y),x=-3..3,y=-3..3)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+In the case of a compiled function, the function is named and compiled
+independently. This is useful if you intend to use a function often, or
+if the function is long and complex. The following line shows a function
+whose parameters are of the type SmallFloat. The function is compiled and
+stored by Axiom when it is entered.
+<ul>
+ <li>
+  <input type="submit" id="p2" class="noresult" 
+    onclick="makeRequest('p2');"
+    value="f(x:SF,y:SF):SF==sin(x)*cos(y)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Once the function is compiled the draw command only needs the name of the
+function to execute. Here is a compiled function example:
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p2','p3']);"
+    value="draw(f,-%pi..%pi,-%pi..%pi)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Note that the parameter ranges do not take the variable names as in the
+case of uncompiled functions. The variables are entered in the order in
+which they are defined in the function specificationl. In this case the
+first range specifies the x-variable and the second range specifies the
+y-variable.
 <<page foot>>
 @
 
@@ -35189,10 +36625,171 @@ infinity; the step size is any positive integer.
 \subsection{linconversion.xhtml}
 <<linconversion.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      linconversion not implemented
+  <div align="center">Conversion</div>
+  <hr/>
+Conversion is the process of changing an object of one type into an
+object of another type. The syntax for conversion is object::newType.
+<hr/>
+By default, 3 has the type
+<a href="db.html?PositiveInteger">PositiveInteger</a>
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="3" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+We can change thisinto an object of type 
+<a href="db.html?Fraction(Integer)">Fraction Integer</a> by using "::".
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="makeRequest('p2');"
+    value="3::Fraction Integer" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+A coercion is a special kind of conversion that Axiom is allowed to do
+automatically when you enter an expression. Coercions are usually 
+somewhat safer than more general conversions. The Axiom library contains
+operations called 
+<a href="dbopcoerce.xhtml">coerce</a> and
+<a href="dbopconvert.xhtml">convert</a>. Only the
+<a href="dbopcoerce.xhtml">coerce</a> operations can be used by the
+interpreter to change an object into an object of another type unless
+you explicitly use a "::".
+
+By now you will be quite familiar with what types and modes look like.
+It is useful to think of a type or mode as a pattern for what you want
+the result to be. Let's start with a square matrix of polynomials with
+complex rational number coefficients.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="noresult" 
+    onclick="makeRequest('p3');"
+    value="m:SquareMatrix(2,POLY COMPLEX FRAC INT)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p3','p4']);"
+    value="m:=matrix [ [x-3/4*%i,z*y^2+1/2],[3/7*%i*y^4-x,12-%i*9/5]]" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+We first want to interchange the <a href="db.xthml?Complex">Complex</a>
+and <a href="db.xhtml?Fraction">Fraction</a> layers. We do the conversion
+by doing the interchange in the type expression.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p3','p4','p5']);"
+    value="m1:=m::SquareMatrix(2,POLY FRAC COMPLEX INT)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Interchange the <a href="db.xhtml?Polynomial">Polynomial</a> and the
+<a href="db.xhtml?Fraction">Fraction</a> levels.
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p3','p4','p5','p6']);"
+    value="m2:=m1::SquareMatrix(2,FRAC POLY COMPLEX INT)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+Interchange the <a href="db.xhtml?Polynomial">Polynomial</a> and the
+<a href="db.xhtml?Complex">Complex</a> levels.
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p3','p4','p5','p6','p7']);"
+    value="m3:=m2::SquareMatrix(2,FRAC COMPLEX POLY INT)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+All the entries have changed types, although in comparing the last two
+results only the entry in the lower left corner looks different. We did
+all the intermediate steps to show you what Axiom can do.
+
+In fact, we could have combined all these into one conversion.
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p3','p4','p8']);"
+    value="m::SquareMatrix(2,FRAC COMPLEX POLY INT)" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+
+There are times when Axiom is not able to do the conversion in one step.
+You may need to break up the transformation into several conversions in 
+order to get an object of the desired type.
+
+We cannot move either the <a href="db.xhtml?Fraction">Fraction</a> or
+<a href="db.xhtml?Complex">Complex</a> above (or to the left of,
+depending on how you look at it) 
+<a href="db.xhtml?SquareMatrix">SquareMatrix</a> because each of these
+levels requires that its argument type have commutative multiplication,
+whereas <a href="db.xhtml?SquareMatrix">SquareMatrix</a> does not.
+(<a href="db.xhtml?Fraction">Fraction</a> requires that its argument 
+belong to the category 
+<a href="db.xhtml?IntegralDomain">IntegralDomain</a> and 
+<a href="db.xhtml?Complex">Complex</a> requires that its argument belongs to
+<a href="db.xhtml?CommutativeRing">CommutativeRing</a>. See the
+<a href="axbook/section-2.1.xhtml">Jenks section 2.1</a> for a brief
+discussion of categories. The <a href="db.xhtml?Integer">Integer</a> level
+did not move anywhere because it does not allow any arguments. We also did
+not move the <a href="db.xhtml?SquareMatrix">SquareMatrix</a> part
+anywhere, but we could have. Recall that m looks like this:
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p3','p4','p9']);"
+    value="m" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+If we want a polynomial with matrxi coefficients rather than a matrix with
+polynomial entries, we can just do the conversion.
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p3','p4','p10']);"
+    value="m::POLY SquareMatrix(2,COMPLEX FRAC INT)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+We have not yet used modes for any conversions. Modes are a great 
+shorthand for indicating the type of the object you want. Instead of
+using the long type expression in the last example we could have 
+simply said this:
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="handleFree(['p3','p4','p11']);"
+    value="m::POLY ?" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+We can also indicate more structure if we want the entries of the matrices
+to be fractions.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p3','p4','p12']);"
+    value="m::POLY SquareMatrix(2,FRAC ?)" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
 <<page foot>>
 @
 
\start
Date: 05 Mar 2008 10:49:56 +0100
From: Martin Rubey
To: Bill Page, Ralf Hemmecke
Subject: Re: Lisp

Bill Page writes:

> Personally I really wish that that were true, but all of my experience with
> Axiom over the last few years demonstrates to me that using Axiom is still
> really rather difficult - too difficult for most people. 

I don't think that this is the reason. I believe rather the problem is that
axiom just can't do many things mathematicians want to do.  As a recent
example, the solver seems to be especially week.  How come that Mathematica
spits out the solutions to Rainer Gluege's problem without any tricks, while
axiom cannot do it at all?

> I think Axiom has some very good ideas, some of which have not yet really
> found their way into other more modern languages, but the gap has narrowed
> considerably in the last few years. And now there is a very active computer
> algebra project called Sage doing almost all of the things that would really
> be worth doing in Axiom, in Python instead.

Sage got - in my opinion - two things right: it started by packaging many other
excellent, specialised, programs with it, and it is lead by a charismatic,
skilled person.

Axiom, on the other hand, has the problem that it tried to do everything "in
axiom", which works only if you have some 20 mathematicians and another 20
programmers available.  In fact, it won't even work then.

As you know, I'm quite convinced that Axiom, especially with Aldor, got many
things right.  However, the way it currently is, it is mostly interesting for
people who want to implement well understood stuff.  (Axiom was never very good
for "experimental" programming, although it could be.  The recent bugs that
surfaced in the type inference machine indicate why.  My - currently stalled,
because of the laptop having the files on it - project to clean up Matrices and
Aggregates is done in the hope to make things a little easier)

The two biggest disappointments at the moment are the failure to make Aldor
free or, alternatively, integrate the more important Aldor's features in SPAD,
and, the difficulties encountered when actually trying to use the species
stuff.  Yes, the design (mostly by Ralf) is brilliant. But in axiom I have to
say

    lab: SetSpecies ACINT := set [i::ACINT for i in 1..n]
    all := [structures(lab)$Partition ACINT]$ACList Partition ACINT::List Partition ACINT::List SetSpecies SetSpecies ACINT::List ACList SetSpecies ACINT::List ACList ACList ACINT::List List ACList ACINT::List List List ACINT::List List List INT

to get all set partitions of [1..n] as a list of list of lists. Not that nice.
Note that this conversion is not "difficult", only tedious.  I might put an
effort into preparing a special "axiom" version of the species project, but
currently I'm trying hard to find a job in academia.

\start
Date: Wed, 5 Mar 2008 16:14:03 +0100 (CET)
From: Waldek Hebisch
To: list
Subject: Re: Lisp

Martin Rubey wrote:
> Bill Page writes:
> 
> > Personally I really wish that that were true, but all of my experience with
> > Axiom over the last few years demonstrates to me that using Axiom is still
> > really rather difficult - too difficult for most people. 
> 
> I don't think that this is the reason. I believe rather the problem is that
> axiom just can't do many things mathematicians want to do.  As a recent
> example, the solver seems to be especially week.  How come that Mathematica
> spits out the solutions to Rainer Gluege's problem without any tricks, while
> axiom cannot do it at all?
>

I agree to the general statement: there are many problems that Axiom can
not do -- most beginers will probably give up concluding "Axiom is too hard
to use" and not realize that what they want to do in not doable using Axiom.

However, I do not understand statement about Rainer Gluege's problem: can
Mathematica really solve it?  I admit that what Rainer wrote is not entiriely
clear for me, but my understanding is: Rainer has a bunch of conditions.
Ignoring integrality condition we have solution set of dimension 4.  It
should be possible to use Groebner bases to give explicit equations for
this set.  But then we are left with problem of finding integral points
on an algebraic surface.  I would be surprised if Mathematica really can
solve this problem (that is give correct solutions and prove that there are
no others).

\start
Date: Wed, 5 Mar 2008 11:03:58 -0500
From: Bill Page
To: Waldek Hebisch
Subject: Re: Lisp

> > "Bill Page" writes:
> > > ... but all of my experience with Axiom over the last
> > > few years demonstrates to me that using Axiom is still
> > > really rather difficult - too difficult for most people.
> >
> Martin Rubey wrote:
> > I don't think that this is the reason. I believe rather the
> > problem is that axiom just can't do many things
> > mathematicians want to do.  As a recent example, the
> > solver seems to be especially week.  How come that
> > Mathematica spits out the solutions to Rainer Gluege's
> > problem without any tricks, while axiom cannot do it at
> > all?
>
On 3/5/08, Waldek Hebisch wrote:

> I agree to the general statement: there are many problems
> that Axiom can not do -- most beginers will probably give up
> concluding "Axiom is too hard to use" and not realize that
> what they want to do in not doable using Axiom.
>

I think you need to define more carefully what you mean by "axiom just
can't do many things mathematicians want to do" and "not doable using
Axiom". Axiom is a programmable system and SPAD is a programming
language (that can, if necessary even resort to calling functions
written in Lisp), so in principle Axiom can do anything actually
doable by a computer. True, there are probably many things that
mathematicians want to do that might be included in this category, but
then the same statements would apply (in principle) to any other
computer algebra system. So usually we need to translate such
statements into a language that refers to *how difficult* something
might be to do using Axiom, rather than whether it is "doable" or not.

I think there are several reasons why using Axiom is more difficult.
One is simply that Axiom (in spite of it's age) is still rather
immature. For most of it's life it was "research in progress" and when
it tried to go commercial it failed. So really, as open source Axiom
is still at the research stage. With the development of the Axiom fork
projects things have improved considerably, but as we all know there
is a lot more work to do.

The second thing is that for new and naive users Axiom's strongly
enforced static type system quickly gets in the way. Attempts to solve
this problem in the Axiom interpreter through the mechanisms of
automatic coercion, type inference, and type ducking (domain Any) are
largely failures but experience with systems like Axiom have lead to
the development of other more recent strongly typed systems like
Haskell and Ocaml where the type inference mechanism is much more
powerful and transparent to the user/programmer. And in the meantime
dynamic strongly typed languages (such as Python) have re-gained a
considerable lead in popularity with the new generation of
programmers.

I think that in principle both of these problems could be solved in
Axiom, but I now have some considerable doubt about whether this will
ever happen. There are only very limited volunteer resources available
who can be attracted to this sort of project and for the most part
they are already fully occupied with projects of their own (e.g. Sage
and other projects more closely associated with Sage than Axiom).
Further, I think that it is unlikely that any of the commercial
computer algebra companies or even some active and well-funded
research group will come to Axiom's rescue and supply funds to hire
developer talent. Unfortunately we have not even been able to attract
Google Summer of Code funding in the last two years.

(Yes, it's "Google Summer of Code" time again, but I do not think I
have the energy this time to try to present Axiom as a possible
candidate.)

Still, I am very very glad that you (Waldek) and Gaby and Tim continue
to develop your versions of Axiom along the paths that are of interest
and make most sense to you personally. While these projects are alive,
there is still a chance that somewhere out of the Internet blue, some
new users and developers of Axiom will appear.

\start
Date: Wed, 05 Mar 2008 19:11:58 -0800
From: Ed Borasky
To: list
Subject: Re: Lisp

Tim Daly wrote:
> Either you "get it" or you don't. There is no half-way with Lisp.  
> There are no words to explain what it means to "get it" until you do 
> ... and then there is no reason to explain it; you get it. 

Well ... many years ago I "got" Lisp. I told myself at the time that if 
I had to use one programming language for the rest of my career, it 
would be Lisp. And there were Lisp machines -- was it three vendors, two 
or four?

About four years ago, I got back into Lisp during a workshop on 
algorithmic composition. You know what? A couple of decades with other 
languages, especially Perl and R, convinced me that Lisp, while an 
elegant conceptual framework, was woefully lame as a *practical* 
language. And now there's Ruby.

So I saw the whole elephant. But I don't think I care to ride on it any 
more.

\start
Date: Thu, 6 Mar 2008 00:12:59 -0500
From: Tim Daly
To: Ed Borasky
Subject: Re: Lisp

>> Either you "get it" or you don't. There is no half-way with Lisp.  
>> There are no words to explain what it means to "get it" until you do 
>> ... and then there is no reason to explain it; you get it. 
>
>Well ... many years ago I "got" Lisp. I told myself at the time that if 
>I had to use one programming language for the rest of my career, it 
>would be Lisp. And there were Lisp machines -- was it three vendors, two 
>or four?
>
>About four years ago, I got back into Lisp during a workshop on 
>algorithmic composition. You know what? A couple of decades with other 
>languages, especially Perl and R, convinced me that Lisp, while an 
>elegant conceptual framework, was woefully lame as a *practical* 
>language. And now there's Ruby.
>
>So I saw the whole elephant. But I don't think I care to ride on it any 
>more.

That's fair. There was no claim that lisp is the right language for
any particular purpose. Ruby is fine and Rails is the fastest path
to a website solution. Lisp is ill suited for that purpose and for
many other purposes.


Spad is a conceptually different level of language and is not
syntactic sugar. It is clear that you want a spad-like language to do
mathematics. Lisp is ill-suited for that purpose also.

But boot is syntactic sugar.

The real question is, do you understand why "syntactic sugar" languages
like boot disable the key strength of Lisp? 

\start
Date: Wed, 5 Mar 2008 22:35:24 -0600
From: Tim Daly
To: list
Subject: 20080305.01.tpd.patch (add additional hyperdoc	page translations)

This patch adds additional hyperdoc page translations
==========================================================================
diff --git a/changelog b/changelog
index 6b2c6be..b219341 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080305 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080304 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080303 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080302 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index ec9dbe3..6b600ba 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -681,6 +681,7 @@ PAGES=rootpage.xhtml \
             dbopvertconcat.xhtml \
             dbopwholepart.xhtml \
             dbopwholeragits.xhtml \
+            dbopwrite.xhtml \
             dbopzeroof.xhtml \
             dbopzerosof.xhtml \
             dbopzeroq.xhtml \
@@ -808,7 +809,11 @@ PAGES=rootpage.xhtml \
             graphviewports.xhtml \
           algebrapage.xhtml \
             algnumbertheory.xhtml \
+              algnumbertheorygalois.xhtml \
             alggrouptheory.xhtml \
+              alggrouptheorygroup.xhtml \
+              alggrouptheoryrepa6.xhtml \
+              alggrouptheoryreptheory.xhtml \
           cryptopage.xhtml \
             cryptoclass1.xhtml \
             cryptoclass2.xhtml \
@@ -3661,7 +3666,274 @@ abstract algebra
  </head>
  <body>
 <<page head>>
-      alggrouptheory not implemented
+  <div align="center">Group Theory</div>
+  <hr/>
+Axiom can work with individual permutations, permutation groups and
+do representation theory.
+<ul>
+ <li> <a href="alggrouptheorygroup.xhtml">Info on Group Theory</a></li>
+ <li> <a href="alggrouptheoryreptheory.xhtml">
+      Info on Representation Theory</a></li>
+ <li> <a href="alggrouptheoryrepa6.xhtml">Representations of A6</a><br/>
+      The irreducible representations of the alternating group A6 over
+      fields of characteristic 2.</li>
+</ul>
+<<page foot>>
+@
+
+\subsection{alggrouptheorygroup.xhtml}
+<<alggrouptheorygroup.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Group Theory</div>
+  <hr/>
+A group is a set G together with an associative operation * satisfying
+the axioms of existence of a unit element and an inverse of every
+element of the group. The Axiom category <a href="db.xhtml?Group">Group</a>
+represents this setting. Many data structures in Axiom are groups and
+therefore there is a large variety of examples as fields and polynomials,
+although the main interest there is not a group structure.
+<br/>
+<br/>
+To work with and in groups in a concrete manner some way of representing
+groups has to be chosen. A group can be given as a list of generators and
+as a set of relations. If there are no relations, then we have a free group,
+realized in the domain <a href="db.xhtml?FreeMonoid">FreeMonoid</a> which
+won't be discussed here. We consider permutation groups, where a group is
+realized as a subgroup of the symmetric group of a set, i.e., the group of
+all bijections of a set, the operation being the composition of maps. Indeed,
+every groupo can be realized this way, although this may not be practical.
+<br/>
+<br/>
+Furthermore group elements can be given as invertible matrices. The group
+operation is reflected by matrix multiplication. More precise in 
+representation theory group homomorphisms from a group to general linear 
+groups are constructed. Some algorithms are implemented in Axiom.
+<<page foot>>
+@
+
+\subsection{alggrouptheoryrepa6.xhtml}
+<<alggrouptheoryrepa6.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Representations of A6</div>
+  <hr/>
+In what follows you'll see how to use Axiom to get all the irreducible
+representations of the alternating group A6 over the field with two
+elements (GF 2). First, we generate A6 by a three-cycle: x=(1,2,3) and a
+5-cycle: y=(2,3,4,5,6). Next we have Axiom calculate the permutation
+representation over the integers and over GF 2:
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="genA6:LIST PERM INT:=[cycle [1,2,3],cycle [2,3,4,5,6]]" />
+  <div id="ansp1"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="pRA6:=permutationRepresentation(genA6,6)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Now we apply Parker's 'Meat-Axe' and split it:
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p2','p3']);"
+    value="sp0:=meatAxe(pRA6::(LIST MATRIX PF 2))" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+We have found the trivial module as a quotient module and a 
+5-dimensional sub-module. Try to split again:
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4']);"
+    value="sp1:=meatAxe sp0.1" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+and we find a 4-dimensional sub-module and the trivial one again. Now we
+can test if this representation is absolutely irreducible.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5']);"
+    value="isAbsolutelyIrreducible? sp1.2" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+and we see that this 4-dimensional representation is absolutely irreducible.
+So, we have found a second irreducible representation. Now, we construct a
+representation by reducing an irreducible one of the symmetric group S_6
+over the integers mod 2. We take the one labelled by the partition 
+[2,2,1,1] and restrict it to A6:
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p6']);"
+    value="d2211:=irreducibleRepresentation([2,2,1,1],genA6)" />
+  <div id="ansp6"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p6','p7']);"
+    value="d2211m2:=d2211::(LIST MATRIX PF 2); sp2:=meatAxe d2211m2" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+This gave both a five and a four dimensional representation. Now we take the
+4-dimensional one and we shall see that it is absolutely irreducible:
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p8']);"
+    value="isAbsolutelyIrreducible? sp2.1" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+The two 4-dimensional representations are not equivalent:
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p9']);"
+    value="areEquivalent?(sp1.2,sp2.1)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+So we have found a third irreducible representation. Now we construct a new
+representation using the tensor product and try to split it:
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10']);"
+    value="dA6d16:=tensorProduct(sp1.2,sp2.1); meatAxe dA6d16" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+The representation is irreducible, but it may be not absolutely irreducible.
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p11']);"
+    value="isAbsolutelyIrreducible? dA6d16" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+So let's try the same procedure over the field with 4 elements:
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12']);"
+    value="sp3:=meatAxe(dA6d16::(LIST MATRIX FF(2,2)))" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
+Now we find two 8-dimensional representations, dA6d8a and dA6d8b. Both
+are absolutely irreducible.
+<ul>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p13']);"
+    value="isAbsolutelyIrreducible? sp3.1" />
+  <div id="ansp13"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p14']);"
+    value="isAbsolutelyIrreducible? sp3.2" />
+  <div id="ansp14"><div></div></div>
+ </li>
+</ul>
+and they are not equivalent.
+<ul>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p15']);"
+    value="areEquivalent?(sp3.1,sp3.2)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+</ul>
+So we have found five absolutely irreducible representations of A6 in 
+characteristic 2. General theory now tells us that there are no more
+irreducible ones. Here, for future reference are all the absolutely
+irreducible 2-module representations of A6.
+<ul>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p16']);"
+    value="sp0.2" />
+  <div id="ansp16"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p17']);"
+    value="sp1.2" />
+  <div id="ansp17"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p18']);"
+    value="sp2.1" />
+  <div id="ansp18"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p19" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p19']);"
+    value="sp3.1" />
+  <div id="ansp19"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p12','p20']);"
+    value="sp3.2" />
+  <div id="ansp20"><div></div></div>
+ </li>
+</ul>
+And here again is the irreducible, but not absolutely irreducible
+representations of A6 over GF 2.
+<ul>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+    onclick="handleFree(['p1','p6','p7','p10','p21']);"
+    value="dA6d16" />
+  <div id="ansp21"><div></div></div>
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{alggrouptheoryreptheory.xhtml}
+<<alggrouptheoryreptheory.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+Representation theory for finite groups studies finite groups by embedding
+them in a general linear group over a field or an integral domain. Hence,
+we are representing each element of the group by an invertible matrix.
+Two marix representations of a given group are equivalent, if, by changing
+the basis of the underlying space, you can go from one to the other. When
+you change bases, you transform the matrices that are the images of elements
+by conjugating them by an invertible matrix.
+<br/>
+<br/>
+If we can find a subspace which is fixed under the image of the group, then
+there exists a 'base change' after which all the representing matrices are
+in upper triangular block form. The block matrices on the main diagonal give
+a new representation of the group of lower degree. Such a representation is
+said to be 'reducible'.
 <<page foot>>
 @
 
@@ -3671,7 +3943,369 @@ abstract algebra
  </head>
  <body>
 <<page head>>
-      algnumbertheory not implemented
+  <div align="center">Number Theory</div>
+  <hr/>
+Here are some sample computations using Axiom's algebraic number facilities.
+<ul>
+ <li> <a href="algnumbertheorygalois.xhtml">Galois Groups</a><br/>
+      Computation of Galois groups using factorizations over number fields
+ </li>
+ <li> <a href="numfunctions.xhtml">Number Theory Functions</a><br/>
+      Some functions of interest to number theorists
+ </li>
+</ul>
+<<page foot>>
+@
+
+\subsection{algnumbertheorygalois.xhtml}
+<<algnumbertheorygalois.xhtml>>=
+<<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
+ </head>
+ <body>
+<<page head>>
+  <div align="center">Computation of Galois Groups</div>
+  <hr/>
+As a sample use of Axiom's algebraic number facilities, we compute the
+Galois group of the polynomial p(x)=x**5-5*x+12
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="p:=x**5-5*x+12" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+We would like to construct a polynomial f(x) such that the splitting field
+of p(x) is generated by one root of f(x). First we construct a polynomial
+r=r(x) such that one root of r(x) generates the filed generatedy by two
+roots of the polynomial p(x). As it will turn out, the field generate by
+two roots of p(x) is, in fact, the splitting field of p(x).
+
+From the proof of the primitive element theorem we know that if a and b
+are algebraic numbers, then the field Q(a,b) is equal to Q(a+k*b) for an
+appropriately chosen integer k. In our case, we construct the minimal 
+polynomial of a[i]-a[j], where a[i] and a[j] are two roots of p(x). We
+construct this polynomial using <a href="dbopresultant.xhtml">resultant</a>.
+The main result we need is that if f(x) is a polynomial with roots a[1]...a[m]
+and g(x) is a polynomial with roots b[1]...b[n], then the polynomial 
+h(x)=resultant(f(y),g(x-y),y) is a polynomial of degree m*n with roots
+a[i]+b[j], 1 &lt;= i &lt;= m, 1 &lt;= j &lt;= n.
+
+For f(x) we use the polynomial p(x). For g(x) we use the polynomial -p(-x).
+Thus, the polynomial we first construct is resultant(p(y),-p(y-x),y).
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value="q:=resultant(eval(p,x,y),-eval(p,x,y-x),y)" />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+The roots of q(x) are a[i]-a[j], 1 &lt;= i,j &lt;= 5. Of course, there are
+five pairs (i,j) with i=j, so 0 is a 5-fold root of q(x). Let's get rid of
+this factor.
+<ul>
+ <li>
+  <input type="submit" id="p3" class="subbut" 
+    onclick="handleFree(['p1','p2','p3']);"
+    value="q1:=exquo(q,x^5)" />
+  <div id="ansp3"><div></div></div>
+ </li>
+</ul>
+Factor the polynomial q1.
+<ul>
+ <li>
+  <input type="submit" id="p4" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4']);"
+    value="factoredQ:=factor q1" />
+  <div id="ansp4"><div></div></div>
+ </li>
+</ul>
+We see that q1 has two irreducible factors, each of degree 10. (The fact
+that the polynomial q1 has two factors of degree 10 is enough to show that
+the Galois group of p(x) is the diheral group of order 10. (ref:
+McKay, Soicher, Computing Galois Groups over the Rationals, Journal of
+Number Theory 20, 273-281 (1983). We do not assume the results of this
+paper and we continue with the computation.) Note that the type of
+factoredQ is 
+<a href="db.xhtml?Factored(Polnomial(Integer))">
+Factored Polynomial Integer</a>. 
+This is a special data type for
+recording factorizations of polynomials with integer coefficients (see
+<a href="factored.xhtml">Factored</a>). We can access the individual
+factors using the operation <a href="dbopnthfactor.xhtml">nthFactor</a>.
+<ul>
+ <li>
+  <input type="submit" id="p5" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5']);"
+    value="r:=nthFactor(factoredQ,1)" />
+  <div id="ansp5"><div></div></div>
+ </li>
+</ul>
+Consider the polynomial r=r(x). This is the minimal polynomial of the
+difference of two roots of p(x). Thus, the splitting field of p(x) 
+contains a subfield of degree 10. We show that this subfield is the 
+splitting field of p(x) by showing that p(x) factors completely over this
+field. First we create a symbolic root of the polynomial r(x). (We
+replaced x by b in the polynomial r so that our symbolic root would
+be printed as b.)
+<ul>
+ <li>
+  <input type="submit" id="p6" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6']);"
+    value="beta:AN:=rootOf(eval(r,x,b))" />
+  <div id="ansp6"><div></div></div>
+ </li>
+</ul>
+We next tell Axiom to view p(x) as a univariate polynomial in x with
+algebraic number coefficients. This is accomplished with this type
+declaration:
+<ul>
+ <li>
+  <input type="submit" id="p7" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7']);"
+    value="p:=p::UP(x,INT)::UP(x,AN)" />
+  <div id="ansp7"><div></div></div>
+ </li>
+</ul>
+Factor p(x) over the field Q(beta). (This computation will take some time).
+<ul>
+ <li>
+  <input type="submit" id="p8" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8']);"
+    value="algFactors:=factor(p,[beta])" />
+  <div id="ansp8"><div></div></div>
+ </li>
+</ul>
+When factoring over number fields, it is important to specify the field
+over which the polynomial is to be factored, as polynomials have different
+factorizations over different fields. When you use the operation
+<a href="dbopfactor.xhtml">factor</a>, the field over which the polynomial
+is factored is the field generated by
+<ol>
+ <li> the algebraic numbers that appear in the coefficients of the polynomial
+ </li>
+ <li> the algebraic numbers that appear in a list passed as an optional
+      second argument of the operation
+ </li>
+</ol>
+In our case, the coefficients of p are all rational numbers and only beta
+appears in the list, so the field is simply Q(beta). It was necessary to
+give the list [beta] as a second argument of the operations because 
+otherwise the polynomial would have to be factored over the field generated
+by its coefficients, namely the rational numbers.
+<ul>
+ <li>
+  <input type="submit" id="p9" class="subbut" 
+    onclick="handleFree(['p1','p9']);"
+    value="factor(p)" />
+  <div id="ansp9"><div></div></div>
+ </li>
+</ul>
+We have shown that the splitting field of p(x) has degree 10. Since the
+symmetric group of degree 5 has only one transitive subgroup of order 10,
+we know that the Galois group of p(x) must be this group, the dihedral
+group of order 10. Rather than stop here, we explicitly compute the action
+of the Galois group on the roots of p(x).
+
+First we assign the roots of p(x) as the values of five variables. We
+can obtain an individual root by negating the constant coefficient of one
+of the factors of p(x).
+<ul>
+ <li>
+  <input type="submit" id="p10" class="subbut" 
+    onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p10']);"
+    value="factor1:=nthFactor(algFactors,1)" />
+  <div id="ansp10"><div></div></div>
+ </li>
+</ul>
+<ul>
+ <li>
+  <input type="submit" id="p11" class="subbut" 
+   onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p10','p11']);"
+   value="root1:=-coefficient(factor1,0)" />
+  <div id="ansp11"><div></div></div>
+ </li>
+</ul>
+We can obtain a list of all of the roots in this way.
+<ul>
+ <li>
+  <input type="submit" id="p12" class="subbut" 
+   onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12']);"
+    value="roots:=[-coefficient(nthFactor(algFactors,i),0) for i in 1..5]" />
+  <div id="ansp12"><div></div></div>
+ </li>
+</ul>
+The expression -coefficient(nthFactor(algFactors,i),0) is the ith root of p(x)
+and the elements of roots are the ith roots of p(x) as i ranges from 1 to 5.
+Assign the roots as the values of the variables a1..a5.
+<ul>
+ <li>
+  <input type="submit" id="p13" class="subbut" 
+   onclick="handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13']);"
+    value="(a1,a2,a3,a4,a5):=(roots.1,roots.2,roots.3,roots.4,roots.5)" />
+  <div id="ansp13"><div></div></div>
+ </li>
+</ul>
+Next we express the roots of r(x) as polynomials in beta. We could obtain
+these roots by calling the operation
+<a href="dbopfactor.xhtml">factor</a>. factor(r,[beta]) factors r(x) over
+Q(beta). However, this is a length computation and we can obtain the roots
+of r(x) as differences of the roots a1,...,a5 of p(x). Only ten of these
+differences are roots of r(x) and the other ten are roots of the other
+irreducible factor of q1. We can determine if a given value is a root
+of r(x) by evaluating r(x) at that particular value. (Of course, the order
+in which factors are returned by the operation 
+<a href="dbopfactor.xhtml">factor</a> is unimportant and may change with
+different implementations of the operation. Therefore, we cannot predict
+in advance which differences are roots of r(x) and which are not.) Let's
+look at four examples (two are roots of r(x) and two are not).
+<ul>
+ <li>
+  <input type="submit" id="p14" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p14']);"
+    value="eval(r,x,a1-a2)" />
+  <div id="ansp14"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p15" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p15']);"
+    value="eval(r,x,a1-a3)" />
+  <div id="ansp15"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p16" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p16']);"
+    value="eval(r,x,a1-a4)" />
+  <div id="ansp16"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p17" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p17']);"
+    value="eval(r,x,a1-a5)" />
+  <div id="ansp17"><div></div></div>
+ </li>
+</ul>
+Take one of the differences that was a root of r(x) and assign it to the
+variable bb. For example, if eval(r,x,a1-a4) returned 0, you would enter this.
+<ul>
+ <li>
+  <input type="submit" id="p18" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p18']);"
+    value="bb:=a1-a4" />
+  <div id="ansp18"><div></div></div>
+ </li>
+</ul>
+Of course, if the difference is equal to the root beta, you should choose
+another root of r(x).
+
+Automorphisms of the splitting field are given by mapping a generator of
+the field, namely beta, to other roots of its minimal polynomial. Let's
+see what happens when beta is mapped to bb. We compute the images of the
+roots a1,...,a5 under this automorphism.
+<ul>
+ <li>
+  <input type="submit" id="p19" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p19']);"
+    value="aa1:=subst(a1,beta=bb)" />
+  <div id="ansp19"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p20" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p20']);"
+    value="aa2:=subst(a2,beta=bb)" />
+  <div id="ansp20"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p21" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p21']);"
+    value="aa3:=subst(a3,beta=bb)" />
+  <div id="ansp21"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p22" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p22']);"
+    value="aa4:=subst(a4,beta=bb)" />
+  <div id="ansp22"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p23" class="subbut" 
+   onclick=
+    "handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p23']);"
+    value="aa5:=subst(a5,beta=bb)" />
+  <div id="ansp23"><div></div></div>
+ </li>
+</ul>
+Of course, the values aa1,...,aa5 are simply a permutation of the values
+a1,...,a5. Let's find the value of aa1 (execute as many of the following
+five commands as necessary).
+<ul>
+ <li>
+  <input type="submit" id="p24" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p19','p24']);"
+    value="(aa1=a1)::Boolean" />
+  <div id="ansp24"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p25" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p20','p25']);"
+    value="(aa2=a2)::Boolean" />
+  <div id="ansp25"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p26" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p21','p26']);"
+    value="(aa3=a3)::Boolean" />
+  <div id="ansp26"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p27" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p22','p27']);"
+    value="(aa4=a4)::Boolean" />
+  <div id="ansp27"><div></div></div>
+ </li>
+ <li>
+  <input type="submit" id="p28" class="subbut" 
+   onclick=
+"handleFree(['p1','p2','p3','p4','p5','p6','p7','p8','p12','p13','p23','p28']);"
+    value="(aa5=a5)::Boolean" />
+  <div id="ansp28"><div></div></div>
+ </li>
+</ul>
+Proceeding in this fashion, you can find the values of aa2..aa5.
+You have represented the automorphism beta -> bb as a permutation of the
+roots a1,...,a5. If you wish, you can repeat this computation for all the
+roots of r(x) and represent the Galois group of p(x) as a subgroup of the
+symmetric group on five letters.
+
+Here are two other problems that you may attack in a similar fashion:
+<ol>
+ <li> Show that the Galois group of p(x)=x**4+2*x**3-2*x**2-2*x+1 is the
+      dihedral group of order eight. (The splitting field of this polynomial
+      is the Hilbert class field of the quadratic field Q(sqrt(145)).)
+ </li>
+ <li> Show that the Galois group of p(x)=x**6+108 has order 6 and is
+      isomorphic to the symmetric group on three letters. (The splitting
+      field of this polynomial is the spliting field of x**3-2.)
+ </li>    
+</ol>
 <<page foot>>
 @
 
@@ -6106,7 +6740,7 @@ Reset <a href="dbopdigits.xhtml">digits</a> to its default value.
   <div id="ansp17"><div></div></div>
  </li>
 </ul>
-Numbers of type <a href="db.html?Float">Float</a> are represented as a record
+Numbers of type <a href="db.xhtml?Float">Float</a> are represented as a record
 of two integers, namely, the mantissa and the exponent where the base
 of the exponent is binary. That is, the floating point number of the
 binary. That is, the floating point number (m,e) represents the number
@@ -10285,6 +10919,15 @@ dboptruncate not implemented
 <<page foot>>
 @
 
+\subsection{dbopwrite.xhtml}
+<<dbopwrite.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+dbopwrite not implemented
+<<page foot>>
+@
 \subsection{dbopzeroof.xhtml}
 <<dbopzeroof.xhtml>>=
 <<standard head>>
@@ -10463,7 +11106,7 @@ matrix is said to be "ill-conditioned".
  </li>
 </ul>
 Now repeat the computation at a higher precision using 
-<a href="db.html?Float">Float</a>
+<a href="db.xhtml?Float">Float</a>
 <ul>
  <li>
   <input type="submit" id="p6" class="subbut" 
@@ -35372,10 +36015,57 @@ lists of points in the plane.
 \subsection{graphviewports.xhtml}
 <<graphviewports.xhtml>>=
 <<standard head>>
+  <script type="text/javascript">
+<<handlefreevars>>
+<<axiom talker>>
+  </script>
  </head>
  <body>
 <<page head>>
-      graphviewports not implemented
+  <div align="center">Stand-alone Viewport</div>
+  <hr/>
+To get a viewport on a page, you first need to create on in Axiom and
+write it out to a file that can be called up. For example, we draw a
+saddle function and assign the result to the variable v.
+<ul>
+ <li>
+  <input type="submit" id="p1" class="subbut" 
+    onclick="makeRequest('p1');"
+    value="v:=draw(x*x-y*y,x=-1..1,y=-1..1)" />
+  <div id="ansp1"><div></div></div>
+ </li>
+</ul>
+Now that we've created the viewport, we want to write the data out to
+a file. To do this, we use the <a href="dbopwrite.xhtml">write</a> command
+which takes as arguments the viewport to write out, the title of the file
+to be written to, and an optiona argument telling the write command what
+type (or types) of data you want to write (in addition to the ones that
+Axiom writes). The optional argument could be a string, like "pixmap", or
+a list of strings, like ["postscript", "pixmap"]. We need a "bitmap" data
+type to include a graph in a page so in this case, we write the viewport
+and tell it to also write a "pixmap" file:
+<ul>
+ <li>
+  <input type="submit" id="p2" class="subbut" 
+    onclick="handleFree(['p1','p2']);"
+    value='write(v,"saddle","bitmap")' />
+  <div id="ansp2"><div></div></div>
+ </li>
+</ul>
+Currently supported file formats are "pixmap", "bitmap", "postscript"
+and "image".
+
+Axiom automatically adds ".view" at the end of the viewport data file
+to specify the file type. The ".view" is actually a directory and 
+contains a bitmap file, usually called image.bm.Z, which is a compressed
+bitmap. Firefox can display bitmap files, as shown here. Clicking on the
+image should start a "live graphics copy" so you can manipulate the image.
+
+<br/>
+<br/>
+<a href="graphics.xhtml?3dobjectgraphicspage9.view">
+<img src="/research2/test/mnt/fedora5/doc/viewports/3dobjectgraphicspage9.view/image.bmp"/>
+</a>
 <<page foot>>
 @
 
@@ -36638,7 +37328,7 @@ Conversion is the process of changing an object of one type into an
 object of another type. The syntax for conversion is object::newType.
 <hr/>
 By default, 3 has the type
-<a href="db.html?PositiveInteger">PositiveInteger</a>
+<a href="db.xhtml?PositiveInteger">PositiveInteger</a>
 <ul>
  <li>
   <input type="submit" id="p1" class="subbut" 
@@ -36648,7 +37338,7 @@ By default, 3 has the type
  </li>
 </ul>
 We can change thisinto an object of type 
-<a href="db.html?Fraction(Integer)">Fraction Integer</a> by using "::".
+<a href="db.xhtml?Fraction(Integer)">Fraction Integer</a> by using "::".
 <ul>
  <li>
   <input type="submit" id="p2" class="subbut" 
@@ -37854,15 +38544,15 @@ to display the full list of operations defined by
 <<page head>>
   <div align="center">One Dimensional Array</div>
   <hr/>
-The <a href="db.html?OneDimensionalArray">OneDimensionalArray</a> is used
+The <a href="db.xhtml?OneDimensionalArray">OneDimensionalArray</a> is used
 for storing data in a one-dimensional indexed data structure. Such an array
 is a homogeneous data structure in that all the entries of the array must
 belong to the same Axiom domain. Each array has a fixed length specified
 by the user and arrays are not extensible. The indexing of 
 one-dimensional arrays is one-based. This means that the "first" element of
 an array is given the index 1. See also
-<a href="db.html?Vector">Vector</a> and
-<a href="db.html?FlexibleArray">FlexibleArray</a>. To create a 
+<a href="db.xhtml?Vector">Vector</a> and
+<a href="db.xhtml?FlexibleArray">FlexibleArray</a>. To create a 
 one-dimensional array, apply the operation
 <a href="dboponedimensionalarray.xhtml">oneDimensionalArray</a> to a list.
 <ul>
@@ -37874,9 +38564,9 @@ one-dimensional array, apply the operation
  </li>
 </ul>
 Another approach is to first create a, a one-dimensional array of 10 0's.
-<a href="db.html?OneDimensionalArray">OneDimensionalArray</a> has a 
+<a href="db.xhtml?OneDimensionalArray">OneDimensionalArray</a> has a 
 convenient abbreviation 
-<a href="db.html?OneDimensionalArray">ARRAY1</a>.
+<a href="db.xhtml?OneDimensionalArray">ARRAY1</a>.
 <ul>
  <li>
   <input type="submit" id="p2" class="subbut" 
@@ -39989,7 +40679,7 @@ discriminant d.
   <hr/>
 Axiom provides many operations for manipulating arbitrary precision integers.
 In this section we will show some of those that come from 
-<a href="db.html?Integer">Integer</a> itself plus some that are implemented
+<a href="db.xhtml?Integer">Integer</a> itself plus some that are implemented
 in other packages. More examples of integers are in the following sections:
 <a href="axbook/section-1.4.xhtml">Numbers</a>.
 <a href="numfunctions.xhtml">IntegerNumberTheoryFunctions</a>,
@@ -40715,7 +41405,7 @@ A number of additional operations may be used to compute numerical
 values. These are special polynomial functions that can be evaluated
 for values in any commutative ring R, and in particular for values in
 any floating-point type. The following operations are provided by the
-package <a href="db.html?OrthogonalPolynomialFunctions">
+package <a href="db.xhtml?OrthogonalPolynomialFunctions">
 OrthogonalPolynomialFunctions</a>:
 <ul>
  <li> <a href="dbopchebyshevt.xhtml">chebyshevT</a>:
@@ -42865,7 +43555,7 @@ X transpose is just a row and X is just a column.
   <div align="center">Output Functions</div>
   <hr/>
 A number of operations exist for specifying how numbers of type
-<a href="db.html?Float">Float</a> are to be displayed. By default,
+<a href="db.xhtml?Float">Float</a> are to be displayed. By default,
 spaces are inserted every ten digits in the output for readability.
 (Not that you cannot include spaces in the input form of a floating
 point number, though you can use underscores.)

\start
Date: Thu, 06 Mar 2008 08:03:04 -0800
From: Ed Borasky
To: list
Subject: Re: Lisp

> That's fair. There was no claim that lisp is the right language for
> any particular purpose. Ruby is fine and Rails is the fastest path
> to a website solution. Lisp is ill suited for that purpose and for
> many other purposes.

Well ... I wasn't specifically referring to Rails but rather to Ruby as 
a general purpose programming languages. Unfortunately, there *are* web 
site frameworks and libraries in Common Lisp. It's not that Lisp is 
ill-suited or well-suited for web applications that's the problem. It's 
that competent Lisp programmers are hard to find, and your application 
becomes costly to maintain.

Similarly, there are a lot of Rails developers that only know enough 
Ruby to hack (badly) on an existing Rails site. Again, that's a recipe 
for an unmaintainable application. I remember a poster from the 1950s -- 
"If you don't know what you're doing, don't do it here!" :)

> Spad is a conceptually different level of language and is not
> syntactic sugar. It is clear that you want a spad-like language to do
> mathematics. Lisp is ill-suited for that purpose also.

If Spad is the user-visible language that I see when I use Axiom, I 
agree. If it's a lower-level language than that, then I don't really 
think so. I think you want the full higher-level language to "do 
mathematics". At least to do *applied* mathematics, that is -- I 
couldn't do theoretical mathematics even with infinitely powerful tools. :)

\start
Date: Thu, 6 Mar 2008 18:43:42 +0100 (CET)
From: Waldek Hebisch
To: list
Subject: Re: Lisp

Bill Page wrote:
> On 3/5/08, Waldek Hebisch wrote:
> 
> > I agree to the general statement: there are many problems
> > that Axiom can not do -- most beginers will probably give up
> > concluding "Axiom is too hard to use" and not realize that
> > what they want to do in not doable using Axiom.
> >
> 
> I think you need to define more carefully what you mean by "axiom just
> can't do many things mathematicians want to do" and "not doable using
> Axiom". 

I would say that from beginers point of view doable means using 2-3
commands.  "Interpreter" functions are a middle ground.  Going to
Spad is more like "writing program to solve the problem" than "using
Axiom".

\start
Date: Thu, 06 Mar 2008 18:59:26 -0800
From: Ed Borasky
To: list
Subject: Re: Lisp

Waldek Hebisch wrote:
> Bill Page wrote:
>> On 3/5/08, Waldek Hebisch wrote:
>>
>>> I agree to the general statement: there are many problems
>>> that Axiom can not do -- most beginers will probably give up
>>> concluding "Axiom is too hard to use" and not realize that
>>> what they want to do in not doable using Axiom.
>>>
>> I think you need to define more carefully what you mean by "axiom just
>> can't do many things mathematicians want to do" and "not doable using
>> Axiom". 
> 
> I would say that from beginers point of view doable means using 2-3
> commands.  "Interpreter" functions are a middle ground.  Going to
> Spad is more like "writing program to solve the problem" than "using
> Axiom".

Exactly! I do a lot with queuing theory, Petri nets, and (timed) process 
algebras. While there are a number of special purpose packages for this 
domain, only one of them is open source, and that one is primarily 
numeric. I don't want to have to teach a CAS to do Laplace transforms, 
handle block matrices with a countably infinite number of rows and 
columns, etc. I don't know how theoretical mathematicians feel about 
this, but I for one don't have any use for a CAS that can't do these things.

Where *I* want to spend my programming time is getting these "abstract" 
solutions into some form that can be used by people other than fellow 
mathematicians.

\start
Date: Wed, 12 Mar 2008 19:35:10 -0600
From: Tim Daly
To: list
Subject: 20080312.01.tpd.patch (BasicSieve, primes, intfact documentation)

This patch updates the documentation for intfact.spad.

It expands the list of pre-computed primes to cover the range [2..10000].

It documents the PollardSmallFactor function and fixes it to conform
to Brent's published algorithm (an improvement on Pollard's).

It documents and optimizes BasicSieve. The original function used a
circular list to generate the prime sieve but testing showed that the
method generates primes less than half the time so most of the work
was wasted. This now uses the primes function which has been expanded
to improve the speed of small prime generation.

The factor function, which led to these changes, is also documented with
the original problem from sci.math.symbolic. It appears that Brent's
algorithm needs to be replaced for factoring larger primes. Axiom takes
about 10 hours to factor the given number. The algorithm under development
can do the factoring in about 7 seconds. Due to the complexity of the
code it is not included in this patch.

Tim

=========================================================================
diff --git a/changelog b/changelog
index b219341..ec2debe 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080312 tpd src/algebra/intfact.spad speed BasicSieve, prime, add docs
 20080305 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080304 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080303 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/algebra/intfact.spad.pamphlet b/src/algebra/intfact.spad.pamphlet
index 996b923..fd43be1 100644
--- a/src/algebra/intfact.spad.pamphlet
+++ b/src/algebra/intfact.spad.pamphlet
@@ -10,6 +10,7 @@
 \tableofcontents
 \eject
 \section{package PRIMES IntegerPrimesPackage}
+We've expanded the list of small primes to include those between 1 and 10000.
 <<package PRIMES IntegerPrimesPackage>>=
 )abbrev package PRIMES IntegerPrimesPackage
 ++ Author: Michael Monagan
@@ -59,19 +60,221 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
      ++ \spad{primes(a,b)} returns a list of all primes p with
      ++ \spad{a <= p <= b}
  == add
-   smallPrimes: List I := [2::I,3::I,5::I,7::I,11::I,13::I,17::I,19::I,_
-                      23::I,29::I,31::I,37::I,41::I,43::I,47::I,_
-                      53::I,59::I,61::I,67::I,71::I,73::I,79::I,_
-                      83::I,89::I,97::I,101::I,103::I,107::I,109::I,_
-                      113::I,127::I,131::I,137::I,139::I,149::I,151::I,_
-                      157::I,163::I,167::I,173::I,179::I,181::I,191::I,_
-                      193::I,197::I,199::I,211::I,223::I,227::I,229::I,_
-                      233::I,239::I,241::I,251::I,257::I,263::I,269::I,_
-                      271::I,277::I,281::I,283::I,293::I,307::I,311::I,_
-                      313::I]
+@
+\subsection{smallPrimes}
+This is a table of all of the primes in [2..10000]. It is used by the
+prime? function to check for primality. It is used by the primes function
+to generate arrays of primes in a given range. Changing the range included
+in this table implies changing the value of the nextSmallPrime variable.
+There is a constant in the function squareFree from IntegerFactorizationPackage
+that is the square of the upper bound of the table range, in this case
+10000000. 
+<<package PRIMES IntegerPrimesPackage>>=
+   smallPrimes: List I := 
+     [2::I, 3::I, 5::I, 7::I, 11::I, 13::I, 17::I, 19::I,_
+      23::I, 29::I, 31::I, 37::I, 41::I, 43::I, 47::I, 53::I,_
+      59::I, 61::I, 67::I, 71::I, 73::I, 79::I, 83::I, 89::I,_
+      97::I, 101::I, 103::I, 107::I, 109::I, 113::I, 127::I,_
+      131::I, 137::I, 139::I, 149::I, 151::I, 157::I, 163::I,_
+      167::I, 173::I, 179::I, 181::I, 191::I, 193::I, 197::I,_
+      199::I, 211::I, 223::I, 227::I, 229::I, 233::I, 239::I,_
+      241::I, 251::I, 257::I, 263::I, 269::I, 271::I, 277::I,_
+      281::I, 283::I, 293::I, 307::I, 311::I, 313::I, 317::I,_
+      331::I, 337::I, 347::I, 349::I, 353::I, 359::I, 367::I,_
+      373::I, 379::I, 383::I, 389::I, 397::I, 401::I, 409::I,_
+      419::I, 421::I, 431::I, 433::I, 439::I, 443::I, 449::I,_
+      457::I, 461::I, 463::I, 467::I, 479::I, 487::I, 491::I,_
+      499::I, 503::I, 509::I, 521::I, 523::I, 541::I, 547::I,_
+      557::I, 563::I, 569::I, 571::I, 577::I, 587::I, 593::I,_
+      599::I, 601::I, 607::I, 613::I, 617::I, 619::I, 631::I,_
+      641::I, 643::I, 647::I, 653::I, 659::I, 661::I, 673::I,_
+      677::I, 683::I, 691::I, 701::I, 709::I, 719::I, 727::I,_
+      733::I, 739::I, 743::I, 751::I, 757::I, 761::I, 769::I,_
+      773::I, 787::I, 797::I, 809::I, 811::I, 821::I, 823::I,_
+      827::I, 829::I, 839::I, 853::I, 857::I, 859::I, 863::I,_
+      877::I, 881::I, 883::I, 887::I, 907::I, 911::I, 919::I,_
+      929::I, 937::I, 941::I, 947::I, 953::I, 967::I, 971::I,_
+      977::I, 983::I, 991::I, 997::I, 1009::I, 1013::I,_
+      1019::I, 1021::I, 1031::I, 1033::I, 1039::I, 1049::I,_
+      1051::I, 1061::I, 1063::I, 1069::I, 1087::I, 1091::I,_
+      1093::I, 1097::I, 1103::I, 1109::I, 1117::I, 1123::I,_
+      1129::I, 1151::I, 1153::I, 1163::I, 1171::I, 1181::I,_
+      1187::I, 1193::I, 1201::I, 1213::I, 1217::I, 1223::I,_
+      1229::I, 1231::I, 1237::I, 1249::I, 1259::I, 1277::I,_
+      1279::I, 1283::I, 1289::I, 1291::I, 1297::I, 1301::I,_
+      1303::I, 1307::I, 1319::I, 1321::I, 1327::I, 1361::I,_
+      1367::I, 1373::I, 1381::I, 1399::I, 1409::I, 1423::I,_
+      1427::I, 1429::I, 1433::I, 1439::I, 1447::I, 1451::I,_
+      1453::I, 1459::I, 1471::I, 1481::I, 1483::I, 1487::I,_
+      1489::I, 1493::I, 1499::I, 1511::I, 1523::I, 1531::I,_
+      1543::I, 1549::I, 1553::I, 1559::I, 1567::I, 1571::I,_
+      1579::I, 1583::I, 1597::I, 1601::I, 1607::I, 1609::I,_
+      1613::I, 1619::I, 1621::I, 1627::I, 1637::I, 1657::I,_
+      1663::I, 1667::I, 1669::I, 1693::I, 1697::I, 1699::I,_
+      1709::I, 1721::I, 1723::I, 1733::I, 1741::I, 1747::I,_
+      1753::I, 1759::I, 1777::I, 1783::I, 1787::I, 1789::I,_
+      1801::I, 1811::I, 1823::I, 1831::I, 1847::I, 1861::I,_
+      1867::I, 1871::I, 1873::I, 1877::I, 1879::I, 1889::I,_
+      1901::I, 1907::I, 1913::I, 1931::I, 1933::I, 1949::I,_
+      1951::I, 1973::I, 1979::I, 1987::I, 1993::I, 1997::I,_
+      1999::I, 2003::I, 2011::I, 2017::I, 2027::I, 2029::I,_
+      2039::I, 2053::I, 2063::I, 2069::I, 2081::I, 2083::I,_
+      2087::I, 2089::I, 2099::I, 2111::I, 2113::I, 2129::I,_
+      2131::I, 2137::I, 2141::I, 2143::I, 2153::I, 2161::I,_
+      2179::I, 2203::I, 2207::I, 2213::I, 2221::I, 2237::I,_
+      2239::I, 2243::I, 2251::I, 2267::I, 2269::I, 2273::I,_
+      2281::I, 2287::I, 2293::I, 2297::I, 2309::I, 2311::I,_
+      2333::I, 2339::I, 2341::I, 2347::I, 2351::I, 2357::I,_
+      2371::I, 2377::I, 2381::I, 2383::I, 2389::I, 2393::I,_
+      2399::I, 2411::I, 2417::I, 2423::I, 2437::I, 2441::I,_
+      2447::I, 2459::I, 2467::I, 2473::I, 2477::I, 2503::I,_
+      2521::I, 2531::I, 2539::I, 2543::I, 2549::I, 2551::I,_
+      2557::I, 2579::I, 2591::I, 2593::I, 2609::I, 2617::I,_
+      2621::I, 2633::I, 2647::I, 2657::I, 2659::I, 2663::I,_
+      2671::I, 2677::I, 2683::I, 2687::I, 2689::I, 2693::I,_
+      2699::I, 2707::I, 2711::I, 2713::I, 2719::I, 2729::I,_
+      2731::I, 2741::I, 2749::I, 2753::I, 2767::I, 2777::I,_
+      2789::I, 2791::I, 2797::I, 2801::I, 2803::I, 2819::I,_
+      2833::I, 2837::I, 2843::I, 2851::I, 2857::I, 2861::I,_
+      2879::I, 2887::I, 2897::I, 2903::I, 2909::I, 2917::I,_
+      2927::I, 2939::I, 2953::I, 2957::I, 2963::I, 2969::I,_
+      2971::I, 2999::I, 3001::I, 3011::I, 3019::I, 3023::I,_
+      3037::I, 3041::I, 3049::I, 3061::I, 3067::I, 3079::I,_
+      3083::I, 3089::I, 3109::I, 3119::I, 3121::I, 3137::I,_
+      3163::I, 3167::I, 3169::I, 3181::I, 3187::I, 3191::I,_
+      3203::I, 3209::I, 3217::I, 3221::I, 3229::I, 3251::I,_
+      3253::I, 3257::I, 3259::I, 3271::I, 3299::I, 3301::I,_
+      3307::I, 3313::I, 3319::I, 3323::I, 3329::I, 3331::I,_
+      3343::I, 3347::I, 3359::I, 3361::I, 3371::I, 3373::I,_
+      3389::I, 3391::I, 3407::I, 3413::I, 3433::I, 3449::I,_
+      3457::I, 3461::I, 3463::I, 3467::I, 3469::I, 3491::I,_
+      3499::I, 3511::I, 3517::I, 3527::I, 3529::I, 3533::I,_
+      3539::I, 3541::I, 3547::I, 3557::I, 3559::I, 3571::I,_
+      3581::I, 3583::I, 3593::I, 3607::I, 3613::I, 3617::I,_
+      3623::I, 3631::I, 3637::I, 3643::I, 3659::I, 3671::I,_
+      3673::I, 3677::I, 3691::I, 3697::I, 3701::I, 3709::I,_
+      3719::I, 3727::I, 3733::I, 3739::I, 3761::I, 3767::I,_
+      3769::I, 3779::I, 3793::I, 3797::I, 3803::I, 3821::I,_
+      3823::I, 3833::I, 3847::I, 3851::I, 3853::I, 3863::I,_
+      3877::I, 3881::I, 3889::I, 3907::I, 3911::I, 3917::I,_
+      3919::I, 3923::I, 3929::I, 3931::I, 3943::I, 3947::I,_
+      3967::I, 3989::I, 4001::I, 4003::I, 4007::I, 4013::I,_
+      4019::I, 4021::I, 4027::I, 4049::I, 4051::I, 4057::I,_
+      4073::I, 4079::I, 4091::I, 4093::I, 4099::I, 4111::I,_
+      4127::I, 4129::I, 4133::I, 4139::I, 4153::I, 4157::I,_
+      4159::I, 4177::I, 4201::I, 4211::I, 4217::I, 4219::I,_
+      4229::I, 4231::I, 4241::I, 4243::I, 4253::I, 4259::I,_
+      4261::I, 4271::I, 4273::I, 4283::I, 4289::I, 4297::I,_
+      4327::I, 4337::I, 4339::I, 4349::I, 4357::I, 4363::I,_
+      4373::I, 4391::I, 4397::I, 4409::I, 4421::I, 4423::I,_
+      4441::I, 4447::I, 4451::I, 4457::I, 4463::I, 4481::I,_
+      4483::I, 4493::I, 4507::I, 4513::I, 4517::I, 4519::I,_
+      4523::I, 4547::I, 4549::I, 4561::I, 4567::I, 4583::I,_
+      4591::I, 4597::I, 4603::I, 4621::I, 4637::I, 4639::I,_
+      4643::I, 4649::I, 4651::I, 4657::I, 4663::I, 4673::I,_
+      4679::I, 4691::I, 4703::I, 4721::I, 4723::I, 4729::I,_
+      4733::I, 4751::I, 4759::I, 4783::I, 4787::I, 4789::I,_
+      4793::I, 4799::I, 4801::I, 4813::I, 4817::I, 4831::I,_
+      4861::I, 4871::I, 4877::I, 4889::I, 4903::I, 4909::I,_
+      4919::I, 4931::I, 4933::I, 4937::I, 4943::I, 4951::I,_
+      4957::I, 4967::I, 4969::I, 4973::I, 4987::I, 4993::I,_
+      4999::I, 5003::I, 5009::I, 5011::I, 5021::I, 5023::I,_
+      5039::I, 5051::I, 5059::I, 5077::I, 5081::I, 5087::I,_
+      5099::I, 5101::I, 5107::I, 5113::I, 5119::I, 5147::I,_
+      5153::I, 5167::I, 5171::I, 5179::I, 5189::I, 5197::I,_
+      5209::I, 5227::I, 5231::I, 5233::I, 5237::I, 5261::I,_
+      5273::I, 5279::I, 5281::I, 5297::I, 5303::I, 5309::I,_
+      5323::I, 5333::I, 5347::I, 5351::I, 5381::I, 5387::I,_
+      5393::I, 5399::I, 5407::I, 5413::I, 5417::I, 5419::I,_
+      5431::I, 5437::I, 5441::I, 5443::I, 5449::I, 5471::I,_
+      5477::I, 5479::I, 5483::I, 5501::I, 5503::I, 5507::I,_
+      5519::I, 5521::I, 5527::I, 5531::I, 5557::I, 5563::I,_
+      5569::I, 5573::I, 5581::I, 5591::I, 5623::I, 5639::I,_
+      5641::I, 5647::I, 5651::I, 5653::I, 5657::I, 5659::I,_
+      5669::I, 5683::I, 5689::I, 5693::I, 5701::I, 5711::I,_
+      5717::I, 5737::I, 5741::I, 5743::I, 5749::I, 5779::I,_
+      5783::I, 5791::I, 5801::I, 5807::I, 5813::I, 5821::I,_
+      5827::I, 5839::I, 5843::I, 5849::I, 5851::I, 5857::I,_
+      5861::I, 5867::I, 5869::I, 5879::I, 5881::I, 5897::I,_
+      5903::I, 5923::I, 5927::I, 5939::I, 5953::I, 5981::I,_
+      5987::I, 6007::I, 6011::I, 6029::I, 6037::I, 6043::I,_
+      6047::I, 6053::I, 6067::I, 6073::I, 6079::I, 6089::I,_
+      6091::I, 6101::I, 6113::I, 6121::I, 6131::I, 6133::I,_
+      6143::I, 6151::I, 6163::I, 6173::I, 6197::I, 6199::I,_
+      6203::I, 6211::I, 6217::I, 6221::I, 6229::I, 6247::I,_
+      6257::I, 6263::I, 6269::I, 6271::I, 6277::I, 6287::I,_
+      6299::I, 6301::I, 6311::I, 6317::I, 6323::I, 6329::I,_
+      6337::I, 6343::I, 6353::I, 6359::I, 6361::I, 6367::I,_
+      6373::I, 6379::I, 6389::I, 6397::I, 6421::I, 6427::I,_
+      6449::I, 6451::I, 6469::I, 6473::I, 6481::I, 6491::I,_
+      6521::I, 6529::I, 6547::I, 6551::I, 6553::I, 6563::I,_
+      6569::I, 6571::I, 6577::I, 6581::I, 6599::I, 6607::I,_
+      6619::I, 6637::I, 6653::I, 6659::I, 6661::I, 6673::I,_
+      6679::I, 6689::I, 6691::I, 6701::I, 6703::I, 6709::I,_
+      6719::I, 6733::I, 6737::I, 6761::I, 6763::I, 6779::I,_
+      6781::I, 6791::I, 6793::I, 6803::I, 6823::I, 6827::I,_
+      6829::I, 6833::I, 6841::I, 6857::I, 6863::I, 6869::I,_
+      6871::I, 6883::I, 6899::I, 6907::I, 6911::I, 6917::I,_
+      6947::I, 6949::I, 6959::I, 6961::I, 6967::I, 6971::I,_
+      6977::I, 6983::I, 6991::I, 6997::I, 7001::I, 7013::I,_
+      7019::I, 7027::I, 7039::I, 7043::I, 7057::I, 7069::I,_
+      7079::I, 7103::I, 7109::I, 7121::I, 7127::I, 7129::I,_
+      7151::I, 7159::I, 7177::I, 7187::I, 7193::I, 7207::I,_
+      7211::I, 7213::I, 7219::I, 7229::I, 7237::I, 7243::I,_
+      7247::I, 7253::I, 7283::I, 7297::I, 7307::I, 7309::I,_
+      7321::I, 7331::I, 7333::I, 7349::I, 7351::I, 7369::I,_
+      7393::I, 7411::I, 7417::I, 7433::I, 7451::I, 7457::I,_
+      7459::I, 7477::I, 7481::I, 7487::I, 7489::I, 7499::I,_
+      7507::I, 7517::I, 7523::I, 7529::I, 7537::I, 7541::I,_
+      7547::I, 7549::I, 7559::I, 7561::I, 7573::I, 7577::I,_
+      7583::I, 7589::I, 7591::I, 7603::I, 7607::I, 7621::I,_
+      7639::I, 7643::I, 7649::I, 7669::I, 7673::I, 7681::I,_
+      7687::I, 7691::I, 7699::I, 7703::I, 7717::I, 7723::I,_
+      7727::I, 7741::I, 7753::I, 7757::I, 7759::I, 7789::I,_
+      7793::I, 7817::I, 7823::I, 7829::I, 7841::I, 7853::I,_
+      7867::I, 7873::I, 7877::I, 7879::I, 7883::I, 7901::I,_
+      7907::I, 7919::I, 7927::I, 7933::I, 7937::I, 7949::I,_
+      7951::I, 7963::I, 7993::I, 8009::I, 8011::I, 8017::I,_
+      8039::I, 8053::I, 8059::I, 8069::I, 8081::I, 8087::I,_
+      8089::I, 8093::I, 8101::I, 8111::I, 8117::I, 8123::I,_
+      8147::I, 8161::I, 8167::I, 8171::I, 8179::I, 8191::I,_
+      8209::I, 8219::I, 8221::I, 8231::I, 8233::I, 8237::I,_
+      8243::I, 8263::I, 8269::I, 8273::I, 8287::I, 8291::I,_
+      8293::I, 8297::I, 8311::I, 8317::I, 8329::I, 8353::I,_
+      8363::I, 8369::I, 8377::I, 8387::I, 8389::I, 8419::I,_
+      8423::I, 8429::I, 8431::I, 8443::I, 8447::I, 8461::I,_
+      8467::I, 8501::I, 8513::I, 8521::I, 8527::I, 8537::I,_
+      8539::I, 8543::I, 8563::I, 8573::I, 8581::I, 8597::I,_
+      8599::I, 8609::I, 8623::I, 8627::I, 8629::I, 8641::I,_
+      8647::I, 8663::I, 8669::I, 8677::I, 8681::I, 8689::I,_
+      8693::I, 8699::I, 8707::I, 8713::I, 8719::I, 8731::I,_
+      8737::I, 8741::I, 8747::I, 8753::I, 8761::I, 8779::I,_
+      8783::I, 8803::I, 8807::I, 8819::I, 8821::I, 8831::I,_
+      8837::I, 8839::I, 8849::I, 8861::I, 8863::I, 8867::I,_
+      8887::I, 8893::I, 8923::I, 8929::I, 8933::I, 8941::I,_
+      8951::I, 8963::I, 8969::I, 8971::I, 8999::I, 9001::I,_
+      9007::I, 9011::I, 9013::I, 9029::I, 9041::I, 9043::I,_
+      9049::I, 9059::I, 9067::I, 9091::I, 9103::I, 9109::I,_
+      9127::I, 9133::I, 9137::I, 9151::I, 9157::I, 9161::I,_
+      9173::I, 9181::I, 9187::I, 9199::I, 9203::I, 9209::I,_
+      9221::I, 9227::I, 9239::I, 9241::I, 9257::I, 9277::I,_
+      9281::I, 9283::I, 9293::I, 9311::I, 9319::I, 9323::I,_
+      9337::I, 9341::I, 9343::I, 9349::I, 9371::I, 9377::I,_
+      9391::I, 9397::I, 9403::I, 9413::I, 9419::I, 9421::I,_
+      9431::I, 9433::I, 9437::I, 9439::I, 9461::I, 9463::I,_
+      9467::I, 9473::I, 9479::I, 9491::I, 9497::I, 9511::I,_
+      9521::I, 9533::I, 9539::I, 9547::I, 9551::I, 9587::I,_
+      9601::I, 9613::I, 9619::I, 9623::I, 9629::I, 9631::I,_
+      9643::I, 9649::I, 9661::I, 9677::I, 9679::I, 9689::I,_
+      9697::I, 9719::I, 9721::I, 9733::I, 9739::I, 9743::I,_
+      9749::I, 9767::I, 9769::I, 9781::I, 9787::I, 9791::I,_
+      9803::I, 9811::I, 9817::I, 9829::I, 9833::I, 9839::I,_
+      9851::I, 9857::I, 9859::I, 9871::I, 9883::I, 9887::I,_
+      9901::I, 9907::I, 9923::I, 9929::I, 9931::I, 9941::I,_
+      9949::I, 9967::I, 9973::I]
 
    productSmallPrimes    := */smallPrimes
-   nextSmallPrime        := 317::I
+   nextSmallPrime        := 10007::I
    nextSmallPrimeSquared := nextSmallPrime**2
    two                   := 2::I
    tenPowerTwenty:=(10::I)**20
@@ -81,8 +284,9 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
                       14386156093::I, 15579919981::I, 18459366157::I,
                        19887974881::I, 21276028621::I ]::(List I)
    PomeranceLimit:=27716349961::I  -- replaces (25*10**9) due to Pinch
-   PinchList:= [3215031751::I, 118670087467::I, 128282461501::I, 354864744877::I,
-                546348519181::I, 602248359169::I, 669094855201::I ]
+   PinchList:= _
+     [3215031751::I, 118670087467::I, 128282461501::I, 354864744877::I,
+      546348519181::I, 602248359169::I, 669094855201::I ]
    PinchLimit:= (10**12)::I
    PinchList2:= [2152302898747::I, 3474749660383::I]
    PinchLimit2:= (10**13)::I
@@ -92,6 +296,9 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
    count2Order:Vector NonNegativeInteger := new(1,0)
    -- used to check whether we observe an element of maximal two-order
 
+@
+\subsection{primes}
+<<package PRIMES IntegerPrimesPackage>>=
    primes(m, n) ==
       -- computes primes from m to n inclusive using prime?
       l:List(I) :=
@@ -107,17 +314,18 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
    rabinProvesCompositeSmall : (I,I,I,I,NonNegativeInteger) -> Boolean
 
 
+@
+\subsection{rabinProvesCompositeSmall}
+<<package PRIMES IntegerPrimesPackage>>=
    rabinProvesCompositeSmall(p,n,nm1,q,k) ==
          -- probability n prime is > 3/4 for each iteration
          -- for most n this probability is much greater than 3/4
          t := powmod(p, q, n)
          -- neither of these cases tells us anything
---         if not (one? t or t = nm1) then
          if not ((t = 1) or t = nm1) then
             for j in 1..k-1 repeat
                oldt := t
                t := mulmod(t, t, n)
---               one? t => return true
                (t = 1) => return true
                -- we have squared someting not -1 and got 1
                t = nm1 =>
@@ -125,18 +333,19 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
             not (t = nm1) => return true
          false
 
+@
+\subsection{rabinProvesComposite}
+<<package PRIMES IntegerPrimesPackage>>=
    rabinProvesComposite(p,n,nm1,q,k) ==
          -- probability n prime is > 3/4 for each iteration
          -- for most n this probability is much greater than 3/4
          t := powmod(p, q, n)
          -- neither of these cases tells us anything
          if t=nm1 then count2Order(1):=count2Order(1)+1
---         if not (one? t or t = nm1) then
          if not ((t = 1) or t = nm1) then
             for j in 1..k-1 repeat
                oldt := t
                t := mulmod(t, t, n)
---               one? t => return true
                (t = 1) => return true
                -- we have squared someting not -1 and got 1
                t = nm1 =>
@@ -147,10 +356,12 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
          # rootsMinus1 > 2 => true  -- Z/nZ can't be a field
          false
 
+@
+\subsection{prime?}
+<<package PRIMES IntegerPrimesPackage>>=
    prime? n ==
       n < two => false
       n < nextSmallPrime => member?(n, smallPrimes)
---      not one? gcd(n, productSmallPrimes) => false
       not (gcd(n, productSmallPrimes) = 1) => false
       n < nextSmallPrimeSquared => true
 
@@ -202,6 +413,9 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
           rabinProvesComposite(currPrime,n,nm1,q,k) => return false
       true
 
+@
+\subsection{nextPrime}
+<<package PRIMES IntegerPrimesPackage>>=
    nextPrime n ==
       -- computes the first prime after n
       n < two => two
@@ -209,6 +423,9 @@ IntegerPrimesPackage(I:IntegerNumberSystem): with
       while not prime? n repeat n := n + two
       n
 
+@
+\subsection{prevPrime}
+<<package PRIMES IntegerPrimesPackage>>=
    prevPrime n ==
       -- computes the first prime before n
       n < 3::I => error "no primes less than 2"
@@ -270,13 +487,21 @@ IntegerRoots(I:IntegerNumberSystem): Exports == Implementation where
                      52::I,64::I,73::I,81::I,97::I,100::I,112::I,121::I]
     two := 2::I
 
-
+@
+\subsection{perfectSquare?}
+<<package IROOT IntegerRoots>>=
     perfectSquare? a       == (perfectSqrt a) case I
+
+@
+\subsection{perfectNthPower?}
+<<package IROOT IntegerRoots>>=
     perfectNthPower?(b, n) == perfectNthRoot(b, n) case I
 
+@
+\subsection{perfectNthRoot}
+<<package IROOT IntegerRoots>>=
     perfectNthRoot n ==  -- complexity (log log n)**2 (log n)**2
       m:NNI
---      one? n or zero? n or n = -1 => [n, 1]
       (n = 1) or zero? n or n = -1 => [n, 1]
       e:NNI := 1
       p:NNI := 2
@@ -287,16 +512,17 @@ IntegerRoots(I:IntegerNumberSystem): Exports == Implementation where
          p := convert(nextPrime(p::I))@Integer :: NNI
       [n, e]
 
+@
+\subsection{approxNthRoot}
+<<package IROOT IntegerRoots>>=
     approxNthRoot(a, n) ==   -- complexity (log log n) (log n)**2
       zero? n => error "invalid arguments"
---      one? n => a
       (n = 1) => a
       n=2 => approxSqrt a
       negative? a =>
         odd? n => - approxNthRoot(-a, n)
         0
       zero? a => 0
---      one? a => 1
       (a = 1) => 1
       -- quick check for case of large n
       ((3*n) quo 2)::I >= (l := length a) => two
@@ -311,15 +537,24 @@ IntegerRoots(I:IntegerNumberSystem): Exports == Implementation where
         z := x-y
       x
 
+@
+\subsection{perfectNthRoot}
+<<package IROOT IntegerRoots>>=
     perfectNthRoot(b, n) ==
       (r := approxNthRoot(b, n)) ** n = b => r
       "failed"
 
+@
+\subsection{perfectSqrt}
+<<package IROOT IntegerRoots>>=
     perfectSqrt a ==
       a < 0 or not member?(a rem (144::I), resMod144) => "failed"
       (s := approxSqrt a) * s = a => s
       "failed"
 
+@
+\subsection{approxSqrt}
+<<package IROOT IntegerRoots>>=
     approxSqrt a ==
       a < 1 => 0
       if (n := length a) > (100::I) then
@@ -369,9 +604,12 @@ IntegerFactorizationPackage(I): Exports == Implementation where
 
   Implementation ==> add
     import IntegerRoots(I)
-
+    
     BasicSieve: (I, I) -> FF
 
+@
+\subsection{squareFree}
+<<package INTFACT IntegerFactorizationPackage>>=
     squareFree(n:I):FF ==
        u:I
        if n<0 then (m := -n; u := -1)
@@ -381,18 +619,119 @@ IntegerFactorizationPackage(I): Exports == Implementation where
             rec.xpnt := 2 * rec.xpnt
           makeFR(u * unit sv, l)
     -- avoid using basic sieve when the lim is too big
-       lim := 1 + approxNthRoot(m,3)
-       lim > (100000::I) => makeFR(u, factorList factor m)
+    -- we know the sieve constants up to sqrt(100000000)
+       lim := 1 + approxSqrt(m)
+       lim > (100000000::I) => makeFR(u, factorList factor m)
        x := BasicSieve(m, lim)
        y :=
---         one?(m:= unit x) => factorList x
          ((m:= unit x) = 1) => factorList x
          (v := perfectSqrt m) case I => 
             concat_!(factorList x, ["sqfr",v,2]$FFE)
          concat_!(factorList x, ["sqfr",m,1]$FFE)
        makeFR(u, y)
 
-    -- Pfun(y: I,n: I): I == (y**2 + 5) rem n
+@
+\subsection{PollardSmallFactor}
+This is Brent's\cite{1} optimization of Pollard's\cite{2} rho factoring.
+Brent's algorithm is about 24 percent faster than Pollard's. Pollard;s
+algorithm has complexity $O(p^{1/2})$ where $p$ is the smallest prime
+factor of the composite number $N$.
+
+Pollard's idea is based on the observation that two numbers $x$ and $y$
+are congruent modulo $p$ with probability 0.5 after $1.177*\sqrt{p}$ numbers
+have been randomly chosen. If we try to factor $n$ and $p$ is a factor of 
+$n$, then
+$$1 < gcd(\vert x-y\vert,n) \le n$$ since $p$ divides both $\vert x-y\vert$
+and $n$.
+
+Given a function $f$ which generates a pseudo-random sequence of numbers
+we allow $x$ to walk the sequence in order and $y$ to walk the sequence
+at twice the rate. At each cycle we compute $gcd(\vert x-y\vert,n)$.
+If this GCD ever equals $n$ then $x=y$ which means that we have walked
+"all the way around the pseudo-random cycle" and we terminate with failure.
+
+This algorithm returns failure on all primes but also fails on some
+composite numbers.
+
+Quoting Brent's back-tracking idea:
+\begin{quote}
+The best-known algorithm for finding GCDs is the Euclidean algorithm
+which takes $O(\log N)$ times as long as one multiplication mod $N$. Pollard
+showed that most of the GCD computations in Floyd's algorithm could be
+dispensed with. ... The idea is simple: if $P_F$ computes $GCD(z_1,N)$, 
+$GCD(z_2,N)$,$\ldots$, then we compute
+$$q_i=\prod_{j=1}^i{z_j}(\textrm{mod }N)$$
+and only compute $GCD(q_i,N)$ when $i$ is a multiple of $m$, where
+$\log N < < m < < N^{1/4}$. Since $q_{i+1}=q_i \times z_{i+1}(\textrm{mod }N)$,
+the work required for each GCD computation in algorithm $P_F$ is effectively
+reduced to that for a multiplication mod $N$ in the modified algorithm.
+The probability of the algorithm failing because $q_i=0$ increases, so it
+is best not to choose $m$ too large. This problem can be minimized by
+backtracking to the state after the previous GCD computation and setting
+$m=1$.
+\end{quote}
+Brent incorporates back-tracking, omits the random choice of u, and
+makes some minor modifications. His algorithm (p192-183) reads:
+
+\noindent
+$y:=x_0; r:=1; q:=1;$
+
+\noindent
+\hbox{\hskip 0.5cm}{\bf repeat} $x:=y;$
+
+\noindent
+\hbox{\hskip 1.0cm}{\bf for} $i:=1$ {\bf to} $r$ {\bf do} $y:=f(y); k:=0;$
+
+\noindent
+\hbox{\hskip 1.0cm}{\bf repeat} $ys:=y;$
+
+\noindent
+\hbox{\hskip 1.5cm}{\bf for} $i:=1$ {\bf to} $min(m,r-k)$ {\bf do}
+
+\noindent
+\hbox{\hskip 2.0cm}{\bf begin} $y:=f(y); q:=q*\vert x-y\vert mod N$
+
+\noindent
+\hbox{\hskip 2.0cm}{\bf end};
+
+\noindent
+\hbox{\hskip 1.5cm}$G:=GCD(q,N); k:=k+m$
+
+\noindent
+\hbox{\hskip 1.0cm}{\bf until} $(k \ge r)$ {\bf or} $(G > 1); r:=2*r$
+
+\noindent
+\hbox{\hskip 0.5cm}{\bf until} $G > 1$;
+
+\noindent
+\hbox{\hskip 0.5cm}{\bf if} $G=N$ {\bf then}
+
+\noindent
+\hbox{\hskip 1.0cm}{\bf repeat} $ys:=f(ys); G:=GCD(\vert y-yx\vert,N)$
+
+\noindent
+\hbox{\hskip 1.0cm}{\bf until} $G > 1$;
+
+\noindent
+\hbox{\hskip 0.5cm}{\bf if} $G=N$ {\bf then} failure {\bf else} success
+
+Here we use the function
+$$(y*y+5::I)~{\textrm rem}~ n$$
+as our pseudo-random sequence with a random starting value for y.
+
+On possible optimization to explore is to keep a hash table for the
+computed values of the function $y_{i+1}:=f(y_i)$ since we effectively
+walk the sequence several times. And we walk the sequence in a loop
+many times.  But because we are generating a very large number of
+numbers the array can be a simple array of fixed size that captures
+the last n values. So if we make a fixed array F of, say $2^q$
+elements we can store $f(y_i)$ in F[$y_i$ mod $2^q$].
+
+One property that this algorithm assumes is that the function used
+to generate the numbers has a long, hopefully complete, period. It
+is not clear that the recommended function has that property.
+
+<<package INTFACT IntegerFactorizationPackage>>=
     PollardSmallFactor(n:I):Union(I,"failed") ==
        -- Use the Brent variation
        x0 := random()$I
@@ -405,7 +744,6 @@ IntegerFactorizationPackage(I): Exports == Implementation where
           x := y
           for i in 1..convert(r)@Integer repeat
              y := (y*y+5::I) rem n
-             q := (q*abs(x-y)) rem n
              k:I := 0
           until (k>=r) or (G>1) repeat
              ys := y
@@ -422,22 +760,55 @@ IntegerFactorizationPackage(I): Exports == Implementation where
        G=n => "failed"
        G
 
-    BasicSieve(r, lim) ==
-       l:List(I) :=
-          [1::I,2::I,2::I,4::I,2::I,4::I,2::I,4::I,6::I,2::I,6::I]
-       concat_!(l, rest(l, 3))
-       d := 2::I
-       n := r
+@
+\subsection{BasicSieve}
+We create a list of prime numbers up to the limit given. The prior code
+used a circular list but tests of that list show that on average more
+than 50% of those numbers are not prime. Now we call primes to generate
+the required prime numbers. Overall this is a small percentage of the
+time needed to factor.
+
+This loop uses three pieces of information
+\begin{enumerate}
+\item n which is the number we are testing
+\item d which is the current prime to test
+\item lim which is the upper limit of the primes to test
+\end{enumerate}
+
+We loop d over the list of primes. If the remaining number n is
+smaller than the square of d then n must be prime and if it is
+not one, we add it to the list of primes. If the remaining number
+is larger than the square of d we remove all factors of d, reducing
+n each time. Then we add a record of the new factor and its multiplicity, m.
+We continue the loop until we run out of primes.
+
+Annoyingly enough, primes does not return an ordered list so we fix this.
+
+The sieve works up to a given limit, reducing out the factors that it
+finds. If it can find all of the factors than it returns a factored
+result where the first element is the unit 1. If there is still a 
+part of the number unfactored it returns the number and a list of
+the factors found and their multiplicity.
+
+Basically we just loop thru the prime factors checking to see if
+they are a component of the number, n. If so, we remove the factor from
+the number n (possibly m times) and continue thru the list of primes.
+<<package INTFACT IntegerFactorizationPackage>>=
+    BasicSieve(n, lim) ==
+       p:=primes(1::I,lim::I)$IntegerPrimesPackage(I)
+       l:List(I) := append([first p],reverse rest p)
        ls := empty()$List(FFE)
-       for s in l repeat
-          d > lim => return makeFR(n, ls)
+       for d in l repeat
           if n<d*d then
              if n>1 then ls := concat_!(ls, ["prime",n,1]$FFE)
              return makeFR(1, ls)
           for m in 0.. while zero?(n rem d) repeat n := n quo d
           if m>0 then ls := concat_!(ls, ["prime",d,convert m]$FFE)
-          d := d+s
+       makeFR(n,ls)
 
+@
+\subsection{BasicMethod}
+<<package INTFACT IntegerFactorizationPackage>>=
     BasicMethod n ==
        u:I
        if n<0 then (m := -n; u := -1)
@@ -445,6 +816,38 @@ IntegerFactorizationPackage(I): Exports == Implementation where
        x := BasicSieve(m, 1 + approxSqrt m)
        makeFR(u, factorList x)
 
+@
+\subsection{factor}
+The factor function is many orders of magnitude slower than the results
+of other systems. A posting on sci.math.symbolic showed that NTL could
+factor the final value (t6) in about 11 seconds. Axiom takes about 8 hours.
+\begin{verbatim}
+a1:=101
+a2:=109
+t1:=a1*a2
+factor t1
+
+a3:=21525175387
+t2:=t1*a3
+factor t2
+
+a4:=218301576858349
+t3:=t2*a4
+factor t3
+
+a5:=13731482973783137
+t4:=t3*a5
+factor t4
+
+a6:=23326138687706820109
+t5:=t4*a6
+factor t5
+
+a7:=4328240801173188438252813716944518369161
+t6:=t5*a7
+factor t6
+\end{verbatim}
+<<package INTFACT IntegerFactorizationPackage>>=
     factor m ==
        u:I
        zero? m => 0
@@ -452,7 +855,6 @@ IntegerFactorizationPackage(I): Exports == Implementation where
                       else (n := m; u := 1)
        b := BasicSieve(n, 10000::I)
        flb := factorList b
---       one?(n := unit b) => makeFR(u, flb)
        ((n := unit b) = 1) => makeFR(u, flb)
        a:LMI := dictionary() -- numbers yet to be factored
        b:LMI := dictionary() -- prime factors found
@@ -465,7 +867,7 @@ IntegerFactorizationPackage(I): Exports == Implementation where
           (s := perfectNthRoot n).exponent > 1 =>
             insert_!(s.base, a, c * s.exponent)
           -- test for a difference of square
-          x:=approxSqrt n;
+          x:=approxSqrt n
           if (x**2<n) then x:=x+1
           (y:=perfectSqrt (x**2-n)) case I =>
                 insert_!(x+y,a,c)
@@ -521,14 +923,16 @@ IntegerFactorizationPackage(I): Exports == Implementation where
 --SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 @
 <<*>>=
-<<license>>
-
 <<package PRIMES IntegerPrimesPackage>>
 <<package IROOT IntegerRoots>>
 <<package INTFACT IntegerFactorizationPackage>>
 @
 \eject
 \begin{thebibliography}{99}
-\bibitem{1} nothing
+\bibitem{1} Brent, Richard, ``An Improved Monte Carlo Factorization
+Algorithm'', BIT 20, 1980, pp176-184,
+http://web.comlab.ox.ac.uk/oucl/work/richard.brent/pd/rpb051i.pdf
+\bibitem{2} Pollard, J.M., ``A Monte Carlo method for factorization''
+BIT Numerical Mathematics 15(3), 1975, pp331-334
 \end{thebibliography}
 \end{document}

\start
Date: Wed, 12 Mar 2008 19:36:36 -0600
From: Tim Daly
To: list
Subject: SVN Sourceforge

This intfact.spad patch update for SVN silver is delayed.
Apparently sourceforge SVN is broken and is refusing checkin for SVN.
When the process gets fixed SVN silver will be updated.

\start
Date: Thu, 13 Mar 2008 22:21:44 +0100
From: Gregory Vanuxem
To: Peter Broadbery
Subject: Re: aldor/axiom interoperability

Dear Peter, *

I was waiting for your small Aldor patch and never see it. Did you send
it somewhere ? The main concern of this mail is if you are able to
compile ecfact.as (attached) and _execute_ the
LenstraEllipticMethod(Integer) function. On my system it fails, a bug
somewhere. Am I alone with this issue ?  Martin ? I'm still using the
old build process and want to switch to the new one but this stops me. I
do not want to take your time but maybe you have an idea of what's going
on with this issue.

The output is :

Looking in OutputPackage() for ??349042727  with code 483270060
and an error message : "export not found"

Greg

PS : I precise that I applied one of your patchs, sorry I don't remember
which one, to be able to use recent versions of Aldor. The problem
mentioned here still remains on my machine.

Le jeudi 17 janvier 2008 =E0 09:32 +0000, Peter Broadbery a =E9crit :
> Finally got round to looking at this.
> The code attached can be used to build the axiom/aldor interopability
> library (libaxiom.al).
>
> New features:
> Less abuse of make features (though I've only used a recent version of
> make, and have used some newer features)
> Dependency on java removed.
> Cleaner build process - all the dependency analysis is done in the
> aldor code.  It should be more data driven, but it isn't.
>
> There's a small aldor patch that I'll send along this evening.
>
> Peter
> _______________________________________________
> Axiom-developer mailing list
> list
> http://lists.nongnu.org/mailman/listinfo/axiom-developer

--=-7uow5UTTsT0R3TcLhT/f

-- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are
-- met:
--
--     - Redistributions of source code must retain the above copyright
--       notice, this list of conditions and the following disclaimer.
--
--     - Redistributions in binary form must reproduce the above copyright
--       notice, this list of conditions and the following disclaimer in
--       the documentation and/or other materials provided with the
--       distribution.
--
--     - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--       names of its contributors may be used to endorse or promote products
--       derived from this software without specific prior written permission.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#include "axiom.as"
#pile

--% Elliptic curve method for integer factorization
--  This file implements Lenstra's algorithm for integer factorization.
--  A divisor of N is found by computing a large multiple of a rational
--  point on a randomly generated elliptic curve in P2 Z/NZ.
--  The Hessian model is used for the curve (1) to simplify the selection
--  of the initial point on the random curve and (2) to minimize the
--  cost of adding points.
--  Ref:  IBM RC 11262, DV Chudnovsky & GV Chudnovsky
--  SMW Sept 86.

--% EllipticCurveRationalPoints
--)abbrev domain ECPTS EllipticCurveRationalPoints

EllipticCurveRationalPoints(x0:Integer, y0:Integer, z0:Integer, n:Integer): ECcat == ECdef where
    Point   ==> Record(x: Integer, y: Integer, z: Integer)

    ECcat ==> AbelianGroup with
        double: %  -> %
        p0:     %
        HessianCoordinates: % -> Point

    ECdef ==> add
        Rep == Point
        import from Rep
        import from List Integer

        Ex == OutputForm

        default u, v:  %

        apply(u:%,x:'x'):Integer == rep(u).x
        apply(u:%,y:'y'):Integer == rep(u).y
        apply(u:%,z:'z'):Integer == rep(u).z
        import from 'x'
        import from 'y'
        import from 'z'

        coerce(u:%): Ex        == [u.x, u.y, u.z]$List(Integer) :: Ex
        p0:%                   == per [x0 rem n, y0 rem n, z0 rem n]
        HessianCoordinates(u:%):Point  == rep u

        0:%   ==
            per [1, (-1) rem n, 0]
        -(u:%):%  ==
            per [u.y, u.x, u.z]
        (u:%) = (v:%):Boolean ==
            XuZv := u.x * v.z
            XvZu := v.x * u.z
            YuZv := u.y * v.z
            YvZu := v.y * u.z
            (XuZv-XvZu) rem n = 0 and (YuZv-YvZu) rem n = 0
        (u:%) + (v:%): % ==
            XuZv := u.x * v.z
            XvZu := v.x * u.z
            YuZv := u.y * v.z
            YvZu := v.y * u.z
            (XuZv-XvZu) rem n = 0 and (YuZv-YvZu) rem n = 0 => double u
            XuYv := u.x * v.y
            XvYu := v.x * u.y
            Xw := XuZv*XuYv - XvZu*XvYu
            Yw := YuZv*XvYu - YvZu*XuYv
            Zw := XvZu*YvZu - XuZv*YuZv
            per [Yw rem n, Xw rem n, Zw rem n]
        double(u:%): % ==
            import from PositiveInteger
            X3 := u.x**(3@PositiveInteger)
            Y3 := u.y**(3@PositiveInteger)
            Z3 := u.z**(3@PositiveInteger)
            Xw := u.x*(Y3 - Z3)
            Yw := u.y*(Z3 - X3)
            Zw := u.z*(X3 - Y3)
            per [Yw rem n, Xw rem n, Zw rem n]
        (n:Integer)*(u:%): % ==
            n < 0 => (-n)*(-u)
            v := 0
            import from UniversalSegment Integer
            for i in 0..length n - 1 repeat
                if bit?(n,i) then v := u + v
                u := double u
            v


--% EllipticCurveFactorization
--)abbrev package ECFACT EllipticCurveFactorization

EllipticCurveFactorization: with
        LenstraEllipticMethod: (Integer)                   -> Integer
        LenstraEllipticMethod: (Integer, Float)         -> Integer
        LenstraEllipticMethod: (Integer, Integer, Integer) -> Integer
        LenstraEllipticMethod: (Integer, Integer)          -> Integer

        lcmLimit: Integer -> Integer
        lcmLimit: Float-> Integer

        solveBound: Float -> Float
        bfloor:     Float -> Integer
        primesTo:   Integer -> List Integer
        lcmTo:      Integer -> Integer
    == add
        import from List Integer
        Ex == OutputForm
        import from Ex
        import from String
        import from Float

        NNI==> NonNegativeInteger
        import from OutputPackage
        import from Integer, NonNegativeInteger
        import from UniversalSegment Integer

        blather:Boolean := true

        --% Finding the multiplier
        flabs (f: Float): Float == abs f
        flsqrt(f: Float): Float == sqrt f
        nthroot(f:Float,n:Integer):Float == exp(log f/n::Float)

        bfloor(f: Float): Integer == wholePart floor f

        lcmLimit(n: Integer):Integer ==
            lcmLimit nthroot(n::Float, 3)
        lcmLimit(divisorBound: Float):Integer ==
            y := solveBound divisorBound
            lcmLim := bfloor exp(log divisorBound/y)
            if blather then
                output("The divisor bound is", divisorBound::Ex)
                output("The lcm Limit is", lcmLim::Ex)
            lcmLim

        -- Solve the bound equation using a Newton iteration.
        --
        -- f = y**2 - log(B)/log(y+1)
        --
        -- f/f' = fdf =
        --    2                 2
        --   y (y + 1)log(y + 1)  - (y + 1)log(y + 1) logB
        --   ---------------------------------------------
        --                                 2
        --              2y(y + 1)log(y + 1)  + logB
        --
        fdf(y: Float, logB: Float): Float ==
            logy  := log(y + 1)
            ylogy := (y + 1)*logy
            ylogy2:= y*logy*ylogy
            (y*ylogy2 - logB*ylogy)/((2@Integer)*ylogy2 + logB)
        solveBound(divisorBound:Float):Float ==
            -- solve               y**2 = log(B)/log(y + 1)
            -- although it may be  y**2 = log(B)/(log(y)+1)
            relerr := (10::Float)**(-5)
            logB := log divisorBound
            y0   := flsqrt log10 divisorBound
            y1   := y0 - fdf(y0, logB)
            while flabs((y1 - y0)/y0) > relerr repeat
                y0 := y1
                y1 := y0 - fdf(y0, logB)
            y1

        -- maxpin(p, n, logn) is max d s.t. p**d <= n
        maxpin(p:Integer,n:Integer,logn:Float): NonNegativeInteger ==
            d: Integer := bfloor(logn/log(p::Float))
            if d < 0 then d := 0
            d::NonNegativeInteger

        multiple?(i: Integer, plist: List Integer): Boolean ==
            for p in plist repeat if i rem p = 0 then return true
            false

        primesTo(n:Integer):List Integer ==
            n < 2 => []
            n = 2 => [2]
            plist := [3, 2]
            i:Integer := 5
            while i <= n repeat
                if not multiple?(i, plist) then plist := cons(i, plist)
                i := i + 2
                if not multiple?(i, plist) then plist := cons(i, plist)
                i := i + 4
            plist
        lcmTo(n:Integer):Integer ==
            plist := primesTo n
            m: Integer := 1
            logn := log(n::Float)
            for p in plist repeat m := m * p**maxpin(p,n,logn)
            if blather then
                output("The lcm of 1..", n::Ex)
                output("            is", m::Ex)
            m
        LenstraEllipticMethod(n: Integer):Integer ==
            LenstraEllipticMethod(n, flsqrt(n::Float))
        LenstraEllipticMethod(n: Integer, divisorBound: Float):Integer ==
            lcmLim0 := lcmLimit divisorBound
            multer0 := lcmTo lcmLim0
            LenstraEllipticMethod(n, lcmLim0, multer0)
        InnerLenstraEllipticMethod(n:Integer, multer:Integer, 
                             X0:Integer, Y0:Integer, Z0:Integer):Integer ==
            import from EllipticCurveRationalPoints(X0,Y0,Z0,n)
            import from Record(x: Integer, y: Integer, z: Integer)
            p  := p0
            pn := multer * p
            Zn := HessianCoordinates.pn.z
            gcd(n, Zn)

        LenstraEllipticMethod(n: Integer, multer: Integer):Integer ==
            X0:Integer := random()
            Y0:Integer := random()
            Z0:Integer := random()
            InnerLenstraEllipticMethod(n, multer, X0, Y0, Z0)

        LenstraEllipticMethod(n:Integer, lcmLim0:Integer, multer0:Integer):Integer ==
            nfact: Integer := 1
            for i:Integer in 1.. while nfact = 1 repeat
                output("Trying elliptic curve number", i::Ex)
                X0:Integer := random()
                Y0:Integer := random()
                Z0:Integer := random()
                nfact := InnerLenstraEllipticMethod(n, multer0, X0, Y0, Z0)
                if nfact = n then
                    lcmLim := lcmLim0
                    while nfact = n repeat
                        output("Too many iterations... backing off")
                        lcmLim := bfloor(lcmLim * 0.6)
                        multer := lcmTo lcmLim
                        nfact := InnerLenstraEllipticMethod(n, multer0, X0, Y0, Z0)
            nfact


\start
Date: Thu, 13 Mar 2008 21:36:22 -0400
From: Bill Page
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

On 3/13/08, Gregory Vanuxem wrote:
> Dear Peter, *
>
>  I was waiting for your small Aldor patch and never see it. Did you send
>  it somewhere ?

From: Martin Rubey
Date: 17 Jan 2008 09:21:22 +0100
	<mailto:fricas-devel-unsubscribe@googlegroups.com>


Dear Franz,

MANY MANY thanks for your instructions!  They just worked! (except that I don't
have lndir, but I did for f in ../../src/algebra/*; do ln -s $f; done; instead)

They should definitively replace the old instructions on the wiki. In fact, I
think that both src_aldor2.tgz and your script should go into the fricas
contrib directory, say, contrib/aldor.  Maybe you could polish your script so
that it doesn't use lndir, detects ARCH automatically and does not depend on
the fricas source directory any longer.

ARCH is detected also in contrib/debian/mk_deb, you could steal it from there

The fricas source directory is used only to get axiom.sty, I think?  Maybe you
could just pack it into contrib too?

Franz Lehner writes:

> Bill Page wrote:
> > After a little more fighting with the src_aldor2.tgz makefile, I have
> > finally managed to build the Aldor interface in FriCAS. As Peter said,
> > a patch to Axiom's 'hashType' was necessary to make this work.

> Is this patch publicly available anywhere?

Here it is:

Index: src/interp/hashcode.boot
===================================================================
--- src/interp/hashcode.boot	(Revision 183)
+++ src/interp/hashcode.boot	(Arbeitskopie)
@@ -55,7 +55,7 @@
                         hash := hashCombine(hashType(arg, percentHash), hash)
                 retCode := hashType(retType, percentHash)
                 EQL(retCode, $VoidHash) => hash
-                hashCombine(retCode, hash)
+                hashCombine(retCode, hashCombine(32236, hash))
         op = 'Enumeration =>
                 for arg in args repeat
                         hash := hashCombine(hashString(STRING arg), hash)

Don't ask me what it does, however :-)

\start
Date: Thu, 13 Mar 2008 20:27:11 -0600
From: Tim Daly
To: list
Subject: 20080313.01.pab.patch (hashcode for Aldor)

This patch, by Peter Broadbery, makes the hashcode generated by Axiom
compatible with the hashcode generated for Aldor for Mapping types.

==========================================================================
diff --git a/changelog b/changelog
index ec2debe..6a0d90e 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080313 pab src/interp/hashcode.boot make Mapping hash correct for Aldor
 20080312 tpd src/algebra/intfact.spad speed BasicSieve, prime, add docs
 20080305 tpd src/hyper/bookvol11 add additional hyperdoc page translations
 20080304 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/interp/hashcode.boot.pamphlet b/src/interp/hashcode.boot.pamphlet
index 81e2748..ab388db 100644
--- a/src/interp/hashcode.boot.pamphlet
+++ b/src/interp/hashcode.boot.pamphlet
@@ -71,7 +71,7 @@ hashType(type, percentHash) ==
 			hash := hashCombine(hashType(arg, percentHash), hash)
                 retCode := hashType(retType, percentHash)
                 EQL(retCode, $VoidHash) => hash
-		hashCombine(retCode, hash)
+		hashCombine(retCode, hashCombine(32236,hash))
 	op = 'Enumeration =>
 		for arg in args repeat
 			hash := hashCombine(hashString(STRING arg), hash)

\start
Date: 14 Mar 2008 09:02:11 +0100
From: Martin Rubey
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

unfortunately, I'm also having (severe) problems.

My setup is as follows:

fricas rev 258

rubey@aquin:/local/scratch/fricas$ svn diff
Index: src/interp/hashcode.boot
===================================================================
--- src/interp/hashcode.boot    (Revision 258)
+++ src/interp/hashcode.boot    (Arbeitskopie)
@@ -55,7 +55,7 @@
                         hash := hashCombine(hashType(arg, percentHash), hash)
                 retCode := hashType(retType, percentHash)
                 EQL(retCode, $VoidHash) => hash
-                hashCombine(retCode, hash)
+                hashCombine(retCode, hashCombine(32236, hash))
         op = 'Enumeration =>
                 for arg in args repeat
                         hash := hashCombine(hashString(STRING arg), hash)

-------------------------------------------------------------------------------

rubey@aquin:/local/scratch/fricas/contrib$ aldor -gloop
     AA  L      DDDD      OOO    RRRR
    A A  L      D   D    O   O   R   R
   A  A  L      D    D  O     O  R   R
  AAAAA  L      D    D  O     O  RRRR
 A    A  L      D   D    O   O   R  R
A     A  LLLLL  DDDD      OOO    R   R

(c) Numerical Algorithms Group Ltd 1995-2001
Release: Aldor(C) version 1.0.3 for LINUX(glibc2.3)
Type "#int help" for more details.

-------------------------------------------------------------------------------

I compiled FriCAS with gcl, then I followed the instructions given by Franz,
i.e., using the old makefiles from Peter.(!!!!)

But it doesn't seem to work:

--fact.as----------------------------------------------------------------------
#include "axiom"

fact(n: PositiveInteger): PositiveInteger == {
    n <= 1 => 1;
    res: PositiveInteger := 1;
    while n > 1 repeat {
        res := res * n;
        n := n-1;
    }
    res
 }
--fact.as----------------------------------------------------------------------



(1) -> )co fact.as 
   Compiling FriCAS source code from file 
      /users/rubey/martin/Axiom/fact.as using AXIOM-XL compiler and 
      options 
-O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/algebra
      Use the system command )set compiler args to change these 
      options.
#1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
   Compiling Lisp source code from file ./fact.lsp
   Issuing )library command for fact
   Reading /users/rubey/martin/Axiom/fact.asy
(1) -> fact 4
 
   >> System error:
   FUNCALL [or a callee] requires more than one argument.

--acint.as---------------------------------------------------------------------

#include "axiom"

ACInteger: with {
	coerce: Integer -> %;
	foo: % -> Integer;
} == Integer add {
        Rep == Integer; import from Rep;
        foo(x: %): Integer == {
                output((rep x)::OutputForm)$OutputPackage;
		rep x;
	}
        coerce(x: Integer): % == per x;
}
-------------------------------------------------------------------------------

(1) -> )co acint.as 
   Compiling FriCAS source code from file 
      /users/rubey/aldor-test/acint.as using AXIOM-XL compiler and 
      options 
-O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/algebra
      Use the system command )set compiler args to change these 
      options.
#1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
   Compiling Lisp source code from file ./acint.lsp
   Issuing )library command for acint
   Reading /users/rubey/aldor-test/acint.asy
   ACInteger is now explicitly exposed in frame frame0 
   ACInteger will be automatically loaded when needed from 
      /users/rubey/aldor-test/acint
(1) -> foo(2::ACINT)
   Internal Error
   The function foo with signature hashcode is missing from domain 
      UNPRINTABLE 

-------------------------------------------------------------------------------

Help would be GREATLY appreciated!  Could it make a difference if I used
src_aldor3.tgz instead?  Would this work with fricas, too?


Finally, I just noticed something very odd:


--fact2.as----------------------------------------------------------------------
#include "axiom"

fact(n: Integer): Integer == {
    n <= 1 => 1;
    res: Integer := 1;
    while n > 1 repeat {
        res := res * n;
        n := n-1;
    }
    res
 }
--fact.as----------------------------------------------------------------------

works well.

\start
Date: Fri, 14 Mar 2008 08:03:12 +0000
From: Peter Broadbery
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability

On Thu, Mar 13, 2008 at 9:21 PM, Gregory Vanuxem wrote:
> Dear Peter, *
>
>  I was waiting for your small Aldor patch and never see it. Did you send
>  it somewhere ? The main concern of this mail is if you are able to
>  compile ecfact.as (attached) and _execute_ the
>  LenstraEllipticMethod(Integer) function. On my system it fails, a bug
>  somewhere. Am I alone with this issue ?  Martin ? I'm still using the
>  old build process and want to switch to the new one but this stops me. I
>  do not want to take your time but maybe you have an idea of what's going
>  on with this issue.
>
....
apologies for the, um, delay..
The following patch affects the build of libaxiom.al - if a given file
compiles, then it will work or fail independently of this (it fixes
the compilation of FRMOD amongst others).

The hashcode fix _should_ help with runtime bugs.  It tracks the
change to hashcodes marked 1_1_13_18 in gf_add.c

Index: src/sefo.c
===================================================================
--- src/sefo.c	(revision 23)
+++ src/sefo.c	(working copy)
@@ -1361,7 +1361,9 @@
 	Bool	eq;

 	sstNext("symeEqual", syme1, syme2);
+
 	eq = symeEqual0(NULL, syme1, syme2);
+
 	sstDoneSyme(syme1);

 	return eq;
@@ -1847,6 +1849,9 @@
 	if (tfIsDefine(tf1) || tfIsDefine(tf2))
 		return true;

+	if (tfIsThird(tf1) || tfIsThird(tf2))
+		return true;
+
 	if (tfTag(tf1) != tfTag(tf2))
 		return false;
 	if (tfArgc(tf1) != tfArgc(tf2))


\start
Date: Fri, 14 Mar 2008 19:10:24 +0100 (CET)
From: Waldek Hebisch
To: list
Subject: Re: aldor/axiom interoperability

Bill Page wrote:
> Here it is:
> 
> Index: src/interp/hashcode.boot
> ===================================================================
> --- src/interp/hashcode.boot	(Revision 183)
> +++ src/interp/hashcode.boot	(Arbeitskopie)
> @@ -55,7 +55,7 @@
>                          hash := hashCombine(hashType(arg, percentHash), hash)
>                  retCode := hashType(retType, percentHash)
>                  EQL(retCode, $VoidHash) => hash
> -                hashCombine(retCode, hash)
> +                hashCombine(retCode, hashCombine(32236, hash))
>          op = 'Enumeration =>
>                  for arg in args repeat
>                          hash := hashCombine(hashString(STRING arg), hash)
> 
> Don't ask me what it does, however :-)
> 

What is does is clear -- this code computes a hash.  However,
the real question is different.  Namely, to cooperate Axiom
and Aldor need to compute this hash in the same way.  So the
question is which versions of Aldor use the formula above?
Did Axiom always use wrong formula or is this a change in
Aldor?

\start
Date: Fri, 14 Mar 2008 14:26:03 -0400
From: Bill Page
To: Waldek Hebisch
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

On 3/14/08, Waldek Hebisch wrote:
> Bill Page wrote:

Actually just to be clear: I only reported successfully using the
modified hashcode routine that was originally posted to the list by
Peter Broadbery without further explanation. Martin then presented
this as the patch below.

> Martin Rubey wrote:
>  > Here it is:
>  >
>  > Index: src/interp/hashcode.boot
>  > ===================================================================
>  > --- src/interp/hashcode.boot  (Revision 183)
>  > +++ src/interp/hashcode.boot  (Arbeitskopie)
>  > @@ -55,7 +55,7 @@
>  >                          hash := hashCombine(hashType(arg, percentHash), hash)
>  >                  retCode := hashType(retType, percentHash)
>  >                  EQL(retCode, $VoidHash) => hash
>  > -                hashCombine(retCode, hash)
>  > +                hashCombine(retCode, hashCombine(32236, hash))
>  >          op = 'Enumeration =>
>  >                  for arg in args repeat
>  >                          hash := hashCombine(hashString(STRING arg), hash)
>  >
>
>  > Don't ask me what it does, however :-)
>  >
>
> What it does is clear -- this code computes a hash.  However,
>  the real question is different.  Namely, to cooperate Axiom
>  and Aldor need to compute this hash in the same way.

Yes. On another thread Tim Daly recently wrote:

> This patch, by Peter Broadbery, makes the hashcode generated
> by Axiom compatible with the hashcode generated for Aldor for
> Mapping types.
> ...
>+20080313 pab src/interp/hashcode.boot make Mapping hash correct for Aldor

So perhaps Tim has some additional information about the origin of this change.

>  So the question is which versions of Aldor use the formula
> above?  Did Axiom always use wrong formula or is this a change
> in Aldor?
>

It was a change in Aldor. The version of Aldor that is being
distributed as open source by aldor.org and as the most recent binary
release candidate has this change. But previous binary versions of
Aldor that were publicly available did not require Peter's patch
above. Since the release numbering of Aldor does not seem sufficiently
consistent, I doubt that we can be much more specific than that.

I hope that Peter and Tim will find enough time to add a little more
to the explanation of the why and the when of this change.

\start
Date: Fri, 14 Mar 2008 14:44:02 -0400
From: Bill Page
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

On 3/13/08, Gregory Vanuxem wrote:
> ...The main concern of this mail is if you are able to
> compile ecfact.as (attached) and _execute_ the
> LenstraEllipticMethod(Integer) function. On my system
> it fails, a bug somewhere. Am I alone with this issue ?
>  Martin ? I'm still using the old build process

Greg, you are referring to src_aldor2.tgz that relies on Java, as the
"old build process", right?

> and want to switch to the new one but this stops me.

By you "new one" you mean the new build system recently posted by
Peter in the file "src_aldor3.tgz", right? (This one no longer
requires Java.) So you are saying that you are trying to use the new
build but that there is the regression error that you are now
reporting.

Is it only the build process that has changed? What other things might
be different between the version that you now works and this new one?
Are you using the same version of Axiom? What version of Aldor?

> I  do not want to take your time but maybe you have an idea
> of what's going on with this issue.
>
>  The output is :
>
>  Looking in OutputPackage() for ??349042727  with code 483270060
>  and an error message : "export not found"
>

On show at

http://axiom-wiki.newsynthesis.org/SandBoxEcfact

using the FriCAS version of Axiom with Peter's hashcode patch and the
current open source version of Aldor, I get the following similar (but
different) error:

(1) -> )co ecfact.as
(1) -> LenstraEllipticMethod(99)

Looking in OutputPackage() for ??349042727  with code 483270060
   >> System error:
   FOAM-USER::|fiRaiseException| is invalid as a function.

\start
Date: Fri, 14 Mar 2008 17:36:34 -0400
From: Bill Page
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

On 3/14/08, Bill Page wrote:
> On 3/13/08, Gregory Vanuxem wrote:
>  > ...
>  >  The output is :
>  >
>  >  Looking in OutputPackage() for ??349042727  with code 483270060
>  >  and an error message : "export not found"
>  >
>
>

As shown at

  http://axiom-wiki.newsynthesis.org/SandBoxEcfact

This problem seems to be related only the use of 'output' from inside
an Aldor function:

-------- file: testoutput.as ------
#include "axiom.as"
#pile
TestOutput: with
        testOutput: (Integer)                   -> Integer
    == add
        import from String
        import from OutputPackage
        testOutput(x:Integer):Integer ==
          output("help!")
          x
---------

(1) -> )co testoutput.as

   Compiling FriCAS source code from file
      /var/zope2/var/LatexWiki/7970768026816943239-25px003.as using
      AXIOM-XL compiler and options
-O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/algebra
      Use the system command )set compiler args to change these
      options.
#1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
   Compiling Lisp source code from file
      ./7970768026816943239-25px003.lsp
   Issuing )library command for 7970768026816943239-25px003
   Reading /var/zope2/var/LatexWiki/7970768026816943239-25px003.asy
   TestOutput is now explicitly exposed in frame initial
   TestOutput will be automatically loaded when needed from
      /var/zope2/var/LatexWiki/7970768026816943239-25px003

(1) -> testOutput(1)
Looking in OutputPackage() for ??349042727  with code 320506156
   >> System error:
   FOAM-USER::|fiRaiseException| is invalid as a function.

\start
Date: Fri, 14 Mar 2008 21:00:20 -0600
From: Tim Daly
To: list
Subject: 20080314.01.wxh.patch (heugcd fricas rev 256)

This is a port of the HEUGCD Fricas revision 256 patch. The patch causes
memory overflows in the default size (256*1024) maxpages in GCL for the
differential equation test suite (specifically in kamke2). Thus the
limit is raised here. There is a new regression test file, heugcd.input.

Tim
=======================================================================
diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index cf1de09..f5354c8 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -772,7 +772,7 @@ Error: Cannot get relocated section contents
 \end{verbatim}
 <<GCLOPTS-LOCBFD>>=
 GCLOPTS="--enable-vssize=65536*2 --enable-locbfd --disable-dynsysbfd \
-         --disable-statsysbfd --enable-maxpage=256*1024 --disable-xgcl \
+         --disable-statsysbfd --enable-maxpage=512*1024 --disable-xgcl \
          --disable-tkconfig"
 @
 For the MACOSX port we need the following options. The ``--disable-nls'' means 
diff --git a/changelog b/changelog
index 6a0d90e..1076313 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20080314 tpd Makefile --enable-maxpage=512*1024 due to kamke2
+20080314 tpd src/input/Makefile add heugcd.input
+20080314 tpd src/input/heugcd.input regression test listgcd change
+20080314 wxh src/algebra/listgcd.spad add check for bad reduction (rev 256)
 20080313 pab src/interp/hashcode.boot make Mapping hash correct for Aldor
 20080312 tpd src/algebra/intfact.spad speed BasicSieve, prime, add docs
 20080305 tpd src/hyper/bookvol11 add additional hyperdoc page translations
diff --git a/src/algebra/listgcd.spad.pamphlet b/src/algebra/listgcd.spad.pamphlet
index f626adb..8cbcebe 100644
--- a/src/algebra/listgcd.spad.pamphlet
+++ b/src/algebra/listgcd.spad.pamphlet
@@ -34,6 +34,10 @@ HeuGcd (BP):C == T
   C == with
      gcd          : List BP  -> BP
        ++ gcd([f1,..,fk]) = gcd of the polynomials fi.
+       ++
+       ++E gcd([671*671*x^2-1,671*671*x^2+2*671*x+1])
+       ++E gcd([7*x^2+1,(7*x^2+1)^2])
+
      gcdprim      : List BP  -> BP
        ++ gcdprim([f1,..,fk]) = gcd of k PRIMITIVE univariate polynomials
      gcdcofact    : List BP  -> List BP
@@ -196,9 +200,13 @@ HeuGcd (BP):C == T
         minpol:=contgcd*minpol
       listdeg:=[degree f for f in listf ]
       f:= first listf
-      for g in rest listf  repeat
-        f:=gcd(f,g,bigPrime)
-        if degree f = 0 then return cons(minpol,listf)
+      if positiveRemainder(leadingCoefficient(f), bigPrime) ~= 0 then
+        for g in rest listf repeat
+          lcg := leadingCoefficient(g)
+          if positiveRemainder(lcg, bigPrime) = 0 then
+            leave
+          f:=gcd(f,g,bigPrime)
+          if degree f = 0 then return cons(minpol,listf)
       ans:List BP :=
          --one polynomial is constant
          member?(0,listdeg) => constcase(listdeg,listf)
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index a54a9e7..2b626c3 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -320,7 +320,8 @@ REGRES= algaggr.regress algbrbf.regress  algfacob.regress alist.regress  \
     galois.regress    gamma.regress \
     gbf.regress       genups.regress   gonshor.regress  grpthry.regress \
     gstbl.regress     heap.regress     heat.regress     help.regress \
-    herm.regress      hexadec.regress  ico.regress      ideal.regress \
+    herm.regress      heugcd.regress \
+    hexadec.regress   ico.regress      ideal.regress \
     ifact.regress     infprod.regress  intaf.regress    intbypart.regress \
     intdeq.regress \
     intef2.regress    intef.regress    intg0.regress    intheory.regress \
@@ -566,7 +567,8 @@ FILES= ${OUT}/algaggr.input  ${OUT}/algbrbf.input    ${OUT}/algfacob.input \
        ${OUT}/gonshor.input  ${OUT}/grdef.input    \
        ${OUT}/gstbl.input \
        ${OUT}/heap.input     ${OUT}/heat.input       ${OUT}/helix.input \
-       ${OUT}/herm.input     ${OUT}/hexadec.input    ${OUT}/huang.input \
+       ${OUT}/herm.input     ${OUT}/heugcd.input \
+       ${OUT}/hexadec.input    ${OUT}/huang.input \
        ${OUT}/ico.input      ${OUT}/ideal.input      ${OUT}/ifact.input \
        ${OUT}/images1.input  ${OUT}/images1a.input   ${OUT}/images3a.input \
        ${OUT}/images3.input  ${OUT}/images6.input    ${OUT}/images6a.input \
@@ -836,6 +838,7 @@ DOCFILES= \
   ${DOC}/gstbl.input.dvi       ${DOC}/heap.input.dvi       \
   ${DOC}/heat.input.dvi        ${DOC}/helix.input.dvi      \
   ${DOC}/help.input.dvi        ${DOC}/herm.input.dvi       \
+  ${DOC}/heugcd.input.dvi \
   ${DOC}/hexadec.input.dvi     ${DOC}/hilbert.as.dvi       \
   ${DOC}/huang.input.dvi       ${DOC}/ico.input.dvi        \
   ${DOC}/ideal.input.dvi       ${DOC}/ifact.input.dvi      \
diff --git a/src/input/heugcd.input.pamphlet b/src/input/heugcd.input.pamphlet
new file mode 100644
index 0000000..9541d31
--- /dev/null
+++ b/src/input/heugcd.input.pamphlet
@@ -0,0 +1,66 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input heugcd.input}
+\author{Waldek Hebisch and Timothy Daly}
+\maketitle
+\begin{abstract}
+This is a test of revision 256 of FriCAS which changed
+the gcd function in listgcd.spad.pamphlet.
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+Of these examples, all but the first used to return 1.
+This is a test of revision 256 of FriCAS which changed
+the gcd function in listgcd.spad.pamphlet.
+@
+<<*>>=
+)spool heugcd.output
+)set message test on
+)set message auto off
+)clear all
+ 
+--S 1 of 5
+gcd([0,0,x^2-1,x^2+2*x+1])
+--R
+--R   (1)  x + 1
+--R                                                     Type: Polynomial Integer
+--E 1
+
+--S 2 of 5
+gcd([0,0,x^2-1,x^2+2*x+1])$HeuGcd(SparseUnivariatePolynomial Integer)
+--R
+--R   (2)  ? + 1
+--R                                     Type: SparseUnivariatePolynomial Integer
+--E 2
+
+--S 3 of 5
+gcd(6*x^2-1,36*x^2+12*x+1)
+--R
+--R   (3)  1
+--R                                                     Type: Polynomial Integer
+--E 3
+
+--S 4 of 5
+gcd([36*x^2-1,36*x^2+12*x+1])
+--R
+--R   (4)  6x + 1
+--R                                                     Type: Polynomial Integer
+--E 4
+
+--S 5 of 5
+gcd([36*x^2-1,36*x^2+12*x+1])$HeuGcd(SparseUnivariatePolynomial Integer)
+--R
+--R   (5)  6? + 1
+--R                                     Type: SparseUnivariatePolynomial Integer
+--E 5
+)spool 
+)lisp (bye)
+ 
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} http://fricas.svn.sourceforge.net/fricas/?rev=256\&view=rev
+\end{thebibliography}
+\end{document}

\start
Date: Fri, 14 Mar 2008 23:14:52 -0400
From: Bill Page
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

On 3/14/08, I wrote:
>
> This problem seems to be related only the use of 'output' from inside
>  an Aldor function:
>
>  -------- file: testoutput.as ------
>  #include "axiom.as"
>  #pile
>  TestOutput: with
>         testOutput: (Integer)                   -> Integer
>     == add
>         import from String
>         import from OutputPackage
>         testOutput(x:Integer):Integer ==
>           output("help!")
>           x
>  ---------
>
>  (1) -> )co testoutput.as
> ...
>  (1) -> testOutput(1)
>  Looking in OutputPackage() for ??349042727  with code 320506156
>
>    >> System error:
>    FOAM-USER::|fiRaiseException| is invalid as a function.
>

At the end of the page:

  http://axiom-wiki.newsynthesis.org/SandBoxEcfact

I have included the following simple Aldor functions to replace
Axiom's 'output' operation with a direct call to Lisp format:

-- implement output for Aldor
output(x:String):Void == {
import { FORMAT: (Boolean,String,String) -> Void } from Foreign Lisp;
FORMAT(true,"~a~%",x);
}
output(x:String,y:OutputForm):Void == {
import { FORMAT: (Boolean,String,String,String) -> Void } from Foreign Lisp;
FORMAT(true,"~a ~a~%",x,unparse(convert(y)$InputForm)$InputForm);
}

This allows the LenstraEllipticMethod to produce some useful output.

I hope this helps, but of course I still consider it a bug that it
seems impossible to call Axiom's output operations from within Aldor.

\start
Date: 15 Mar 2008 08:22:15 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

> On 3/14/08, Bill Page wrote:
> > On 3/13/08, Gregory Vanuxem wrote:
> >  > ...
> >  >  The output is :
> >  >
> >  >  Looking in OutputPackage() for ??349042727  with code 483270060
> >  >  and an error message : "export not found"
> >  >
> >
> >
> 
> As shown at
> 
>   http://axiom-wiki.newsynthesis.org/SandBoxEcfact
> 
> This problem seems to be related only the use of 'output' from inside
> an Aldor function:

But I used that extensively in axiom-combinat!  How come it is broken now?  And
how come I cannot get any aldor to work together with my fricas currently?  I'm
a little desperate.

\start
Date: Sat, 15 Mar 2008 12:54:16 +0100
From: Gregory Vanuxem
To: Peter Broadbery
Subject: Re: aldor/axiom interoperability

Le vendredi 14 mars 2008 =E0 08:03 +0000, Peter Broadbery a =E9crit :
> On Thu, Mar 13, 2008 at 9:21 PM, Gregory Vanuxem =
wrote:
> > Dear Peter, *
> >
> >  I was waiting for your small Aldor patch and never see it. Did you s=
end
> >  it somewhere ? The main concern of this mail is if you are able to
> >  compile ecfact.as (attached) and _execute_ the
> >  LenstraEllipticMethod(Integer) function. On my system it fails, a bu=
g
> >  somewhere. Am I alone with this issue ?  Martin ? I'm still using th=
e
> >  old build process and want to switch to the new one but this stops m=
e. I
> >  do not want to take your time but maybe you have an idea of what's g=
oing
> >  on with this issue.
> >
> ....
> apologies for the, um, delay..
> The following patch affects the build of libaxiom.al - if a given file
> compiles, then it will work or fail independently of this (it fixes
> the compilation of FRMOD amongst others).

Ok, it will not fix the bug previously mentioned but will allow to
switch and test the new build procedure, many thanks for your work !!!

> The hashcode fix _should_ help with runtime bugs.  It tracks the
> change to hashcodes marked 1_1_13_18 in gf_add.c
>
> Index: src/sefo.c
> =========================
==========================
==================
> --- src/sefo.c	(revision 23)
> +++ src/sefo.c	(working copy)
> @@ -1361,7 +1361,9 @@
>  	Bool	eq;
>
>  	sstNext("symeEqual", syme1, syme2);
> +
>  	eq = symeEqual0(NULL, syme1, syme2);
> +
>  	sstDoneSyme(syme1);
>
>  	return eq;
> @@ -1847,6 +1849,9 @@
>  	if (tfIsDefine(tf1) || tfIsDefine(tf2))
>  		return true;
>
> +	if (tfIsThird(tf1) || tfIsThird(tf2))
> +		return true;
> +
>  	if (tfTag(tf1) != tfTag(tf2))
>  		return false;
>  	if (tfArgc(tf1) != tfArgc(tf2))
>

Applied, thanks. I'll let you know if I encounter any issues during the
switch. Hoping that it will be applied directly to the Aldor svn trunk.

\start
Date: Sat, 15 Mar 2008 13:07:03 +0100
From: Gregory Vanuxem
To: Bill Page
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

Le vendredi 14 mars 2008 =E0 23:14 -0400, Bill Page a =E9crit :
> Greg,
>
> On 3/14/08, I wrote:
> >
> > This problem seems to be related only the use of 'output' from inside
> >  an Aldor function:
> >
> >  -------- file: testoutput.as ------
> >  #include "axiom.as"
> >  #pile
> >  TestOutput: with
> >         testOutput: (Integer)                   -> Integer
> >     == add
> >         import from String
> >         import from OutputPackage
> >         testOutput(x:Integer):Integer ==
> >           output("help!")
> >           x
> >  ---------
> >
> >  (1) -> )co testoutput.as
> > ...
> >  (1) -> testOutput(1)
> >  Looking in OutputPackage() for ??349042727  with code 320506156
> >
> >    >> System error:
> >    FOAM-USER::|fiRaiseException| is invalid as a function.
> >
>
> At the end of the page:
>
>   http://axiom-wiki.newsynthesis.org/SandBoxEcfact
>
> I have included the following simple Aldor functions to replace
> Axiom's 'output' operation with a direct call to Lisp format:
>
> -- implement output for Aldor
> output(x:String):Void == {
> import { FORMAT: (Boolean,String,String) -> Void } from Foreign Lisp;
> FORMAT(true,"~a~%",x);
> }
> output(x:String,y:OutputForm):Void == {
> import { FORMAT: (Boolean,String,String,String) -> Void } from Foreign =
Lisp;
> FORMAT(true,"~a ~a~%",x,unparse(convert(y)$InputForm)$InputForm);
> }
>
> This allows the LenstraEllipticMethod to produce some useful output.
>
> I hope this helps, but of course I still consider it a bug that it
> seems impossible to call Axiom's output operations from within Aldor.

Many thanks for tracking this down, that works for me using this
workaround. We know where to investigate now :-) The mail of Martin that
you posted on this mailing list contained the patch that I mentioned
previously.

I'll try the new build process of Peter and hopefully produce a patch
for other Axiom flavours.

\start
Date: Sat, 15 Mar 2008 13:18:49 +0100
From: Gregory Vanuxem
To: Martin Rubey
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

Le vendredi 14 mars 2008 =E0 09:02 +0100, Martin Rubey a =E9crit :
> Dear all,
>
> unfortunately, I'm also having (severe) problems.
>
> My setup is as follows:
>
> fricas rev 258
>

[...]

> -----------------------------------------------------------------------=
--------
>
> I compiled FriCAS with gcl, then I followed the instructions given by F=
ranz,
> i.e., using the old makefiles from Peter.(!!!!)
>
> But it doesn't seem to work:
>
> --fact.as--------------------------------------------------------------=
--------
> #include "axiom"
>
> fact(n: PositiveInteger): PositiveInteger == {
>     n <= 1 => 1;
>     res: PositiveInteger := 1;
>     while n > 1 repeat {
>         res := res * n;
>         n := n-1;
>     }
>     res
>  }
> --fact.as--------------------------------------------------------------=
--------


> (1) -> )co fact.as
>    Compiling FriCAS source code from file
>       /users/rubey/martin/Axiom/fact.as using AXIOM-XL compiler and
>       options
> -O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/a=
lgebra
>       Use the system command )set compiler args to change these
>       options.
> #1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
>    Compiling Lisp source code from file ./fact.lsp
>    Issuing )library command for fact
>    Reading /users/rubey/martin/Axiom/fact.asy
> (1) -> fact 4
> 
>    >> System error:
>    FUNCALL [or a callee] requires more than one argument.


That is strange I can not reproduce it on a mix of
Axiom/FriCAS/OpenAxiom. Something is wrong on your side.


> --acint.as-------------------------------------------------------------=
--------
>
> #include "axiom"
>
> ACInteger: with {
> 	coerce: Integer -> %;
> 	foo: % -> Integer;
> } == Integer add {
>         Rep == Integer; import from Rep;
>         foo(x: %): Integer == {
>                 output((rep x)::OutputForm)$OutputPackage;
> 		rep x;
> 	}
>         coerce(x: Integer): % == per x;
> }
> -----------------------------------------------------------------------=
--------
>
> (1) -> )co acint.as
>    Compiling FriCAS source code from file
>       /users/rubey/aldor-test/acint.as using AXIOM-XL compiler and
>       options
> -O -Fasy -Fao -Flsp -laxiom -Mno-AXL_W_WillObsolete -DAxiom -Y $AXIOM/a=
lgebra
>       Use the system command )set compiler args to change these
>       options.
> #1 (Warning) Deprecated message prefix: use `ALDOR_' instead of `_AXL'
>    Compiling Lisp source code from file ./acint.lsp
>    Issuing )library command for acint
>    Reading /users/rubey/aldor-test/acint.asy
>    ACInteger is now explicitly exposed in frame frame0
>    ACInteger will be automatically loaded when needed from
>       /users/rubey/aldor-test/acint
> (1) -> foo(2::ACINT)
>    Internal Error
>    The function foo with signature hashcode is missing from domain
>       UNPRINTABLE

The output bug tracked down by Bill.

Can not help more :-(

\start
Date: Sat, 15 Mar 2008 08:19:28 -0400
From: Bill Page
To: Martin Rubey
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

On 15 Mar 2008 08:22:15 +0100, Martin Rubey wrote:
> "Bill Page"  writes:
>
>  > On 3/14/08, Bill Page wrote:
>  > > On 3/13/08, Gregory Vanuxem wrote:
>  > >  > ...
>  > >  >  The output is :
>  > >  >
>  > >  >  Looking in OutputPackage() for ??349042727  with code 483270060
>  > >  >  and an error message : "export not found"
>  > >  >
>  >
>  > As shown at
>  >
>  >   http://axiom-wiki.newsynthesis.org/SandBoxEcfact
>  >
>  > This problem seems to be related only the use of 'output' from
>  > inside an Aldor function:
>
>
> But I used that extensively in axiom-combinat!  How come it is
> broken now?

Perhaps because Aldor is not integrated with any of the Axiom versions
nor Axiom with any Aldor version... and of course there is no
regression testing. Has anyone been using axiom-combinat? I think it
would be great to have a platform where work will that would be easily
available to others.

Maybe the problem with 'output' is a bug introduced by using FriCAS as
the version of Axiom. But I do not recall specifically if Greg ever
said exactly what version of Axiom he was using.

> And how come I cannot get any aldor to work together with
> my fricas currently?  I'm a little desperate.
>

I don't know. Perhaps you can report what problems you find so that
other people can try to help.

\start
Date: Sat, 15 Mar 2008 13:52:06 +0100
From: Gregory Vanuxem
To: Bill Page
Subject: Re: aldor/axiom interoperability

Le samedi 15 mars 2008 =E0 08:19 -0400, Bill Page a =E9crit :

[...]

> Maybe the problem with 'output' is a bug introduced by using FriCAS as
> the version of Axiom. But I do not recall specifically if Greg ever
> said exactly what version of Axiom he was using.

Yes, I always speak of =AB my =BB version of Axiom, sorry. GCL is buggy o=
n
my system. I have absolutely no idea why. I tried hard to debug this for
other GLC users (and Camm) without success :-( GCL is a complex piece of
software for me...

Here is its manifestation:


greg@somewhere:~$ export AXIOM=/usr/local/axiom/mnt/linux/
greg@somewhere:~$ /usr/local/axiom/mnt/linux/bin/axiom
GCL (GNU Common Lisp)  2.6.8 CLtL1    Jan 27 2008 15:27:27
Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL'ed components: (READLINE BFD UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL.
Temporary directory for compiler files set to /tmp/
                        AXIOM Computer Algebra System
                        Version: Axiom (January 2008)
               Timestamp: Sunday January 27, 2008 at 16:33:07
-------------------------------------------------------------------------=
----
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-------------------------------------------------------------------------=
----

   Re-reading compress.daase   Re-reading interp.daase
   Re-reading operation.daase
   Re-reading category.daase
   Re-reading browse.daase
(1) -> )set br q
(1) -> 1/0
 1) ->
   >> Error detected within library code:
   division by zero


   You have two options. Enter:
     top        to return to top level, or
     break      to enter a LISP break loop.

   Please enter your choice now:

The 'continue' choice is missing !!! I can't use GCL with this bug. The
funny thing is that I have used Axiom for maybe 2 years without noticing
this.

So actually I'm using a mix of Axiom/FriCAS/OpenAxiom that builds/runs
on CMUCL, SBCL and Clisp. It's simpler to perform experimentations. I
plan to completely switch to FriCAS, I just want memory usage in it :


(2) -> 1/2

        1
   (2)  -
        2
                   Type: Fraction Integer
                   Time: 0.002 (EV) + 0.004 (OT) = 0.01 sec
                   Storage: 96K (EV) + 28K (OT) = 124K bytes

I will drop a patch on the FriCAS mailing list when time will permits.
It will eventually be included in. In the past I had several
experimental Axiom trees but stopped to "maintains" them because of lack
of time (I have lost a tree that save/restore the complete environnement
when starting/quitting Axiom, grrrr!!!!). Theses trees were generally
pure experimentation and not interesting in themselves.

Actually I do not use CAS a lot (just for simple computations).

\start
Date: Sat, 15 Mar 2008 13:57:41 -0500
From: Tim Daly
To: Gregory Vanuxem
Subject: Re: aldor/axiom interoperability

Can you make your code tree accessible somewhere? I can give you a
userid on axiom-developer.org and you can upload it there? I'd like to
pick up the changes you've been making and merge them back into the
main tree.

\start
Date: 15 Mar 2008 19:53:37 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: aldor/axiom interoperability
Cc: Peter Broadbery

Bill Page writes:

> > And how come I cannot get any aldor to work together with
> > my fricas currently?  I'm a little desperate.
> >
> 
> I don't know. Perhaps you can report what problems you find so that
> other people can try to help.

I reported them just a few mails ago:

http://groups.google.at/group/fricas-devel/msg/83992b708f7e549e

I'd be grateful if somebody could post an *exact* setup that works - especially
with friCAS, i.e.:

  FriCAS rev XXX
  Aldor version 1.0.2/1.0.3/1.1.0/rev xxx
  aldor_src2.tgz / aldor_src3.tgz

so I can try to reproduce it on my system, and see what broke it.  I'd prefer
one of the binary release version of Aldor, in fact.

many thanks,

\start
Date: Sat, 15 Mar 2008 22:43:12 +0100
From: Gregory Vanuxem
To: Tim Daly
Subject: Re: aldor/axiom interoperability

Many thanks for your interest but as I said the code is not interesting.
The code that saves/restore the Axiom environment is lost (with other
things), other parts of code are purely experimental (can't publish them
as they are, in fact I do not like them in general), other parts are not
portable (interface to BLAS/LApack for reals, require new "column major
order" matrices with storage contiguous, a problematic thing). The rest
is pure and _simple_ optimisation to know what Axiom/"underlying Lisp
system" can do, applied or I don't remember it. Gaby asked me the same
thing in the past and I refused. Working on a project like Axiom
requires time (thing that I lack actually) and deep knowledge in a lot
of domains (other thing that I lack too). Axiom needs to be driven by
theories and my knowledge is often more practical. So I prefer to help
sometimes, if I can, and contemplate with admiration you and others :-)


Greg

PS : The code that displays memory utilisation works only on CMUCL,
Clisp and SBCL. GCL produces C code, it's not possible to know precisely
the memory utilisation, as far as I know at least.

Le samedi 15 mars 2008 =E0 13:57 -0500, root a =E9crit :
> Greg,
>
> Can you make your code tree accessible somewhere? I can give you a
> userid on axiom-developer.org and you can upload it there? I'd like to
> pick up the changes you've been making and merge them back into the
> main tree.

\start
Date: Sat, 15 Mar 2008 20:15:48 -0600
From: Tim Daly
To: list
Subject: Comparison of Mathematical programs

Stefan Steinhaus has published a comparison of mathematical programs
for data analysis at <http://www.scientificweb.com/ncrunch>. It is
interesting to see an end-user view of the systems.

\start
Date: Sun, 16 Mar 2008 09:38:01 -0700
From: Arthur Ralfs
To: list
Subject: Re: mathML bug? (bug 7113)

Tim Daly wrote:
> -> x:=104348/33215
>
>    104348
>    ------
>     33215
>
> -> factor(numer x)/factor(denom x)
>
>    2
>   2 19 1373
>   ---------
>   5 7 13 73
>
> but mathML output shows:
>
>    2
>   2 191373
>   ---------
>    571373
>
> Tim
>
>   
>   
Tim,

This patch just changes the character reference from #x02062; to #x02002;
which is OK for now but may introduce unwanted changes.  For instance do
we want 2xy or 2 x y?

Arthur


--------------060806090304050808050605
 name="mathml.spad.pamphlet.invisible-times.patch"
 filename="mathml.spad.pamphlet.invisible-times.patch"

--- mathml.spad.pamphlet	2008-01-28 14:59:58.000000000 -0800
+++ mathml.spad.pamphlet.2008.03.16	2008-03-16 09:19:30.000000000 -0700
@@ -1269,7 +1269,7 @@
         op = ";"     => "<mo>;</mo>" --originally ; \: should figure these out
         op = "*"     => 
            checkargs := true
-           "<mo>&#x02062;</mo>"
+           "<mo>&#x02002;</mo>"
 	-- InvisibleTimes
         op = " "     => "<mspace width='0.5em'/>"
         op = "ROW"   => "</mtd><mtd>"

--------------060806090304050808050605--

\start
Date: Sun, 16 Mar 2008 23:43:11 -0600
From: Tim Daly
To: list
Subject: 20080316.01.acr.patch (bug 7113 invisible times)

Rewrite invisible times to be "<mspace width='0.3em'/>".
The proposed rewrite using 2002 does not work in the Axiom browser fonts.

x:=104348/33215

factor(numer x)/factor(denom x)
 
used to generate
    2
   2 191373
   ---------
    571373

now generates:
    2
   2 19 1373
   ---------
   5 7 13 73

Tim

========================================================================
diff --git a/changelog b/changelog
index 1076313..443b749 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080316 acr src/algebra/mathml.spad invisibletimes == <mspace width=0.3em>
 20080314 tpd Makefile --enable-maxpage=512*1024 due to kamke2
 20080314 tpd src/input/Makefile add heugcd.input
 20080314 tpd src/input/heugcd.input regression test listgcd change
diff --git a/src/algebra/mathml.spad.pamphlet b/src/algebra/mathml.spad.pamphlet
index 67a8157..124c18f 100644
--- a/src/algebra/mathml.spad.pamphlet
+++ b/src/algebra/mathml.spad.pamphlet
@@ -1267,9 +1267,7 @@ have to be switched by swapping names.
       op :=
         op = ","     => "<mo>,</mo>" --originally , \:
         op = ";"     => "<mo>;</mo>" --originally ; \: should figure these out
-        op = "*"     => 
-           checkargs := true
-           "<mo>&#x02062;</mo>"
+        op = "*"     => "<mspace width='0.3em'/>"
 	-- InvisibleTimes
         op = " "     => "<mspace width='0.5em'/>"
         op = "ROW"   => "</mtd><mtd>"

\start
Date: Sun, 16 Mar 2008 23:54:44 -0600
From: Tim Daly
To: list
Subject: 20080316.02.tpd.patch (CATS verification)

CATS (Computer Algebra Test Suite) is an Axiom long term goal intended
to create a set of verified and validated tests for the Axiom
mathematical algorithms. One step toward that goal is to verify and
validate Axiom's results against other computer algebra systems.

This is an initial effort to verify Axiom's results using other 
computer algebra systems. In particular, this patch checks the
results given by Axiom against the results given by Mathematica
for a portion of the differential equation test suite, kamke2.

Tim
=====================================================================
diff --git a/changelog b/changelog
index 443b749..06f1da0 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080316 tpd src/input/kamke2.input check results using Mathematica.
 20080316 acr src/algebra/mathml.spad invisibletimes == <mspace width=0.3em>
 20080314 tpd Makefile --enable-maxpage=512*1024 due to kamke2
 20080314 tpd src/input/Makefile add heugcd.input
diff --git a/src/input/kamke2.input.pamphlet b/src/input/kamke2.input.pamphlet
index 2c8be63..7d31b41 100644
--- a/src/input/kamke2.input.pamphlet
+++ b/src/input/kamke2.input.pamphlet
@@ -49,6 +49,11 @@ ode101 := x*D(y(x),x) + x*y(x)**2 - y(x)
 --R                                                     Type: Expression Integer
 --E 4
 
+@
+Mathematica gives
+$$y(x)=\frac{2*x}{x^2+2}$$
+which can be substituted and simplifies to 0.
+<<*>>=
 --S 5 of 131
 yx:=solve(ode101,y,x)
 --R
@@ -80,6 +85,12 @@ ode102 := x*D(y(x),x) + x*y(x)**2 - y(x) - a*x**3
 --R                                                     Type: Expression Integer
 --E 7
 
+@
+Mathematica gives
+$$\sqrt{a}~x~
+\tanh\left(\frac{1}{2}\left(\sqrt{a}~x^2+2\sqrt{a}~C[1]\right)\right)$$
+which, upon substitution, cannot be simplified to 0.
+<<*>>=
 --S 8 of 131
 yx:=solve(ode102,y,x)
 --R
@@ -202,6 +213,13 @@ ode103 := x*D(y(x),x) + x*y(x)**2 - (2*x**2+1)*y(x) - x**3
 --R                                                     Type: Expression Integer
 --E 10
 
+@
+Mathematica gives
+$$\frac{\left(e^{\sqrt{x}~x^2}+\sqrt{2}~e^{\sqrt{2}~x^2}+
+e^{2\sqrt{2}~C[1]}-\sqrt{2}~e^{2\sqrt{2}~C[1]}\right)x}
+{e^{\sqrt{2}~x^2}+e^{2*\sqrt{2}~C[1]}}$$
+which does not simplify to 0 on substitution.
+<<*>>=
 --S 11 of 131
 yx:=solve(ode103,y,x)
 --R
@@ -276,6 +294,11 @@ ode104 := x*D(y(x),x) + a*x*y(x)**2 + 2*y(x) + b*x
 --R                                                     Type: Expression Integer
 --E 13
 
+@
+Mathematica gets:
+$$-\frac{1}{ax}-\sqrt{\frac{b}{a}}~\tan\left(a\sqrt{\frac{b}{a}}~x-C[1]\right)$$
+but cannot simplify the substitution to 0.
+<<*>>=
 --S 14 of 131
 yx:=solve(ode104,y,x)
 --R
@@ -368,6 +391,12 @@ ode105 := x*D(y(x),x) + a*x*y(x)**2 + b*y(x) + c*x + d
 --R                                                     Type: Expression Integer
 --E 16
 
+@
+Note that this complains about being unable to factor
+$$x^3-3x^2+(-b^2+2b+2)x+b^2-2b$$
+but MMA factors this instantly to be:
+$$-((b-x) (-1+x) (-2+b+x))$$
+<<*>>=
 --S 17 of 131
 yx:=solve(ode105,y,x)
 --R   WARNING (genufact): No known algorithm to factor
@@ -389,6 +418,10 @@ ode106 := x*D(y(x),x) + x**a*y(x)**2 + (a-b)*y(x)/2 + x**b
 --R                                                     Type: Expression Integer
 --E 18
 
+@
+Mathematica gets
+$$e^{-\frac{1}{2}a\log(x)+\frac{1}{2}b\log(x)}\tan\left(\frac{2x^{\frac{a+b}{2}}}{a+b}-C[1]\right)$$
+<<*>>=
 --S 19 of 131
 yx:=solve(ode106,y,x)
 --R
@@ -420,7 +453,11 @@ ode108 := x*D(y(x),x) - y(x)**2*log(x) + y(x)
 --R
 --R                                                     Type: Expression Integer
 --E 22
-
+@
+Mathematica gets:
+$$\frac{1}{1+xC[1]+\log(x)}$$
+which, on substitution, simplifies to 0.
+<<*>>=
 --S 23 of 131
 yx:=solve(ode108,y,x)
 --R
@@ -455,6 +492,11 @@ ode109 := x*D(y(x),x) - y(x)*(2*y(x)*log(x)-1)
 --R                                                     Type: Expression Integer
 --E 25
 
+@
+Mathematica gets
+$$\frac{1}{2+xC[1]+2\log(x)}$$
+which simplifies to 0 on substitution.
+<<*>>=
 --S 26 of 131
 yx:=solve(ode109,y,x)
 --R
@@ -539,6 +581,13 @@ ode113 := x*D(y(x),x) + a*sqrt(y(x)**2 + x**2) - y(x)
 --R                                                     Type: Expression Integer
 --E 34
 
+@
+Mathematica gets
+$$x*\sinh(C[1]+\log(x))$$
+If we choose $C[1]=0$ this simplifies to 
+$$\frac{1}{2}(-1+x^2)$$
+However, Mathematica cannot simplify either substition to 0.
+<<*>>=
 --S 35 of 131
 yx:=solve(ode113,y,x)
 --R
@@ -556,6 +605,11 @@ ode114 := x*D(y(x),x) - x*sqrt(y(x)**2 + x**2) - y(x)
 --R                                                     Type: Expression Integer
 --E 36
 
+@
+Mathematica gets
+$$x\sinh(x+C[1])$$
+but cannot simplify the substituted expression to 0.
+<<*>>=
 --S 37 of 131
 yx:=solve(ode114,y,x)
 --R
@@ -573,6 +627,10 @@ ode115 := x*D(y(x),x) - x*(y(x)-x)*sqrt(y(x)**2 + x**2) - y(x)
 --R                                                     Type: Expression Integer
 --E 38
 
+@
+Mathematica claims that the equations appear to involve the variables
+to be solved for in an essentially non-algebraic way.
+<<*>>=
 --S 39 of 131
 yx:=solve(ode115,y,x)
 --R
@@ -590,6 +648,12 @@ ode116 := x*D(y(x),x) - x*sqrt((y(x)**2 - x**2)*(y(x)**2-4*x**2)) - y(x)
 --R                                                     Type: Expression Integer
 --E 40
 
+@
+Mathematica says that a potential solution of ComplexInfinity was possibly
+discarded by the verifier and should be checked by hand, possibly using
+limits. And the equations appear to involve the variables to be solved
+for in an essentially non-algebraic way.
+<<*>>=
 --S 41 of 131
 yx:=solve(ode116,y,x)
 --R
@@ -608,6 +672,13 @@ ode117 := x*D(y(x),x) - x*exp(y(x)/x) - y(x) - x
 --R                                                     Type: Expression Integer
 --E 42
 
+@
+Mathematica says that inverse functions are being used by Solve, so some
+solutions may not be found and to use Reduce for complete solution
+information. It gets the answer:
+$$-x\log\left(-1+\frac{e^{-C[1]}}{x}\right)$$
+which simplifies to 0.
+<<*>>=
 --S 43 of 131
 yx:=solve(ode117,y,x)
 --R
@@ -624,6 +695,13 @@ ode118 := x*D(y(x),x) - y(x)*log(y(x))
 --R                                                     Type: Expression Integer
 --E 44
 
+@
+Mathematics gets
+$$e^{e^{C[1]}x}$$
+which, on substitution simplifies to 
+$$e^x(x-\log(e^x))$$ which, if $log(e^x)$ could simplify to $x$
+then the result would be 0.
+<<*>>=
 --S 45 of 131
 yx:=solve(ode118,y,x)
 --R
@@ -654,6 +732,11 @@ ode119 := x*D(y(x),x) - y(x)*(log(x*y(x))-1)
 --R                                                     Type: Expression Integer
 --E 47
 
+@
+Mathematica gets
+$$\frac{1}{x(C[1]-log(log(x)))}$$
+which does not simplify to 0 on substitution.
+<<*>>=
 --S 48 of 131
 yx:=solve(ode119,y,x)
 --R
@@ -671,6 +754,10 @@ ode120 := x*D(y(x),x) - y(x)*(x*log(x**2/y(x))+2)
 --R                                                     Type: Expression Integer
 --E 49
 
+@
+Mathematics get:
+$$2e^{-e^{-x} C[1]+e^{-x}{\rm ExpIntegralEi}[x]}x$$
+<<*>>=
 --S 50 of 131
 yx:=solve(ode120,y,x)
 --R
@@ -687,6 +774,10 @@ ode121 := x*D(y(x),x) + sin(y(x)-x)
 --R                                                     Type: Expression Integer
 --E 51
 
+@
+Mathematics gets
+$$\frac{\sin(x)}{1+\sin(x)}+x^{-sin(x)}C[1]$$
+<<*>>=
 --S 52 of 131
 yx:=solve(ode121,y,x)
 --R
@@ -703,6 +794,11 @@ ode122 := x*D(y(x),x) + (sin(y(x))-3*x**2*cos(y(x)))*cos(y(x))
 --R                                                     Type: Expression Integer
 --E 53
 
+@
+Mathematica gets:
+$$\arctan\left(\frac{2x^3+C[1]}{2x}\right)$$
+which, on substitution, simplifies to 0.
+<<*>>=
 --S 54 of 131
 yx:=solve(ode122,y,x)
 --R
@@ -719,6 +815,11 @@ ode123 := x*D(y(x),x) - x*sin(y(x)/x) - y(x)
 --R                                                     Type: Expression Integer
 --E 55
 
+@
+Mathematica get:
+$$x^{1+sin(x)}C[1]$$
+which does not simplfy to 0 on substitution.
+<<*>>=
 --S 56 of 131
 yx:=solve(ode123,y,x)
 --R
@@ -735,6 +836,11 @@ ode124 := x*D(y(x),x) + x*cos(y(x)/x) - y(x) + x
 --R                                                     Type: Expression Integer
 --E 57
 
+@
+Mathematics gets
+$$2x\arctan(C[1]-\log(x))$$
+which does not simplify to 0 on substitution.
+<<*>>=
 --S 58 of 131
 yx:=solve(ode124,y,x)
 --R
@@ -751,6 +857,11 @@ ode125 := x*D(y(x),x) + x*tan(y(x)/x) - y(x)
 --R                                                     Type: Expression Integer
 --E 59
 
+@
+Mathematica gets
+$$\arcsin\left(\frac{e^{C[1]}}{x}\right)$$
+which does not simplify to 0 on substitution.
+<<*>>=
 --S 60 of 131
 yx:=solve(ode125,y,x)
 --R
@@ -767,6 +878,11 @@ ode126 := x*D(y(x),x) - y(x)*f(x*y(x))
 --R                                                     Type: Expression Integer
 --E 61
 
+@
+Mathematica gets
+$$\frac{1}{-f(x)-C[1]}$$
+which does not simplify to 0 on substitution.
+<<*>>=
 --S 62 of 131
 yx:=solve(ode126,y,x)
 --R
@@ -782,7 +898,10 @@ ode127 := x*D(y(x),x) - y(x)*f(x**a*y(x)**b)
 --R
 --R                                                     Type: Expression Integer
 --E 63
-
+@
+Mathematica gives:
+$$b\left(-\frac{f(x^a)}{a}-C[1]\right)^{-1/b}$$
+<<*>>=
 --S 64 of 131
 yx:=solve(ode127,y,x)
 --R
@@ -798,7 +917,10 @@ ode128 := x*D(y(x),x) + a*y(x) - f(x)*g(x**a*y(x))
 --R
 --R                                                     Type: Expression Integer
 --E 65
-
+@
+Mathematica gives 
+$$e^{\frac{f(x)g(x^{1+a})}{1+a}-a\log(x)}C[1]$$
+<<*>>=
 --S 66 of 131
 yx:=solve(ode128,y,x)
 --R
@@ -814,7 +936,11 @@ ode129 := (x+1)*D(y(x),x) + y(x)*(y(x)-x)
 --R
 --R                                                     Type: Expression Integer
 --E 67
-
+@
+Mathematica gives
+$$-\frac{e^{1+x}}{e^{1+x}-eC[1]-exC[1]-{\rm ExpIntegralEi}(1+x)-
+x{\rm ExpIntegralEi}(1+x)}$$
+<<*>>=
 --S 68 of 131
 yx:=solve(ode129,y,x)
 --R
@@ -837,7 +963,11 @@ ode130 := 2*x*D(y(x),x) - y(x) -2*x**3
 --R
 --R                                                     Type: Expression Integer
 --E 69
-
+@
+Mathematica gives
+$$\frac{2x^3}{5}+\sqrt{x}C[1]$$
+which simplifies to 0 on substitution.
+<<*>>=
 --S 70 of 131
 ode130a:=solve(ode130,y,x)
 --R
@@ -873,7 +1003,11 @@ ode131 := (2*x+1)*D(y(x),x) - 4*exp(-y(x)) + 2
 --R
 --R                                                     Type: Expression Integer
 --E 73
-
+@
+Mathematica gives
+$$\log\left(2+\frac{1}{1+2x}\right)$$
+which simplifies to 0 when substituted.
+<<*>>=
 --S 74 of 131
 yx:=solve(ode131,y,x)
 --R
@@ -904,7 +1038,13 @@ ode132 := 3*x*D(y(x),x) - 3*x*log(x)*y(x)**4 - y(x)
 --R
 --R                                                     Type: Expression Integer
 --E 76
-
+@
+Mathematica gives 3 solutions,
+$$\frac{(-2)^{2/3}x^{1/3}}{(3x^2+4C[1]-6x^2\log(x))^{1/3}}$$
+$$\frac{( 2)^{2/3}x^{1/3}}{(3x^2+4C[1]-6x^2\log(x))^{1/3}}$$
+$$\frac{(-1)^{1/3}2^{2/3}x^{1/3}}{(3x^2+4C[1]-6x^2\log(x))^{1/3}}$$
+which do not simplify to 0 on substitution.
+<<*>>=
 --S 77 of 131
 yx:=solve(ode132,y,x)
 --R
@@ -957,7 +1097,11 @@ ode133 := x**2*D(y(x),x) + y(x) - x
 --R
 --R                                                     Type: Expression Integer
 --E 79
-
+@
+Mathematica gets:
+$$e^{1/x}C[1]-e^{1/x}{\rm ExpIntegralEi}\left(-\frac{1}{x}\right)$$
+which simplifies to 0 on substitution.
+<<*>>=
 --S 80 of 131
 yx:=solve(ode133,y,x)
 --R
@@ -983,7 +1127,15 @@ ode134 := x**2*D(y(x),x) - y(x) + x**2*exp(x-1/x)
 --R
 --R                                                     Type: Expression Integer
 --E 81
-
+@
+Mathematics get
+$$-e^{-\frac{1}{x}+x}+e^{-1/x}C[1]$$
+which does not simplify to 0 on substitution.
+This is curious because the basis element is the same one
+computed by Axiom, which Axiom cannot simplify either. 
+However, Axiom can simplify the particular element to 0
+and Mathematica cannot.
+<<*>>=
 --S 82 of 131
 ode134a:=solve(ode134,y,x)
 --R
@@ -1021,7 +1173,11 @@ ode135 := x**2*D(y(x),x) - (x-1)*y(x)
 --R
 --R                                                     Type: Expression Integer
 --E 85
-
+@
+Mathematica gets 
+$$e^{1/x}xC[1]$$
+which simplifies to 0 when substituted.
+<<*>>=
 --S 86 of 131
 ode135a:=solve(ode135,y,x)
 --R
@@ -1054,7 +1210,11 @@ ode136 := x**2*D(y(x),x) + y(x)**2 + x*y(x) + x**2
 --R
 --R                                                     Type: Expression Integer
 --E 89
-
+@
+Mathematica gets
+$$\frac{-x-xC[1]+x\log(x)}{C[1]-\log(x)}$$
+which simplifies to 0 on substition.
+<<*>>=
 --S 90 of 131
 yx:=solve(ode136,y,x)
 --R
@@ -1091,7 +1251,11 @@ ode137 := x**2*D(y(x),x) - y(x)**2 - x*y(x)
 --R
 --R                                                     Type: Expression Integer
 --E 92
-
+@
+Mathematica gets:
+$$\frac{x}{C[1]-\log(x)}$$
+which simplifies to 0 on substitution.
+<<*>>=
 --S 93 of 131
 yx:=solve(ode137,y,x)
 --R
@@ -1112,7 +1276,11 @@ ode137expr := x**2*D(yx,x) - yx**2 - x*yx
 --R                                         y(x)
 --R                                                     Type: Expression Integer
 --E 94
-
+@
+Mathematica get:
+$$x\tan(C[2]+\log(x))$$
+which simplifies to 0 when substituted.
+<<*>>=
 --S 95 of 131
 ode138 := x**2*D(y(x),x) - y(x)**2 - x*y(x) - x**2
 --R
@@ -1199,7 +1367,11 @@ yx:=solve(ode139,y,x)
 --R   (99)  "failed"
 --R                                                    Type: Union("failed",...)
 --E 99
-
+@
+Mathematica gets:
+$$-\frac{2}{x}+\frac{1}{x+C[1]}$$
+which does not simplify.
+<<*>>=
 --S 100 of 131
 ode140 := x**2*(D(y(x),x)+y(x)**2) + 4*x*y(x) + 2
 --R
@@ -1602,7 +1774,11 @@ yx:=solve(ode147,y,x)
 --R   (119)  "failed"
 --R                                                    Type: Union("failed",...)
 --E 119
-
+@
+Mathematica gets
+$$\frac{{\rm arcsinh}(x)}{\sqrt{1+x^2}}+\frac{C[1]}{\sqrt{1+x^2}}$$
+gives 0 when substituted.
+<<*>>=
 --S 120 of 131
 ode148 := (x**2+1)*D(y(x),x) + x*y(x) - 1
 --R
@@ -1644,7 +1820,11 @@ ode148expr := (x**2+1)*D(yx,x) + x*yx - 1
 --R   (123)  0
 --R                                                     Type: Expression Integer
 --E 123
-
+@
+Mathematica gets
+$$\frac{1}{3}(1+x^2)+\frac{C[1]}{\sqrt{1+x^2}}$$
+which simplifes to 0 when substituted.
+<<*>>=
 --S 124 of 131
 ode149 := (x**2+1)*D(y(x),x) + x*y(x) - x*(x**2+1)
 --R
@@ -1683,6 +1863,11 @@ ode149expr := (x**2+1)*D(yx,x) + x*yx - x*(x**2+1)
 --R                                                     Type: Expression Integer
 --E 127
 
+@
+Mathematica gets:
+$$\frac{2x^3}{3(1+x^2)}+\frac{C[1]}{1+x^2}$$
+which simplifies to 0 on substitution.
+<<*>>=
 --S 128 of 131
 ode150 := (x**2+1)*D(y(x),x) + 2*x*y(x) - 2*x**2
 --R
@@ -1727,5 +1912,6 @@ ode150expr := (x**2+1)*D(yx,x) + 2*x*yx - 2*x**2
 \eject
 \begin{thebibliography}{99}
 \bibitem{1} {\bf http://www.cs.uwaterloo.ca/$\tilde{}$ecterrab/odetools.html}
+\bibitem{2} Mathematica 6.0.1.0
 \end{thebibliography}
 \end{document}

\start
Date: 17 Mar 2008 12:29:21 +0100
From: Martin Rubey
To: list
Subject: Re: parts, members and entries

Dear all, especially dear friCAS users,

I have now completed the first step in what I believe to be a cleanup of the
aggregate world.  I would greatly appreciate comments.

There are two major changes:

1) members returns now a Set, namely the set of distinct elements of the
   homogeneous aggregate.

2) for collections, construct is the left inverse of parts.  This was mostly
   handled this way anyway.

So far, this doesn't produce any regression in FriCAS.

I would like to discuss some other major changes:

a) I cannot see any reason why a BagAggregate is not a Collection, i.e.,
   reconstructible from the list of its parts.  However, it seems that it is
   intentional, since we have

  DictionaryOperations(S:SetCategory): Category ==
    Join(BagAggregate S, Collection(S)) with [...]

   Unless somebody can present a good reason, I'd like to make BagAggregate
   inherit from Collection.

b) currently, entries is completely redundant, although only defined for
   IndexedAggregate. I'm thinking of making renaming parts$HOAGG to
   entries$HOAGG.  Then, parts would be reserved to yield a list from which we
   can reconstruct the aggregate.  I would also like to make ARRAY2 (and
   therefore Matrix) a Collection of its rows.  Then

   "entries m" would return all entries, since Matrix R is a HOAGG R
   "parts m"   would return the rows, since Matrix R is CLAGG Row

   "entries(m)@List(Row)" would also return the rows, of course, since any
                          CLAGG X is also a HOAGG X.  But the interpreter
                          "prefers R over List Row, which proves convenient
                          here.

c) Maybe we could make CLAGG R have KOERCE List R.  After all, the list and the
   aggregate can be transformed into each other without loss of information.

   In fact, I do not understand KOERCE very well currently.  I only found
   exports KOERCE OUTFORM and KOERCE Boolean, the latterfrom Equation.
   Wouldn't it make sense to make all these individual coerce's "categorial"?

d) Currently, List is often used even when we know we are dealing with
   Sets. This can even incur a speed penalty: member? in a List is necessarily
   slower than member? in a Set, as long as the elements can be ordered.
   However, we need some more functionality in Set: for example a non-checking
   variant of "set" that takes a sorted list with no duplicates and returns a
   set.  But this has to be done very carefully.

I can't wait to hear some comments!

Martin

I attach only aggcat.spad.pamphlet, the other changes are not very interesting,
I believe.


--=-=-=

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
WnQU/AsoF43W/NToT+ud/w0wuGNL04cBAA==
--=-=-=--

\start
Date: Mon, 17 Mar 2008 15:23:20 -0400
From: Bill Page
To: Martin Rubey
Subject: prototypes (was:[axiom-mail] Declare variable	type within function)

> > "Bill Page" writes:
> > > Angelos Mantzaflaris wrote:
> > > >  But I can play tricks like this:
> > > >
> > > >  foo(x)==
> > > >         L:=[x.1-x.1]
> > > >         L:= append(L,x)
> > > >         return L
> > > >
> >
> > > Although you might still consider it a "trick" I would suggest
> > > the following code that I think is more transparent:
>  >  >
>  >  >   foo(x)==
>  >  >          L:=select(a+->false,x)
>  >  >          L:= append(L,x)
>  >
>  >
> On 17 Mar 2008 17:27:26 +0100, Martin Rubey wrote:
> > Angelos' trick is better: select would have to consider every
> > element of x...
> >
>
On 3/17/08, Bill Page wrote:

> Define "better". I said it was more "transparent".
>
> ...
>
>  >  But maybe you like
>  >
>  >    foo(x)==
>  >           L:= if empty? x then x else rest [first x]
>  >           L:= append(L,x)
>  >
>
> You are joking, right?  :-) ... what you wrote seems horribly
> obscure to me.
>

Ok, I do agree that it is more efficient then 'select'.

>
> >  The best way to go forward is of course to make type inference
> > better. (And I do believe that it's already quite OK, contrary to Bill)
> >
>
>
> I agree it should be better but I think making it better without
>  changing the whole underlying philosophy could be very difficult.
>  (Think about Haskell as an example of a strongly typed language
> with much better type inference.). And as you know there are
> some cases where Axiom produces some spectacularly unexpected
> results for the new user ... Probably some of these cases could be
> prevented by a careful re-design of the system of coercions available
> by default to the axiom interpreter, but then one might risk also
> further weakening the set of inferences that are possible.  (I guess
> this is a subject best continued on the developer list...)
>

Thus ...

Martin, I think that this question and the examples might suggest that
in general there is a need for object constructor functions that take
*prototypes* as parameters instead of being just nullary functions.
E.g. in List we have

  empty()

which in the interpreter we would have to explicitly package call like:

  L:List(Integer) := [1,2,3]
  ...
  E:=empty()$List(Integer)

even though our intention might be just to create E as an object of
the same type as L whatever the type of L happens to be.

But if the domains in AGG also exported the following unary operator:

  with ...
    empty(x:%)->%

  == add
  empty(x:%):% == empty()$%

then in the interpreter we could simply write:

  L:List Integer := [1,2,3]
  eL:=empty(L)

  S:String := "1,2,3"
  eS:=empty(S)

  etc.

where L is the "prototype" for the list we intend to create. The
interpreter should be able to find the correct 'empty' operator simply
by applying it's usual function selection rules.

There are other functions that might similarly benefit by the use of
prototypes. E.g. 0(zero) and 1(one) for domains in RING.

\start
Date: Tue, 18 Mar 2008 00:43:06 -0600
From: Tim Daly
To: list
Subject: 20080317.01.tpd.patch (CATS verification)

This patch checks the results given by Axiom against the results 
given by Maple for portions of the differential equation test suite, kamke2.

Tim

=======================================================================
diff --git a/changelog b/changelog
index 06f1da0..1a10e31 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080317 tpd src/input/kamke2.input check results using Maple
 20080316 tpd src/input/kamke2.input check results using Mathematica.
 20080316 acr src/algebra/mathml.spad invisibletimes == <mspace width=0.3em>
 20080314 tpd Makefile --enable-maxpage=512*1024 due to kamke2
diff --git a/src/input/kamke2.input.pamphlet b/src/input/kamke2.input.pamphlet
index 7d31b41..c7bf2ba 100644
--- a/src/input/kamke2.input.pamphlet
+++ b/src/input/kamke2.input.pamphlet
@@ -50,8 +50,12 @@ ode101 := x*D(y(x),x) + x*y(x)**2 - y(x)
 --E 4
 
 @
+Maple gives
+$$\frac{2x}{x^2+2\_C1}$$
+which can be substituted and simplifies to 0.
+
 Mathematica gives
-$$y(x)=\frac{2*x}{x^2+2}$$
+$$y(x)=\frac{2x}{x^2+2}$$
 which can be substituted and simplifies to 0.
 <<*>>=
 --S 5 of 131
@@ -86,6 +90,10 @@ ode102 := x*D(y(x),x) + x*y(x)**2 - y(x) - a*x**3
 --E 7
 
 @
+Maple gives
+$$\tanh(\left(\frac{x^2\sqrt{a}}{2}+\_C1\sqrt{a}\right)x\sqrt{a}$$
+which, upon substitution, simplifies to 0.
+
 Mathematica gives
 $$\sqrt{a}~x~
 \tanh\left(\frac{1}{2}\left(\sqrt{a}~x^2+2\sqrt{a}~C[1]\right)\right)$$
@@ -214,6 +222,11 @@ ode103 := x*D(y(x),x) + x*y(x)**2 - (2*x**2+1)*y(x) - x**3
 --E 10
 
 @
+Maple gives
+$$\frac{1}{2}x\left(\sqrt{2}+
+2\tanh\left(\frac{(x^2+x\_C1)\sqrt{2}}{2}\right)\right)\sqrt{2}$$
+which simplifies to 0 on substitution.
+
 Mathematica gives
 $$\frac{\left(e^{\sqrt{x}~x^2}+\sqrt{2}~e^{\sqrt{2}~x^2}+
 e^{2\sqrt{2}~C[1]}-\sqrt{2}~e^{2\sqrt{2}~C[1]}\right)x}
@@ -295,6 +308,14 @@ ode104 := x*D(y(x),x) + a*x*y(x)**2 + 2*y(x) + b*x
 --E 13
 
 @
+Maple gets:
+$$-\frac{\sqrt{x(a+b)}
+\left(\_C1~{\rm BesselY}\left(3,2\sqrt{x(a+b)}\right)+
+{\rm BesselJ}\left(2,2\sqrt{x(a+b)}\right)\right)}
+{\_C1~{\rm BesselY}\left(2,2\sqrt{x(a+b)}\right)+
+{\rm BesselJ}\left(2,2\sqrt{x(a+b)}\right)}$$
+which simplifies to 0 on substitution.
+
 Mathematica gets:
 $$-\frac{1}{ax}-\sqrt{\frac{b}{a}}~\tan\left(a\sqrt{\frac{b}{a}}~x-C[1]\right)$$
 but cannot simplify the substitution to 0.
@@ -419,8 +440,19 @@ ode106 := x*D(y(x),x) + x**a*y(x)**2 + (a-b)*y(x)/2 + x**b
 --E 18
 
 @
+Maple gets
+$$-\frac{\tan\left(
+\frac{\displaystyle 2x^{\left(\displaystyle
+\frac{a}{2}+\frac{b}{2}\right)}+\displaystyle\_C1~a+\_C1~b}
+{\displaystyle a+b}\right)}
+{x^{\left(\displaystyle{\frac{a}{2}-\displaystyle\frac{b}{2}}\right)}}$$
+which simplifies to 0 on substitution.
+
+
 Mathematica gets
-$$e^{-\frac{1}{2}a\log(x)+\frac{1}{2}b\log(x)}\tan\left(\frac{2x^{\frac{a+b}{2}}}{a+b}-C[1]\right)$$
+$$e^{-\frac{1}{2}a\log(x)+\frac{1}{2}b\log(x)}
+\tan\left(\frac{2x^{\frac{a+b}{2}}}{a+b}-C[1]\right)$$
+which does not simplify to 0 on substitution.
 <<*>>=
 --S 19 of 131
 yx:=solve(ode106,y,x)
@@ -454,6 +486,10 @@ ode108 := x*D(y(x),x) - y(x)**2*log(x) + y(x)
 --R                                                     Type: Expression Integer
 --E 22
 @
+Maple gets:
+$$\frac{1}{1+\log(x)+x\_C1}$$
+which, on substitution, simplifies to 0.
+
 Mathematica gets:
 $$\frac{1}{1+xC[1]+\log(x)}$$
 which, on substitution, simplifies to 0.
@@ -493,6 +529,11 @@ ode109 := x*D(y(x),x) - y(x)*(2*y(x)*log(x)-1)
 --E 25
 
 @
+Maple gets:
+$$\frac{1}{2+2\log(x)+x~\_C1}$$
+which simplifies to 0 on substitition.
+
+
 Mathematica gets
 $$\frac{1}{2+xC[1]+2\log(x)}$$
 which simplifies to 0 on substitution.
@@ -547,6 +588,10 @@ ode111 := x*D(y(x),x) + y(x)**3 + 3*x*y(x)**2
 --R                                                     Type: Expression Integer
 --E 30
 
+@
+Maple gets 0 which simplifies to 0 on substitution.
+<<*>>=
+
 --S 31 of 131
 yx:=solve(ode111,y,x)
 --R
@@ -554,6 +599,10 @@ yx:=solve(ode111,y,x)
 --R                                                    Type: Union("failed",...)
 --E 31
 
+@
+Maple gets 0 but simplification gives the result $csgn(x)x$.
+<<*>>=
+
 --S 32 of 131
 ode112 := x*D(y(x),x) - sqrt(y(x)**2 + x**2) - y(x)
 --R
@@ -582,6 +631,8 @@ ode113 := x*D(y(x),x) + a*sqrt(y(x)**2 + x**2) - y(x)
 --E 34
 
 @
+Maple gets 0 but on substitition this simplifies to $a~csgn(x)~x$
+
 Mathematica gets
 $$x*\sinh(C[1]+\log(x))$$
 If we choose $C[1]=0$ this simplifies to 
@@ -606,6 +657,8 @@ ode114 := x*D(y(x),x) - x*sqrt(y(x)**2 + x**2) - y(x)
 --E 36
 
 @
+Maple gets 0 but, on substitition, simplifies to $-x^2csqn(x)$.
+
 Mathematica gets
 $$x\sinh(x+C[1])$$
 but cannot simplify the substituted expression to 0.
@@ -628,6 +681,9 @@ ode115 := x*D(y(x),x) - x*(y(x)-x)*sqrt(y(x)**2 + x**2) - y(x)
 --E 38
 
 @
+Maple claims the result is 0 but simplifies it, on substitution, to
+$x^3 csgn(x)$.
+
 Mathematica claims that the equations appear to involve the variables
 to be solved for in an essentially non-algebraic way.
 <<*>>=
@@ -649,6 +705,9 @@ ode116 := x*D(y(x),x) - x*sqrt((y(x)**2 - x**2)*(y(x)**2-4*x**2)) - y(x)
 --E 40
 
 @
+Maple claims the answer is 0 but simplifies, on substitution, to
+$-2x^3 csgn(x^2)$.
+
 Mathematica says that a potential solution of ComplexInfinity was possibly
 discarded by the verifier and should be checked by hand, possibly using
 limits. And the equations appear to involve the variables to be solved
@@ -673,6 +732,10 @@ ode117 := x*D(y(x),x) - x*exp(y(x)/x) - y(x) - x
 --E 42
 
 @
+Maple gets:
+$$\left(\log\left(-\frac{x}{-1+x~e^{\_C1}}\right)+\_C1\right)x$$
+which simplifies to 0 on substitution.
+
 Mathematica says that inverse functions are being used by Solve, so some
 solutions may not be found and to use Reduce for complete solution
 information. It gets the answer:
@@ -696,6 +759,10 @@ ode118 := x*D(y(x),x) - y(x)*log(y(x))
 --E 44
 
 @
+Maple gets
+$$e^{(x~\_C1)}$$
+which, on substitution, does not simplify to 0.
+
 Mathematics gets
 $$e^{e^{C[1]}x}$$
 which, on substitution simplifies to 
@@ -733,6 +800,10 @@ ode119 := x*D(y(x),x) - y(x)*(log(x*y(x))-1)
 --E 47
 
 @
+Maple get
+$$\frac{e^{\left(\frac{x}{\_C1}\right)}}{x}$$
+which, on substitution, does not simplify to 0.
+
 Mathematica gets
 $$\frac{1}{x(C[1]-log(log(x)))}$$
 which does not simplify to 0 on substitution.
@@ -755,8 +826,13 @@ ode120 := x*D(y(x),x) - y(x)*(x*log(x**2/y(x))+2)
 --E 49
 
 @
+Maple gets
+$$\frac{x^2}{e^{\left(\frac{\_C1}{e^x}\right)}}$$
+which, on substitution, does not simplify to 0.
+
 Mathematics get:
 $$2e^{-e^{-x} C[1]+e^{-x}{\rm ExpIntegralEi}[x]}x$$
+which does not simplify to 0 on substitution.
 <<*>>=
 --S 50 of 131
 yx:=solve(ode120,y,x)
@@ -777,6 +853,7 @@ ode121 := x*D(y(x),x) + sin(y(x)-x)
 @
 Mathematics gets
 $$\frac{\sin(x)}{1+\sin(x)}+x^{-sin(x)}C[1]$$
+which, on substitution, does not simplify to 0.
 <<*>>=
 --S 52 of 131
 yx:=solve(ode121,y,x)
@@ -795,6 +872,10 @@ ode122 := x*D(y(x),x) + (sin(y(x))-3*x**2*cos(y(x)))*cos(y(x))
 --E 53
 
 @
+Maple gets:
+$$\arctan\left(\frac{x^3+2~\_C1}{x}\right)$$
+which, on substitution, simplifies to 0.
+
 Mathematica gets:
 $$\arctan\left(\frac{2x^3+C[1]}{2x}\right)$$
 which, on substitution, simplifies to 0.
@@ -816,6 +897,11 @@ ode123 := x*D(y(x),x) - x*sin(y(x)/x) - y(x)
 --E 55
 
 @
+Maple gets:
+$$\arctan\left(\frac{2x~\_C1}{1+x^2~\_C1^2}\quad,\quad
+-\frac{-1+x^2~\_C1^2}{1+x^2~\_C1^2}\right)x$$
+which, on substitution, simplifies to 0.
+
 Mathematica get:
 $$x^{1+sin(x)}C[1]$$
 which does not simplfy to 0 on substitution.
@@ -837,6 +923,10 @@ ode124 := x*D(y(x),x) + x*cos(y(x)/x) - y(x) + x
 --E 57
 
 @
+Maple gets
+$$-2\arctan(\log(x)+~\_C1)x$$
+which, on substitution, does not simplify to 0.
+
 Mathematics gets
 $$2x\arctan(C[1]-\log(x))$$
 which does not simplify to 0 on substitution.
@@ -858,6 +948,10 @@ ode125 := x*D(y(x),x) + x*tan(y(x)/x) - y(x)
 --E 59
 
 @
+Maple gets
+$$\arcsin\left(\frac{1}{x~\_C1}\right)x$$
+which, on substitution, simplifies to 0.
+
 Mathematica gets
 $$\arcsin\left(\frac{e^{C[1]}}{x}\right)$$
 which does not simplify to 0 on substitution.
@@ -879,6 +973,11 @@ ode126 := x*D(y(x),x) - y(x)*f(x*y(x))
 --E 61
 
 @
+Maple gets
+$$\frac{{\rm RootOf}\left(-\log(x)+~\_C1+
+\displaystyle\int^{\_Z}{\frac{1}{\displaystyle\_a(1+g(\_a))}}~d\_a\right)}{x}$$
+which, on substitution, simplifies to 0.
+
 Mathematica gets
 $$\frac{1}{-f(x)-C[1]}$$
 which does not simplify to 0 on substitution.
@@ -899,8 +998,11 @@ ode127 := x*D(y(x),x) - y(x)*f(x**a*y(x)**b)
 --R                                                     Type: Expression Integer
 --E 63
 @
+Maple gives 0 which, on substitution simplifies to 0.
+
 Mathematica gives:
 $$b\left(-\frac{f(x^a)}{a}-C[1]\right)^{-1/b}$$
+which, on substitution, does not simplify to 0.
 <<*>>=
 --S 64 of 131
 yx:=solve(ode127,y,x)
@@ -918,8 +1020,14 @@ ode128 := x*D(y(x),x) + a*y(x) - f(x)*g(x**a*y(x))
 --R                                                     Type: Expression Integer
 --E 65
 @
+Maple gives 
+$$\frac{{\rm RootOf}\left(
+-\int{f(x)x^{(-1+a)}}~dx+\int^{\_Z}{\frac{1}{g(\_a)}~d\_a+\_C1}\right)}{x^a}$$
+which, on substitution, gives 0.
+
 Mathematica gives 
 $$e^{\frac{f(x)g(x^{1+a})}{1+a}-a\log(x)}C[1]$$
+which, on substitution, does not simplify to 0.
 <<*>>=
 --S 66 of 131
 yx:=solve(ode128,y,x)
@@ -937,6 +1045,11 @@ ode129 := (x+1)*D(y(x),x) + y(x)*(y(x)-x)
 --R                                                     Type: Expression Integer
 --E 67
 @
+Maple gives
+$$\frac{e^x}
+{-e^x-e^{(-1)}{\rm Ei}(1,-x-1)x-e^{(-1)}{\rm Ei}(1,-x-1)+x~\_C1+~\_C1}$$
+which, on substitution, simplifies to 0.
+
 Mathematica gives
 $$-\frac{e^{1+x}}{e^{1+x}-eC[1]-exC[1]-{\rm ExpIntegralEi}(1+x)-
 x{\rm ExpIntegralEi}(1+x)}$$
@@ -964,6 +1077,10 @@ ode130 := 2*x*D(y(x),x) - y(x) -2*x**3
 --R                                                     Type: Expression Integer
 --E 69
 @
+Maple gives
+$$\frac{2x^3}{5}+\sqrt{x}~\_C1$$
+which, on substitution, simplifies to 0.
+
 Mathematica gives
 $$\frac{2x^3}{5}+\sqrt{x}C[1]$$
 which simplifies to 0 on substitution.
@@ -1004,6 +1121,10 @@ ode131 := (2*x+1)*D(y(x),x) - 4*exp(-y(x)) + 2
 --R                                                     Type: Expression Integer
 --E 73
 @
+Maple gives
+$$-\log\left(\frac{2x+1}{-1+4xe^{(2~\_C1)}+2e^{(2~\_C1)}}\right)-2~\_C1$$
+which simplifies to 0 when substituted.
+
 Mathematica gives
 $$\log\left(2+\frac{1}{1+2x}\right)$$
 which simplifies to 0 when substituted.
@@ -1039,6 +1160,22 @@ ode132 := 3*x*D(y(x),x) - 3*x*log(x)*y(x)**4 - y(x)
 --R                                                     Type: Expression Integer
 --E 76
 @
+Maple gives 3 solutions.
+$$\frac{\left(-4x(6x^2\log(x)-3x^2-4~\_C1)^2\right)^{(1/3)}}
+{6x^2\log(x)-3*x^2-4~\_C1}$$
+$$-\frac{1}{2}\frac{\left(-4x(6x^2\log(x)-3x^2-4~\_C1)^2\right)^{(1/3)}}
+{6x^2\log(x)-3*x^2-4~\_C1}
++\frac{1}{2}I\sqrt{3}
+\frac{\left(-4x(6x^2\log(x)-3x^2-4~\_C1)^2\right)^{(1/3)}}
+{6x^2\log(x)-3*x^2-4~\_C1}$$
+$$-\frac{1}{2}\frac{\left(-4x(6x^2\log(x)-3x^2-4~\_C1)^2\right)^{(1/3)}}
+{6x^2\log(x)-3*x^2-4~\_C1}
+-\frac{1}{2}I\sqrt{3}
+\frac{\left(-4x(6x^2\log(x)-3x^2-4~\_C1)^2\right)^{(1/3)}}
+{6x^2\log(x)-3*x^2-4~\_C1}$$
+which, on substitution, simplifies to 0.
+
+
 Mathematica gives 3 solutions,
 $$\frac{(-2)^{2/3}x^{1/3}}{(3x^2+4C[1]-6x^2\log(x))^{1/3}}$$
 $$\frac{( 2)^{2/3}x^{1/3}}{(3x^2+4C[1]-6x^2\log(x))^{1/3}}$$
@@ -1098,6 +1235,10 @@ ode133 := x**2*D(y(x),x) + y(x) - x
 --R                                                     Type: Expression Integer
 --E 79
 @
+Maple gives
+$$\left({\rm Ei}\left(1,\frac{1}{x}\right)+~\_C1\right)e^{(\frac{1}{x})}$$
+which simplifies to 0 on substitution.
+
 Mathematica gets:
 $$e^{1/x}C[1]-e^{1/x}{\rm ExpIntegralEi}\left(-\frac{1}{x}\right)$$
 which simplifies to 0 on substitution.
@@ -1128,6 +1269,10 @@ ode134 := x**2*D(y(x),x) - y(x) + x**2*exp(x-1/x)
 --R                                                     Type: Expression Integer
 --E 81
 @
+Maple gets
+$$(-e^x+~\_C1)e^{\left(-\frac{1}{x}\right)}$$
+which simplifies to 0 on substitution.
+
 Mathematics get
 $$-e^{-\frac{1}{x}+x}+e^{-1/x}C[1]$$
 which does not simplify to 0 on substitution.
@@ -1174,6 +1319,10 @@ ode135 := x**2*D(y(x),x) - (x-1)*y(x)
 --R                                                     Type: Expression Integer
 --E 85
 @
+Maple gets
+$$\_C1xe^{\left(\frac{1}{x}\right)}$$
+which simplifies to 0 when substituted.
+
 Mathematica gets 
 $$e^{1/x}xC[1]$$
 which simplifies to 0 when substituted.
@@ -1211,6 +1360,10 @@ ode136 := x**2*D(y(x),x) + y(x)**2 + x*y(x) + x**2
 --R                                                     Type: Expression Integer
 --E 89
 @
+Maple gets
+$$-\frac{x(-1+\log(x)+~\_C1)}{\log(x)+~\_C1}$$
+which simplifies to 0 on substitution.
+
 Mathematica gets
 $$\frac{-x-xC[1]+x\log(x)}{C[1]-\log(x)}$$
 which simplifies to 0 on substition.
@@ -1252,6 +1405,10 @@ ode137 := x**2*D(y(x),x) - y(x)**2 - x*y(x)
 --R                                                     Type: Expression Integer
 --E 92
 @
+Maple gets:
+$$\frac{x}{-\log(x)+~\_C1}$$
+which simplifies to 0 on substitution.
+
 Mathematica gets:
 $$\frac{x}{C[1]-\log(x)}$$
 which simplifies to 0 on substitution.
@@ -1276,11 +1433,7 @@ ode137expr := x**2*D(yx,x) - yx**2 - x*yx
 --R                                         y(x)
 --R                                                     Type: Expression Integer
 --E 94
-@
-Mathematica get:
-$$x\tan(C[2]+\log(x))$$
-which simplifies to 0 when substituted.
-<<*>>=
+
 --S 95 of 131
 ode138 := x**2*D(y(x),x) - y(x)**2 - x*y(x) - x**2
 --R
@@ -1289,6 +1442,15 @@ ode138 := x**2*D(y(x),x) - y(x)**2 - x*y(x) - x**2
 --R
 --R                                                     Type: Expression Integer
 --E 95
+@
+Maple gets
+$$\tan(\log(x)+~\_C1)x$$
+which simplifies to 0 on substitution.
+
+Mathematica get:
+$$x\tan(C[2]+\log(x))$$
+which simplifies to 0 when substituted.
+<<*>>=
 
 --S 96 of 131
 yx:=solve(ode138,y,x)
@@ -1367,11 +1529,7 @@ yx:=solve(ode139,y,x)
 --R   (99)  "failed"
 --R                                                    Type: Union("failed",...)
 --E 99
-@
-Mathematica gets:
-$$-\frac{2}{x}+\frac{1}{x+C[1]}$$
-which does not simplify.
-<<*>>=
+
 --S 100 of 131
 ode140 := x**2*(D(y(x),x)+y(x)**2) + 4*x*y(x) + 2
 --R
@@ -1380,7 +1538,15 @@ ode140 := x**2*(D(y(x),x)+y(x)**2) + 4*x*y(x) + 2
 --R
 --R                                                     Type: Expression Integer
 --E 100
+@
+Maple gets
+$$-\frac{-2~\_C1+x}{x(-~\_C1+x)}$$
+which simplifies to 0 when substituted.
 
+Mathematica gets:
+$$-\frac{2}{x}+\frac{1}{x+C[1]}$$
+which does not simplify.
+<<*>>=
 --S 101 of 131
 yx:=solve(ode140,y,x)
 --R
@@ -1736,6 +1902,9 @@ ode145 := x**2*D(y(x),x) + a*y(x)**3 - a*x**2*y(x)**2
 --R                                                     Type: Expression Integer
 --E 114
 
+@
+Maple claims the result is 0, which when substituted, simplifies to 0
+<<*>>=
 --S 115 of 131
 yx:=solve(ode145,y,x)
 --R
@@ -1752,6 +1921,9 @@ ode146 := x**2*D(y(x),x) + x*y(x)**3 + a*y(x)**2
 --R                                                     Type: Expression Integer
 --E 116
 
+@
+Maple gets 0 which, when substituted, simplifies to 0.
+<<*>>=
 --S 117 of 131
 yx:=solve(ode146,y,x)
 --R
@@ -1767,18 +1939,16 @@ ode147 := x**2*D(y(x),x) + a*x**2*y(x)**3 + b*y(x)**2
 --R
 --R                                                     Type: Expression Integer
 --E 118
-
+@
+Maple gets 0 which, when substituted, results in 0.
+<<*>>=
 --S 119 of 131
 yx:=solve(ode147,y,x)
 --R
 --R   (119)  "failed"
 --R                                                    Type: Union("failed",...)
 --E 119
-@
-Mathematica gets
-$$\frac{{\rm arcsinh}(x)}{\sqrt{1+x^2}}+\frac{C[1]}{\sqrt{1+x^2}}$$
-gives 0 when substituted.
-<<*>>=
+
 --S 120 of 131
 ode148 := (x**2+1)*D(y(x),x) + x*y(x) - 1
 --R
@@ -1787,7 +1957,15 @@ ode148 := (x**2+1)*D(y(x),x) + x*y(x) - 1
 --R
 --R                                                     Type: Expression Integer
 --E 120
+@
+Maple gets
+$$\frac{{\rm arcsinh}(x)+~\_C1}{\sqrt{x^2+1}}$$
+which when substituted, simplifies to 0.
 
+Mathematica gets
+$$\frac{{\rm arcsinh}(x)}{\sqrt{1+x^2}}+\frac{C[1]}{\sqrt{1+x^2}}$$
+gives 0 when substituted.
+<<*>>=
 --S 121 of 131
 ode148a:=solve(ode148,y,x)
 --R
@@ -1820,11 +1998,7 @@ ode148expr := (x**2+1)*D(yx,x) + x*yx - 1
 --R   (123)  0
 --R                                                     Type: Expression Integer
 --E 123
-@
-Mathematica gets
-$$\frac{1}{3}(1+x^2)+\frac{C[1]}{\sqrt{1+x^2}}$$
-which simplifes to 0 when substituted.
-<<*>>=
+
 --S 124 of 131
 ode149 := (x**2+1)*D(y(x),x) + x*y(x) - x*(x**2+1)
 --R
@@ -1833,7 +2007,15 @@ ode149 := (x**2+1)*D(y(x),x) + x*y(x) - x*(x**2+1)
 --R
 --R                                                     Type: Expression Integer
 --E 124
+@
+Maple gets
+$$\frac{x^2}{3}+\frac{1}{3}+\frac{\_C1}{\sqrt{x^2+1}}$$
+which simplifies to 0 when substituted.
 
+Mathematica gets
+$$\frac{1}{3}(1+x^2)+\frac{C[1]}{\sqrt{1+x^2}}$$
+which simplifes to 0 when substituted.
+<<*>>=
 --S 125 of 131
 ode149a:=solve(ode149,y,x)
 --R
@@ -1863,11 +2045,6 @@ ode149expr := (x**2+1)*D(yx,x) + x*yx - x*(x**2+1)
 --R                                                     Type: Expression Integer
 --E 127
 
-@
-Mathematica gets:
-$$\frac{2x^3}{3(1+x^2)}+\frac{C[1]}{1+x^2}$$
-which simplifies to 0 on substitution.
-<<*>>=
 --S 128 of 131
 ode150 := (x**2+1)*D(y(x),x) + 2*x*y(x) - 2*x**2
 --R
@@ -1876,6 +2053,15 @@ ode150 := (x**2+1)*D(y(x),x) + 2*x*y(x) - 2*x**2
 --R
 --R                                                     Type: Expression Integer
 --E 128
+@
+Maple gets
+$$\frac{\frac{2x^3}{3}+~\_C1}{x^2+1}$$
+which simplifies to 0 on substitution.
+
+Mathematica gets:
+$$\frac{2x^3}{3(1+x^2)}+\frac{C[1]}{1+x^2}$$
+which simplifies to 0 on substitution.
+<<*>>=
 
 --S 129 of 131
 ode150a:=solve(ode150,y,x)
@@ -1913,5 +2099,6 @@ ode150expr := (x**2+1)*D(yx,x) + 2*x*yx - 2*x**2
 \begin{thebibliography}{99}
 \bibitem{1} {\bf http://www.cs.uwaterloo.ca/$\tilde{}$ecterrab/odetools.html}
 \bibitem{2} Mathematica 6.0.1.0
+\bibitem{3} Maple 11.01 Build ID 296069
 \end{thebibliography}
 \end{document}

\start
Date: Wed, 19 Mar 2008 00:04:24 -0600
From: Tim Daly
To: list
Subject: 20080318.01.tpd.patch (CATS verification)

Check the kamke2 results using Maxima

Tim

=========================================================================
diff --git a/changelog b/changelog
index 1a10e31..4921b44 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080318 tpd src/input/kamke2.input check results using Maxima
 20080317 tpd src/input/kamke2.input check results using Maple
 20080316 tpd src/input/kamke2.input check results using Mathematica.
 20080316 acr src/algebra/mathml.spad invisibletimes == <mspace width=0.3em>
diff --git a/src/input/kamke2.input.pamphlet b/src/input/kamke2.input.pamphlet
index c7bf2ba..0419904 100644
--- a/src/input/kamke2.input.pamphlet
+++ b/src/input/kamke2.input.pamphlet
@@ -40,6 +40,7 @@ g:=operator 'g
 --R                                                          Type: BasicOperator
 --E 3
 
+-------------------------------------------------------------------
 --S 4 of 131
 ode101 := x*D(y(x),x) + x*y(x)**2 - y(x)
 --R
@@ -50,6 +51,9 @@ ode101 := x*D(y(x),x) + x*y(x)**2 - y(x)
 --E 4
 
 @
+Maxima gives $$\frac{2x}{x^2-2\%c}$$ 
+which can be substituted and simplifies to 0.
+
 Maple gives
 $$\frac{2x}{x^2+2\_C1}$$
 which can be substituted and simplifies to 0.
@@ -80,6 +84,7 @@ ode101expr := x*D(yx,x) + x*yx**2 - yx
 --R                                                     Type: Expression Integer
 --E 6
 
+-------------------------------------------------------------------
 --S 7 of 131
 ode102 := x*D(y(x),x) + x*y(x)**2 - y(x) - a*x**3
 --R
@@ -90,6 +95,8 @@ ode102 := x*D(y(x),x) + x*y(x)**2 - y(x) - a*x**3
 --E 7
 
 @
+Maxima fails.
+
 Maple gives
 $$\tanh(\left(\frac{x^2\sqrt{a}}{2}+\_C1\sqrt{a}\right)x\sqrt{a}$$
 which, upon substitution, simplifies to 0.
@@ -212,6 +219,7 @@ ode102expr := x*D(yx,x) + x*yx**2 - yx - a*x**3
 --R                                                     Type: Expression Integer
 --E 9
 
+-------------------------------------------------------------------
 --S 10 of 131
 ode103 := x*D(y(x),x) + x*y(x)**2 - (2*x**2+1)*y(x) - x**3
 --R
@@ -222,6 +230,8 @@ ode103 := x*D(y(x),x) + x*y(x)**2 - (2*x**2+1)*y(x) - x**3
 --E 10
 
 @
+Maxima fails.
+
 Maple gives
 $$\frac{1}{2}x\left(\sqrt{2}+
 2\tanh\left(\frac{(x^2+x\_C1)\sqrt{2}}{2}\right)\right)\sqrt{2}$$
@@ -298,6 +308,7 @@ ode103expr := x*D(yx,x) + x*yx**2 - (2*x**2+1)*yx - x**3
 --R                                                     Type: Expression Integer
 --E 12
 
+-------------------------------------------------------------------
 --S 13 of 131
 ode104 := x*D(y(x),x) + a*x*y(x)**2 + 2*y(x) + b*x
 --R
@@ -308,6 +319,8 @@ ode104 := x*D(y(x),x) + a*x*y(x)**2 + 2*y(x) + b*x
 --E 13
 
 @
+Maxima fails.
+
 Maple gets:
 $$-\frac{\sqrt{x(a+b)}
 \left(\_C1~{\rm BesselY}\left(3,2\sqrt{x(a+b)}\right)+
@@ -403,6 +416,7 @@ ode104expr := x*D(yx,x) + a*x*yx**2 + 2*yx + b*x
 --R                                                     Type: Expression Integer
 --E 15
 
+-------------------------------------------------------------------
 --S 16 of 131
 ode105 := x*D(y(x),x) + a*x*y(x)**2 + b*y(x) + c*x + d
 --R
@@ -413,6 +427,8 @@ ode105 := x*D(y(x),x) + a*x*y(x)**2 + b*y(x) + c*x + d
 --E 16
 
 @
+Maxima fails.
+
 Note that this complains about being unable to factor
 $$x^3-3x^2+(-b^2+2b+2)x+b^2-2b$$
 but MMA factors this instantly to be:
@@ -428,6 +444,7 @@ yx:=solve(ode105,y,x)
 --R                                                    Type: Union("failed",...)
 --E 17
 
+-------------------------------------------------------------------
 --S 18 of 131
 ode106 := x*D(y(x),x) + x**a*y(x)**2 + (a-b)*y(x)/2 + x**b
 --R
@@ -440,6 +457,8 @@ ode106 := x*D(y(x),x) + x**a*y(x)**2 + (a-b)*y(x)/2 + x**b
 --E 18
 
 @
+Maxima fails.
+
 Maple gets
 $$-\frac{\tan\left(
 \frac{\displaystyle 2x^{\left(\displaystyle
@@ -461,6 +480,7 @@ yx:=solve(ode106,y,x)
 --R                                                    Type: Union("failed",...)
 --E 19
 
+-------------------------------------------------------------------
 --S 20 of 131
 ode107 := x*D(y(x),x) + a*x**alpha*y(x)**2 + b*y(x) - c*x**beta
 --R
@@ -470,6 +490,9 @@ ode107 := x*D(y(x),x) + a*x**alpha*y(x)**2 + b*y(x) - c*x**beta
 --R                                                     Type: Expression Integer
 --E 20
 
+@
+Maxima fails.
+<<*>>=
 --S 21 of 131
 yx:=solve(ode107,y,x)
 --R
@@ -477,6 +500,7 @@ yx:=solve(ode107,y,x)
 --R                                                    Type: Union("failed",...)
 --E 21
 
+-------------------------------------------------------------------
 --S 22 of 131
 ode108 := x*D(y(x),x) - y(x)**2*log(x) + y(x)
 --R
@@ -486,6 +510,10 @@ ode108 := x*D(y(x),x) - y(x)**2*log(x) + y(x)
 --R                                                     Type: Expression Integer
 --E 22
 @
+Maxima gets:
+$$\frac{1}{x\left(\frac{\log(x)}{x}+\frac{1}{x}+\%c\right)}$$
+which does not simplify on substitution.
+
 Maple gets:
 $$\frac{1}{1+\log(x)+x\_C1}$$
 which, on substitution, simplifies to 0.
@@ -519,6 +547,7 @@ ode108expr := x*D(yx,x) - yx**2*log(x) + yx
 --R                                                     Type: Expression Integer
 --E 24
 
+-------------------------------------------------------------------
 --S 25 of 131
 ode109 := x*D(y(x),x) - y(x)*(2*y(x)*log(x)-1)
 --R
@@ -529,11 +558,14 @@ ode109 := x*D(y(x),x) - y(x)*(2*y(x)*log(x)-1)
 --E 25
 
 @
+Maxima gets:
+$$\frac{1}{x\left(\%c-2\left(-\frac{\log(x)}{x}-\frac{1}{x}\right)\right)}$$
+which does not simplify to 0 on substitution.
+
 Maple gets:
 $$\frac{1}{2+2\log(x)+x~\_C1}$$
 which simplifies to 0 on substitition.
 
-
 Mathematica gets
 $$\frac{1}{2+xC[1]+2\log(x)}$$
 which simplifies to 0 on substitution.
@@ -563,6 +595,7 @@ ode109expr := x*D(yx,x) - yx*(2*yx*log(x)-1)
 --R                                                     Type: Expression Integer
 --E 27
 
+-------------------------------------------------------------------
 --S 28 of 131
 ode110 := x*D(y(x),x) + f(x)*(y(x)**2-x**2)
 --R
@@ -572,6 +605,9 @@ ode110 := x*D(y(x),x) + f(x)*(y(x)**2-x**2)
 --R                                                     Type: Expression Integer
 --E 28
 
+@
+Maxima failed.
+<<*>>=
 --S 29 of 131
 yx:=solve(ode110,y,x)
 --R
@@ -579,6 +615,7 @@ yx:=solve(ode110,y,x)
 --R                                                    Type: Union("failed",...)
 --E 29
 
+-------------------------------------------------------------------
 --S 30 of 131
 ode111 := x*D(y(x),x) + y(x)**3 + 3*x*y(x)**2
 --R
@@ -589,6 +626,8 @@ ode111 := x*D(y(x),x) + y(x)**3 + 3*x*y(x)**2
 --E 30
 
 @
+Maxima fails.
+
 Maple gets 0 which simplifies to 0 on substitution.
 <<*>>=
 
@@ -599,10 +638,7 @@ yx:=solve(ode111,y,x)
 --R                                                    Type: Union("failed",...)
 --E 31
 
-@
-Maple gets 0 but simplification gives the result $csgn(x)x$.
-<<*>>=
-
+-------------------------------------------------------------------
 --S 32 of 131
 ode112 := x*D(y(x),x) - sqrt(y(x)**2 + x**2) - y(x)
 --R
@@ -613,6 +649,15 @@ ode112 := x*D(y(x),x) - sqrt(y(x)**2 + x**2) - y(x)
 --R                                                     Type: Expression Integer
 --E 32
 
+@
+Maxima gets
+$$x=\%c \%e^{\displaystyle
+\frac{x {\rm asinh}\left(\frac{y}{x}\right)}{\vert x\vert}}$$
+which does not simplify to 0 on substitution.
+
+Maple gets 0 but simplification gives the result $csgn(x)x$.
+<<*>>=
+
 --S 33 of 131
 yx:=solve(ode112,y,x)
 --R
@@ -620,6 +665,7 @@ yx:=solve(ode112,y,x)
 --R                                                    Type: Union("failed",...)
 --E 33
 
+-------------------------------------------------------------------
 --S 34 of 131
 ode113 := x*D(y(x),x) + a*sqrt(y(x)**2 + x**2) - y(x)
 --R
@@ -631,6 +677,11 @@ ode113 := x*D(y(x),x) + a*sqrt(y(x)**2 + x**2) - y(x)
 --E 34
 
 @
+Maxima gets
+$$x=\%c \%e^{\displaystyle
+-\frac{x {\rm asinh}\left(\frac{y}{x}\right)}{a\vert x\vert}}$$
+which does not simplify to 0 on substitution.
+
 Maple gets 0 but on substitition this simplifies to $a~csgn(x)~x$
 
 Mathematica gets
@@ -646,6 +697,7 @@ yx:=solve(ode113,y,x)
 --R                                                    Type: Union("failed",...)
 --E 35
 
+-------------------------------------------------------------------
 --S 36 of 131
 ode114 := x*D(y(x),x) - x*sqrt(y(x)**2 + x**2) - y(x)
 --R
@@ -657,6 +709,8 @@ ode114 := x*D(y(x),x) - x*sqrt(y(x)**2 + x**2) - y(x)
 --E 36
 
 @
+Maxima fails.
+
 Maple gets 0 but, on substitition, simplifies to $-x^2csqn(x)$.
 
 Mathematica gets
@@ -670,6 +724,7 @@ yx:=solve(ode114,y,x)
 --R                                                    Type: Union("failed",...)
 --E 37
 
+-------------------------------------------------------------------
 --S 38 of 131
 ode115 := x*D(y(x),x) - x*(y(x)-x)*sqrt(y(x)**2 + x**2) - y(x)
 --R
@@ -681,6 +736,8 @@ ode115 := x*D(y(x),x) - x*(y(x)-x)*sqrt(y(x)**2 + x**2) - y(x)
 --E 38
 
 @
+Maxima failed.
+
 Maple claims the result is 0 but simplifies it, on substitution, to
 $x^3 csgn(x)$.
 
@@ -694,6 +751,7 @@ yx:=solve(ode115,y,x)
 --R                                                    Type: Union("failed",...)
 --E 39
 
+-------------------------------------------------------------------
 --S 40 of 131
 ode116 := x*D(y(x),x) - x*sqrt((y(x)**2 - x**2)*(y(x)**2-4*x**2)) - y(x)
 --R
@@ -705,6 +763,8 @@ ode116 := x*D(y(x),x) - x*sqrt((y(x)**2 - x**2)*(y(x)**2-4*x**2)) - y(x)
 --E 40
 
 @
+Maxima failed.
+
 Maple claims the answer is 0 but simplifies, on substitution, to
 $-2x^3 csgn(x^2)$.
 
@@ -720,6 +780,7 @@ yx:=solve(ode116,y,x)
 --R                                                    Type: Union("failed",...)
 --E 41
 
+-------------------------------------------------------------------
 --S 42 of 131
 ode117 := x*D(y(x),x) - x*exp(y(x)/x) - y(x) - x
 --R
@@ -732,6 +793,10 @@ ode117 := x*D(y(x),x) - x*exp(y(x)/x) - y(x) - x
 --E 42
 
 @
+Maxima gets:
+$$\%c~x=\%e^{\displaystyle -\frac{x\log(\%e^{y/x}+1)-y}{x}}$$
+which does not simplify to 0 on substitution.
+
 Maple gets:
 $$\left(\log\left(-\frac{x}{-1+x~e^{\_C1}}\right)+\_C1\right)x$$
 which simplifies to 0 on substitution.
@@ -749,6 +814,7 @@ yx:=solve(ode117,y,x)
 --R                                                    Type: Union("failed",...)
 --E 43
 
+-------------------------------------------------------------------
 --S 44 of 131
 ode118 := x*D(y(x),x) - y(x)*log(y(x))
 --R
@@ -759,6 +825,10 @@ ode118 := x*D(y(x),x) - y(x)*log(y(x))
 --E 44
 
 @
+Maxima gets 
+$$\%e^{\%e^{\%c}x}$$
+which, on substitution, simplifies to 0.
+
 Maple gets
 $$e^{(x~\_C1)}$$
 which, on substitution, does not simplify to 0.
@@ -790,6 +860,7 @@ ode118expr := x*D(yx,x) - yx*log(yx)
 --R                                                     Type: Expression Integer
 --E 46
 
+-------------------------------------------------------------------
 --S 47 of 131
 ode119 := x*D(y(x),x) - y(x)*(log(x*y(x))-1)
 --R
@@ -800,6 +871,12 @@ ode119 := x*D(y(x),x) - y(x)*(log(x*y(x))-1)
 --E 47
 
 @
+$$\frac{1}{x}$$ simplifies to 0.
+
+Maxima gets 
+$$\frac{\%e^{x/\%c}}{x}$$
+which, on substitution, does not simplify to 0.
+
 Maple get
 $$\frac{e^{\left(\frac{x}{\_C1}\right)}}{x}$$
 which, on substitution, does not simplify to 0.
@@ -815,6 +892,7 @@ yx:=solve(ode119,y,x)
 --R                                                    Type: Union("failed",...)
 --E 48
 
+-------------------------------------------------------------------
 --S 49 of 131
 ode120 := x*D(y(x),x) - y(x)*(x*log(x**2/y(x))+2)
 --R
@@ -826,6 +904,8 @@ ode120 := x*D(y(x),x) - y(x)*(x*log(x**2/y(x))+2)
 --E 49
 
 @
+Maxima fails.
+
 Maple gets
 $$\frac{x^2}{e^{\left(\frac{\_C1}{e^x}\right)}}$$
 which, on substitution, does not simplify to 0.
@@ -841,6 +921,7 @@ yx:=solve(ode120,y,x)
 --R                                                    Type: Union("failed",...)
 --E 50
 
+-------------------------------------------------------------------
 --S 51 of 131
 ode121 := x*D(y(x),x) + sin(y(x)-x)
 --R
@@ -851,6 +932,8 @@ ode121 := x*D(y(x),x) + sin(y(x)-x)
 --E 51
 
 @
+Maxima fails.
+
 Mathematics gets
 $$\frac{\sin(x)}{1+\sin(x)}+x^{-sin(x)}C[1]$$
 which, on substitution, does not simplify to 0.
@@ -862,6 +945,7 @@ yx:=solve(ode121,y,x)
 --R                                                    Type: Union("failed",...)
 --E 52
 
+-------------------------------------------------------------------
 --S 53 of 131
 ode122 := x*D(y(x),x) + (sin(y(x))-3*x**2*cos(y(x)))*cos(y(x))
 --R
@@ -872,6 +956,8 @@ ode122 := x*D(y(x),x) + (sin(y(x))-3*x**2*cos(y(x)))*cos(y(x))
 --E 53
 
 @
+Maxima fails.
+
 Maple gets:
 $$\arctan\left(\frac{x^3+2~\_C1}{x}\right)$$
 which, on substitution, simplifies to 0.
@@ -887,6 +973,7 @@ yx:=solve(ode122,y,x)
 --R                                                    Type: Union("failed",...)
 --E 54
 
+-------------------------------------------------------------------
 --S 55 of 131
 ode123 := x*D(y(x),x) - x*sin(y(x)/x) - y(x)
 --R
@@ -897,6 +984,12 @@ ode123 := x*D(y(x),x) - x*sin(y(x)/x) - y(x)
 --E 55
 
 @
+Maxima gets:
+$$\%c~x=\%e^{\displaystyle -\frac{
+\log\left(\cos\left(\frac{y}{x}\right)+1\right)-
+\log\left(\cos\left(\frac{y}{x}\right)-1\right)}{2}}$$
+which, on substitution, does not simplify to 0.
+
 Maple gets:
 $$\arctan\left(\frac{2x~\_C1}{1+x^2~\_C1^2}\quad,\quad
 -\frac{-1+x^2~\_C1^2}{1+x^2~\_C1^2}\right)x$$
@@ -913,6 +1006,7 @@ yx:=solve(ode123,y,x)
 --R                                                    Type: Union("failed",...)
 --E 56
 
+-------------------------------------------------------------------
 --S 57 of 131
 ode124 := x*D(y(x),x) + x*cos(y(x)/x) - y(x) + x
 --R
@@ -923,6 +1017,11 @@ ode124 := x*D(y(x),x) + x*cos(y(x)/x) - y(x) + x
 --E 57
 
 @
+Maxima gets:
+$$\%c~x=\%e^{\displaystyle -\frac{\sin\left(\frac{y}{x}\right)}
+{\cos\left(\frac{y}{x}\right)+1}}$$
+which, on substitution, does not simplify to 0.
+
 Maple gets
 $$-2\arctan(\log(x)+~\_C1)x$$
 which, on substitution, does not simplify to 0.
@@ -938,6 +1037,7 @@ yx:=solve(ode124,y,x)
 --R                                                    Type: Union("failed",...)
 --E 58
 
+-------------------------------------------------------------------
 --S 59 of 131
 ode125 := x*D(y(x),x) + x*tan(y(x)/x) - y(x)
 --R
@@ -948,6 +1048,10 @@ ode125 := x*D(y(x),x) + x*tan(y(x)/x) - y(x)
 --E 59
 
 @
+Maxima gets:
+$$\arcsin\left(\frac{1}{\%c~x}\right)x$$
+which, on substitition, does simplifes to 0.
+
 Maple gets
 $$\arcsin\left(\frac{1}{x~\_C1}\right)x$$
 which, on substitution, simplifies to 0.
@@ -963,6 +1067,7 @@ yx:=solve(ode125,y,x)
 --R                                                    Type: Union("failed",...)
 --E 60
 
+-------------------------------------------------------------------
 --S 61 of 131
 ode126 := x*D(y(x),x) - y(x)*f(x*y(x))
 --R
@@ -973,6 +1078,8 @@ ode126 := x*D(y(x),x) - y(x)*f(x*y(x))
 --E 61
 
 @
+Maxima fails.
+
 Maple gets
 $$\frac{{\rm RootOf}\left(-\log(x)+~\_C1+
 \displaystyle\int^{\_Z}{\frac{1}{\displaystyle\_a(1+g(\_a))}}~d\_a\right)}{x}$$
@@ -989,6 +1096,7 @@ yx:=solve(ode126,y,x)
 --R                                                    Type: Union("failed",...)
 --E 62
 
+-------------------------------------------------------------------
 --S 63 of 131
 ode127 := x*D(y(x),x) - y(x)*f(x**a*y(x)**b)
 --R
@@ -998,6 +1106,8 @@ ode127 := x*D(y(x),x) - y(x)*f(x**a*y(x)**b)
 --R                                                     Type: Expression Integer
 --E 63
 @
+Maxima fails.
+
 Maple gives 0 which, on substitution simplifies to 0.
 
 Mathematica gives:
@@ -1011,6 +1121,7 @@ yx:=solve(ode127,y,x)
 --R                                                    Type: Union("failed",...)
 --E 64
 
+-------------------------------------------------------------------
 --S 65 of 131
 ode128 := x*D(y(x),x) + a*y(x) - f(x)*g(x**a*y(x))
 --R
@@ -1020,6 +1131,8 @@ ode128 := x*D(y(x),x) + a*y(x) - f(x)*g(x**a*y(x))
 --R                                                     Type: Expression Integer
 --E 65
 @
+Maxima fails.
+
 Maple gives 
 $$\frac{{\rm RootOf}\left(
 -\int{f(x)x^{(-1+a)}}~dx+\int^{\_Z}{\frac{1}{g(\_a)}~d\_a+\_C1}\right)}{x^a}$$
@@ -1036,6 +1149,7 @@ yx:=solve(ode128,y,x)
 --R                                                    Type: Union("failed",...)
 --E 66
 
+-------------------------------------------------------------------
 --S 67 of 131
 ode129 := (x+1)*D(y(x),x) + y(x)*(y(x)-x)
 --R
@@ -1045,6 +1159,10 @@ ode129 := (x+1)*D(y(x),x) + y(x)*(y(x)-x)
 --R                                                     Type: Expression Integer
 --E 67
 @
+Maxima gets:
+$$\frac{\%e^x}{(x+1)\left(\int{\frac{\%e^x}{(x+1)^2}}~dx+\%c\right)}$$
+which, on substitution, does not simplify to 0.
+
 Maple gives
 $$\frac{e^x}
 {-e^x-e^{(-1)}{\rm Ei}(1,-x-1)x-e^{(-1)}{\rm Ei}(1,-x-1)+x~\_C1+~\_C1}$$
@@ -1068,6 +1186,7 @@ yx:=solve(ode129,y,x)
 --R                                          Type: Union(Expression Integer,...)
 --E 68
 
+-------------------------------------------------------------------
 --S 69 of 131
 ode130 := 2*x*D(y(x),x) - y(x) -2*x**3
 --R
@@ -1077,6 +1196,11 @@ ode130 := 2*x*D(y(x),x) - y(x) -2*x**3
 --R                                                     Type: Expression Integer
 --E 69
 @
+Maxima gets:
+$$\%e^{\displaystyle\frac{\log(x)}{2}}\displaystyle
+\left(\frac{2\%e^{\displaystyle\frac{5\log(x)}{2}}}{5}+\%c\right)$$
+which, on substitution, does not give 0.
+
 Maple gives
 $$\frac{2x^3}{5}+\sqrt{x}~\_C1$$
 which, on substitution, simplifies to 0.
@@ -1112,6 +1236,7 @@ ode130expr := 2*x*D(yx,x) - yx -2*x**3
 --R                                                     Type: Expression Integer
 --E 72
 
+-------------------------------------------------------------------
 --S 73 of 131
 ode131 := (2*x+1)*D(y(x),x) - 4*exp(-y(x)) + 2
 --R
@@ -1121,6 +1246,11 @@ ode131 := (2*x+1)*D(y(x),x) - 4*exp(-y(x)) + 2
 --R                                                     Type: Expression Integer
 --E 73
 @
+Maxima gets:
+$$\log\left(\frac{4\%e^{2\%c}x+2\%e^{2\%c}+1}
+{2\%e^{2\%c}x+\%e^{2\%c}}\right)$$
+which simplifies to 0 when substituted.
+
 Maple gives
 $$-\log\left(\frac{2x+1}{-1+4xe^{(2~\_C1)}+2e^{(2~\_C1)}}\right)-2~\_C1$$
 which simplifies to 0 when substituted.
@@ -1151,6 +1281,7 @@ ode131expr := (2*x+1)*D(yx,x) - 4*exp(-yx) + 2
 --R                                                     Type: Expression Integer
 --E 75
 
+-------------------------------------------------------------------
 --S 76 of 131
 ode132 := 3*x*D(y(x),x) - 3*x*log(x)*y(x)**4 - y(x)
 --R
@@ -1160,6 +1291,15 @@ ode132 := 3*x*D(y(x),x) - 3*x*log(x)*y(x)**4 - y(x)
 --R                                                     Type: Expression Integer
 --E 76
 @
+Maxima gives 3 solutions.
+$$-\frac{\left(\sqrt{3}~4^{1/3}\%i-4^{1/3}\right)x^{1/3}}
+{2\left(6x^2\log(x)-3x^2+4\%c\right)^{1/3}}$$
+$$\frac{\left(\sqrt{3}~4^{1/3}\%i+4^{1/3}\right)x^{1/3}}
+{2\left(6x^2\log(x)-3x^2+4\%c\right)^{1/3}}$$
+$$-\frac{4^{1/3}x^{1/3}}{\left(6x^2\log(x)-3x^2+4\%c\right)^{1/3}}$$
+which, on substitution, simplifies to 0.
+
+
 Maple gives 3 solutions.
 $$\frac{\left(-4x(6x^2\log(x)-3x^2-4~\_C1)^2\right)^{(1/3)}}
 {6x^2\log(x)-3*x^2-4~\_C1}$$
@@ -1226,6 +1366,7 @@ ode132expr := 3*x*D(yx,x) - 3*x*log(x)*yx**4 - yx
 --R                                                     Type: Expression Integer
 --E 78
 
+-------------------------------------------------------------------
 --S 79 of 131
 ode133 := x**2*D(y(x),x) + y(x) - x
 --R
@@ -1235,6 +1376,11 @@ ode133 := x**2*D(y(x),x) + y(x) - x
 --R                                                     Type: Expression Integer
 --E 79
 @
+Maxima gets
+$$\%e^{1/x}
+\left(\int{\displaystyle\frac{\%e^{-\frac{1}{x}}}{x}}~dx+\%c\right)$$
+which, on substitution, simplifies to 0.
+
 Maple gives
 $$\left({\rm Ei}\left(1,\frac{1}{x}\right)+~\_C1\right)e^{(\frac{1}{x})}$$
 which simplifies to 0 on substitution.
@@ -1257,6 +1403,7 @@ yx:=solve(ode133,y,x)
 --RType: Union(Record(particular: Expression Integer,basis: List Expression Integer),...)
 --E 80
 
+-------------------------------------------------------------------
 --S 81 of 131
 ode134 := x**2*D(y(x),x) - y(x) + x**2*exp(x-1/x)
 --R
@@ -1269,6 +1416,10 @@ ode134 := x**2*D(y(x),x) - y(x) + x**2*exp(x-1/x)
 --R                                                     Type: Expression Integer
 --E 81
 @
+Maxima gets
+$$\%e^{\displaystyle -\frac{1}{x}}\left(\%c-\%e^x\right)$$
+which simplifies to 0 on substitution.
+
 Maple gets
 $$(-e^x+~\_C1)e^{\left(-\frac{1}{x}\right)}$$
 which simplifies to 0 on substitution.
@@ -1310,6 +1461,7 @@ ode134expr := x**2*D(yx,x) - yx + x**2*exp(x-1/x)
 --R                                                     Type: Expression Integer
 --E 84
 
+-------------------------------------------------------------------
 --S 85 of 131
 ode135 := x**2*D(y(x),x) - (x-1)*y(x)
 --R
@@ -1319,6 +1471,10 @@ ode135 := x**2*D(y(x),x) - (x-1)*y(x)
 --R                                                     Type: Expression Integer
 --E 85
 @
+Maxima gets
+$$\%c~x\%e^{1/x}$$
+which simplifies to 0 when substituted.
+
 Maple gets
 $$\_C1xe^{\left(\frac{1}{x}\right)}$$
 which simplifies to 0 when substituted.
@@ -1351,6 +1507,7 @@ ode135expr := x**2*D(yx,x) - (x-1)*yx
 --R                                                     Type: Expression Integer
 --E 88
 
+-------------------------------------------------------------------
 --S 89 of 131
 ode136 := x**2*D(y(x),x) + y(x)**2 + x*y(x) + x**2
 --R
@@ -1360,6 +1517,10 @@ ode136 := x**2*D(y(x),x) + y(x)**2 + x*y(x) + x**2
 --R                                                     Type: Expression Integer
 --E 89
 @
+Maxima gets
+$$-\frac{x\log(\%c~x)-x}{log(\%c~x)}$$
+which simplifies to 0 on substitution.
+
 Maple gets
 $$-\frac{x(-1+\log(x)+~\_C1)}{\log(x)+~\_C1}$$
 which simplifies to 0 on substitution.
@@ -1396,6 +1557,7 @@ ode136expr := x**2*D(yx,x) + yx**2 + x*yx + x**2
 --R                                                     Type: Expression Integer
 --E 91
 
+-------------------------------------------------------------------
 --S 92 of 131
 ode137 := x**2*D(y(x),x) - y(x)**2 - x*y(x)
 --R
@@ -1405,6 +1567,10 @@ ode137 := x**2*D(y(x),x) - y(x)**2 - x*y(x)
 --R                                                     Type: Expression Integer
 --E 92
 @
+Maxima gets
+$$\frac{x}{\log\left(\displaystyle \frac{1}{\%c~x}\right)}$$
+which simplifies to 0 on substitution.
+
 Maple gets:
 $$\frac{x}{-\log(x)+~\_C1}$$
 which simplifies to 0 on substitution.
@@ -1434,6 +1600,7 @@ ode137expr := x**2*D(yx,x) - yx**2 - x*yx
 --R                                                     Type: Expression Integer
 --E 94
 
+-------------------------------------------------------------------
 --S 95 of 131
 ode138 := x**2*D(y(x),x) - y(x)**2 - x*y(x) - x**2
 --R
@@ -1443,6 +1610,10 @@ ode138 := x**2*D(y(x),x) - y(x)**2 - x*y(x) - x**2
 --R                                                     Type: Expression Integer
 --E 95
 @
+Maxima gets
+$$\%c~x=\%e^{\arctan\left(\frac{y}{x}\right)}$$
+which does not simplify to 0 when substituted.
+
 Maple gets
 $$\tan(\log(x)+~\_C1)x$$
 which simplifies to 0 on substitution.
@@ -1514,6 +1685,7 @@ ode138expr := x**2*D(yx,x) - yx**2 - x*yx - x**2
 --R                                                     Type: Expression Integer
 --E 97
 
+-------------------------------------------------------------------
 --S 98 of 131
 ode139 := x**2*(D(y(x),x)+y(x)**2) + a*x**k - b*(b-1)
 --R
@@ -1523,6 +1695,14 @@ ode139 := x**2*(D(y(x),x)+y(x)**2) + a*x**k - b*(b-1)
 --R                                                     Type: Expression Integer
 --E 98
 
+@
+Maxima gets 6 answers, one of which is:
+$$\frac{-\left(3^{5/6}\%i\left(ax^k+\%ckx-\%cx+b^2k-bk-b^2+b\right)^{1/3}-
+3^{1/3}\left(ax^k+\%ckx-\%cx+b^2k-bk-b^2+b\right)^{1/3}\right)}
+{\left(2(k-1)^{1/3}x^{1/3}\right)}$$
+which simplifies to 0 on substitution.
+<<*>>=
+
 --S 99 of 131
 yx:=solve(ode139,y,x)
 --R
@@ -1530,6 +1710,7 @@ yx:=solve(ode139,y,x)
 --R                                                    Type: Union("failed",...)
 --E 99
 
+-------------------------------------------------------------------
 --S 100 of 131
 ode140 := x**2*(D(y(x),x)+y(x)**2) + 4*x*y(x) + 2
 --R
@@ -1539,6 +1720,10 @@ ode140 := x**2*(D(y(x),x)+y(x)**2) + 4*x*y(x) + 2
 --R                                                     Type: Expression Integer
 --E 100
 @
+Maxima gets
+$$-\frac{x-2\%c}{x^2-\%c~x}$$
+which simplifies to 0 when substituted.
+
 Maple gets
 $$-\frac{-2~\_C1+x}{x(-~\_C1+x)}$$
 which simplifies to 0 when substituted.
@@ -1570,6 +1755,7 @@ ode140expr := x**2*(D(yx,x)+yx**2) + 4*x*yx + 2
 --R                                                     Type: Expression Integer
 --E 102
 
+-------------------------------------------------------------------
 --S 103 of 131
 ode141 := x**2*(D(y(x),x)+y(x)**2) + a*x*y(x) + b
 --R
@@ -1579,6 +1765,14 @@ ode141 := x**2*(D(y(x),x)+y(x)**2) + a*x*y(x) + b
 --R                                                     Type: Expression Integer
 --E 103
 
+@
+Maxima gets:
+$$\%e^{\displaystyle -a\log(x)-2x}
+\left(\%c-b \int{\displaystyle
+\frac{\%e^{\displaystyle a\log(x)+2x}}{x^2}}~dx\right)$$
+which, when substituted, simplifies to 0.
+<<*>>=
+
 --S 104 of 131
 yx:=solve(ode141,y,x)
 --R                                                     2
@@ -1761,6 +1955,7 @@ ode141expr := x**2*(D(yx,x)+yx**2) + a*x*yx + b
 --R                                                     Type: Expression Integer
 --E 105
 
+-------------------------------------------------------------------
 --S 106 of 131
 ode142 := x**2*(D(y(x),x)-y(x)**2) - a*x**2*y(x) + a*x + 2
 --R
@@ -1770,6 +1965,10 @@ ode142 := x**2*(D(y(x),x)-y(x)**2) - a*x**2*y(x) + a*x + 2
 --R                                                     Type: Expression Integer
 --E 106
 
+@
+Maxima failed.
+<<*>>=
+
 --S 107 of 131
 yx:=solve(ode142,y,x)
 --R
@@ -1815,6 +2014,7 @@ ode142expr := x**2*(D(yx,x)-yx**2) - a*x**2*yx + a*x + 2
 --R                                                     Type: Expression Integer
 --E 108
 
+-------------------------------------------------------------------
 --S 109 of 131
 ode143 := x**2*(D(y(x),x)+a*y(x)**2) - b
 --R
@@ -1824,6 +2024,23 @@ ode143 := x**2*(D(y(x),x)+a*y(x)**2) - b
 --R                                                     Type: Expression Integer
 --E 109
 
+@
+Maxima, if $4ab+1 >= 0$ gets:
+$$x=\%c\%e^{
+-\frac{\displaystyle\log\left(
+-\frac{\displaystyle -2axy+\sqrt{4ab+1}+1}
+{\displaystyle 2axy+\sqrt{4ab+1}-1}\right)}
+{\displaystyle\sqrt{4ab+1}}}$$
+
+and if $4ab+1 < 0$ gets:
+$$x=\%c\%e^{
+-\frac{\displaystyle 2\arctan\left(
+\frac{\displaystyle 2axy-1}{\displaystyle\sqrt{-4ab-1}}\right)}
+{\displaystyle\sqrt{-4ab-1}}}$$
+
+neither of which simplify to 0 on substitution.
+<<*>>=
+
 --S 110 of 131
 yx:=solve(ode143,y,x)
 --R                                                     2
@@ -1877,6 +2094,7 @@ ode143expr := x**2*(D(yx,x)+a*yx**2) - b
 --R                                                     Type: Expression Integer
 --E 111
 
+-------------------------------------------------------------------
 --S 112 of 131
 ode144 := x**2*(D(y(x),x)+a*y(x)**2) + b*x**alpha + c
 --R
@@ -1886,6 +2104,9 @@ ode144 := x**2*(D(y(x),x)+a*y(x)**2) + b*x**alpha + c
 --R                                                     Type: Expression Integer
 --E 112
 
+@
+Maxima failed.
+<<*>>=
 --S 113 of 131
 yx:=solve(ode144,y,x)
 --R
@@ -1893,6 +2114,7 @@ yx:=solve(ode144,y,x)
 --R                                                    Type: Union("failed",...)
 --E 113
 
+-------------------------------------------------------------------
 --S 114 of 131
 ode145 := x**2*D(y(x),x) + a*y(x)**3 - a*x**2*y(x)**2
 --R
@@ -1903,6 +2125,8 @@ ode145 := x**2*D(y(x),x) + a*y(x)**3 - a*x**2*y(x)**2
 --E 114
 
 @
+Maxima failed.
+
 Maple claims the result is 0, which when substituted, simplifies to 0
 <<*>>=
 --S 115 of 131
@@ -1912,6 +2136,7 @@ yx:=solve(ode145,y,x)
 --R                                                    Type: Union("failed",...)
 --E 115
 
+-------------------------------------------------------------------
 --S 116 of 131
 ode146 := x**2*D(y(x),x) + x*y(x)**3 + a*y(x)**2
 --R
@@ -1922,6 +2147,8 @@ ode146 := x**2*D(y(x),x) + x*y(x)**3 + a*y(x)**2
 --E 116
 
 @
+Maxima failed.
+
 Maple gets 0 which, when substituted, simplifies to 0.
 <<*>>=
 --S 117 of 131
@@ -1931,6 +2158,7 @@ yx:=solve(ode146,y,x)
 --R                                                    Type: Union("failed",...)
 --E 117
 
+-------------------------------------------------------------------
 --S 118 of 131
 ode147 := x**2*D(y(x),x) + a*x**2*y(x)**3 + b*y(x)**2
 --R
@@ -1940,6 +2168,8 @@ ode147 := x**2*D(y(x),x) + a*x**2*y(x)**3 + b*y(x)**2
 --R                                                     Type: Expression Integer
 --E 118
 @
+Maxima failed.
+
 Maple gets 0 which, when substituted, results in 0.
 <<*>>=
 --S 119 of 131
@@ -1949,6 +2179,7 @@ yx:=solve(ode147,y,x)
 --R                                                    Type: Union("failed",...)
 --E 119
 
+-------------------------------------------------------------------
 --S 120 of 131
 ode148 := (x**2+1)*D(y(x),x) + x*y(x) - 1
 --R
@@ -1958,6 +2189,10 @@ ode148 := (x**2+1)*D(y(x),x) + x*y(x) - 1
 --R                                                     Type: Expression Integer
 --E 120
 @
+Maxima gets
+$$({\rm asinh}(x)+\%c)\%e^{-\frac{\displaystyle\log(x^2+1)}{\displaystyle 2}}$$
+which when substituted, does not simplify to 0.
+
 Maple gets
 $$\frac{{\rm arcsinh}(x)+~\_C1}{\sqrt{x^2+1}}$$
 which when substituted, simplifies to 0.
@@ -1999,6 +2234,7 @@ ode148expr := (x**2+1)*D(yx,x) + x*yx - 1
 --R                                                     Type: Expression Integer
 --E 123
 
+-------------------------------------------------------------------
 --S 124 of 131
 ode149 := (x**2+1)*D(y(x),x) + x*y(x) - x*(x**2+1)
 --R
@@ -2008,6 +2244,11 @@ ode149 := (x**2+1)*D(y(x),x) + x*y(x) - x*(x**2+1)
 --R                                                     Type: Expression Integer
 --E 124
 @
+Maxima gets
+$$\left(\displaystyle\frac{(x^2+1)^{3/2}}{3}+\%c\right)
+\%e^{\displaystyle -\frac{log(x^2+1)}{2}}$$
+which simplifies to 0 when substituted.
+
 Maple gets
 $$\frac{x^2}{3}+\frac{1}{3}+\frac{\_C1}{\sqrt{x^2+1}}$$
 which simplifies to 0 when substituted.
@@ -2045,6 +2286,7 @@ ode149expr := (x**2+1)*D(yx,x) + x*yx - x*(x**2+1)
 --R                                                     Type: Expression Integer
 --E 127
 
+-------------------------------------------------------------------
 --S 128 of 131
 ode150 := (x**2+1)*D(y(x),x) + 2*x*y(x) - 2*x**2
 --R
@@ -2054,6 +2296,10 @@ ode150 := (x**2+1)*D(y(x),x) + 2*x*y(x) - 2*x**2
 --R                                                     Type: Expression Integer
 --E 128
 @
+Maxima gets
+$$\displaystyle\frac{\frac{2x^3}{3}+\%c}{x^2+1}$$
+which simplifies to 0 on substitution.
+
 Maple gets
 $$\frac{\frac{2x^3}{3}+~\_C1}{x^2+1}$$
 which simplifies to 0 on substitution.
@@ -2100,5 +2346,6 @@ ode150expr := (x**2+1)*D(yx,x) + 2*x*yx - 2*x**2
 \bibitem{1} {\bf http://www.cs.uwaterloo.ca/$\tilde{}$ecterrab/odetools.html}
 \bibitem{2} Mathematica 6.0.1.0
 \bibitem{3} Maple 11.01 Build ID 296069
+\bibitem{4} Maxima 5.13.0
 \end{thebibliography}
 \end{document}

\start
Date: Wed, 19 Mar 2008 19:20:21 -0700 (PDT)
From: Tim Daly
To: sage-devel <sage-devel@googlegroups.com>
Subject: Re: sage directions

It is always good practice to quote authority when being a
complete fanatic on a subject. Since I'm being something of a
zealot about literate programming in this stream of posts I
can point you to lecture 2 by Robert Lefkowitz
<http://itc.conversationsnetwork.org/shows/detail1502.html>
where he talks about literate programming and Knuth's
conversion to a religious believer.

Actually, I can highly recommend all three lectures as
R0ml is a very, very entertaining and enlightening speaker.

Anyway, lecture 2. Don't miss it.

\start
Date: Thu, 20 Mar 2008 21:30:28 -0700
From: Bill Page
To: list
Subject: Bill Page has invited you to The Algebraist Network

Bill Page has invited you to join The Algebraist Network.

Click here to join:
http://algebraist.crowdvine.com/invitations/update/12f5b3ce4b0fedffa6712b030b0ebb0efa4d2a4e

A personal note from Bill Page:
We would like to promote the development and use of the Aldor programming language by facilitating the interaction between developers and uses of the language. 

Check out Bill Page's profile here:
  http://algebraist.crowdvine.com/profiles/12668

Create a social network for any group, organization, event, or hobby.
http://www.crowdvine.com/

\start
Date: Thu, 20 Mar 2008 22:33:27 -0700
From: Bill Page
To: list
Subject: Bill Page added you as a friend at The Algebraist Network

Bill Page added you as a friend on The Algebraist Network.

If you don't know Bill Page, Bill Page is probably a fan. Consider it
a compliment.

Bill Page's profile:
http://algebraist.crowdvine.com/profiles/show/12668

\start
Date: Thu, 20 Mar 2008 23:21:52 -0700
From: Bill Page
To: list
Subject: Bill Page left a comment on your The Algebraist Network profile

Bill Page left a comment on your profile:

http://algebraist.crowdvine.com/profiles/show/12690

Hello William,

Thanks for joining in! :-)

One thing that I would really like to discuss here is the relationship between Axiom and Aldor. In particular: What can Axiom do for Aldor? As opposed to the perhaps more obvious question of: What Aldor can offer Axiom users...

What do you think?

\start
Date: Fri, 21 Mar 2008 06:51:28 -0700
From: Ed Borasky
To: list
Subject: Ed Borasky added you as a friend at The Algebraist Network

Ed Borasky added you as a friend on The Algebraist Network.


If you don't know Ed Borasky, Ed Borasky is probably a fan. Consider it a compliment.

Ed Borasky's profile:
http://algebraist.crowdvine.com/profiles/show/12689

\start
Date: Tue, 18 Mar 2008 06:41:36 -0700 (PDT)
From: Lennin Sanchez
To: list
Subject: java.lang.ClassCastException

Hello !!! Im Trying to deserialize an OMElement into an Array of Objects,
here a snippets of my code 

    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
    xml += "<parameters>";
    xml += "<getCityTime xmlns=\"http://www.Nanonull.com/TimeService/\"   
xmlns:tns=\"http://www.Nanonull.com/TimeService/\">";
    xml += "<city>caracas</city>";
    xml += "</getCityTime>";
    xml += "</parameters>";

   methodElement =
org.apache.axiom.om.impl.llom.util.AXIOMUtil.stringToOM(xml);
   ObjectSupplier obj1 = new DefaultObjectSupplier();
   BeanUtil.deserialize(methodElement,_method.getParameterTypes(),new
DefaultObjectSupplier());

     However when i run this code i get this exception:

    java.lang.ClassCastException:
org.apache.axiom.om.impl.llom.OMDocumentImpl cannot be cast to  
org.apache.axiom.om.OMElement
	at
org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:520)
	at com.cinet.axiom.src.test2.marshall(test2.java:78)
	at com.cinet.axiom.src.OMtoJava.main(OMtoJava.java:23)


   Any body have any clues about that error ???

  thx in advance, Lennin.

\start
Date: 22 Mar 2008 11:50:34 +0100
From: Martin Rubey
To: list
Subject: Re: Re: Solving linear equations

Waldek Hebisch writes:

> Well, what you see here?  I see function calls :) All Spad function calls
> crossing constructor boundary are indirect function calls, which basically
> gives Lisp compiler almost no chance to optimize.  Some functions are
> inlined, in such case Lisp compiler may give much better code.  For this to
> happen there are two conditions: constructor must be mentioned in
> '$optimizableDomainNames' list and there must be 'SPADreplace' propery on the
> Lisp name of the function.  Spad compiler puts this property only on
> functions it considers simple enough, apparently 'qelt' is deemed too
> complicated (in IIARRAY2 only 'empty' and 'nrows' have this property).
> 
> I think that key to speeding arrays is to find out how to inline 'qelt' (and
> relatives).

Do you know, or can you point me to, the place where SPADreplace is used?  Up
to now I thought the lisp compiler would just compile the code.lsp files, but
how would it make use of the SPADreplace property then?

\start
Date: Sun, 23 Mar 2008 14:45:59 -0400
From: Raymond Rogers
To: list
Subject: fedora8 compile

Hi, on my cd installation of fedora 8 (via a fedora live cd) axiom 
failed to compile.  The binary does work after the reseting the kernel 
randomization.  Is anybody interested in a make listing?

 echo 0 >/proc/sys/kernel/exec-shield
 echo 0 >/proc/sys/kernel/randomize_va_space
The hint of page:
http://www.axiom-developer.org/axiom-website/download.html
shouldn't be "if the make fails", it should be if the program fails?
BTW: I can't seem to get sudo to execute the echo's as user.  
Another kernel protection seems to kick in.
I have to be root, any hints?

\start
Date: Sun, 23 Mar 2008 16:31:49 -0500
From: Tim Daly
To: Raymond Rogers
Subject: Re: fedora8 compile

I built the fedora 8 binary. Please send me a console trace.
It would be useful to see the trace from 
  make NOISE=
because by default a simple 'make' does a lot of output suppression.

\start
Date: Mon, 24 Mar 2008 01:18:58 -0600
From: Tim Daly
To: list
Subject: 20080323.01.tpd.patch (add menus to firefox axiom console)

This patch adds drop-down menus to the new axiom console within firefox.

Tim

=========================================================================
diff --git a/changelog b/changelog
index 4921b44..50efc4a 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080323 tpd src/hyper/bookvol11 add menus
 20080318 tpd src/input/kamke2.input check results using Maxima
 20080317 tpd src/input/kamke2.input check results using Maple
 20080316 tpd src/input/kamke2.input check results using Mathematica.
diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet
index 6b600ba..e8c22b8 100644
--- a/src/hyper/bookvol11.pamphlet
+++ b/src/hyper/bookvol11.pamphlet
@@ -376,7 +376,104 @@ that you see in the browser pages. This is convention and is not required.
 The page hierarchy (used by the Makefile) is:
 <<PAGES>>=
 PAGES=rootpage.xhtml \
+        testpage.xhtml \
         commandline.xhtml \
+          menufileopen.xhtml \
+          menufileread.xhtml \
+          menufilesave.xhtml \
+          menufilesaveas.xhtml \
+          menufileloadlibrary.xhtml \
+          menufileinputfile.xhtml \
+          menufiletogglespool.xhtml \
+          menufileprint.xhtml \
+          menufileexit.xhtml \
+          menueditcopy.xhtml \
+          menueditcopytext.xhtml \
+          menueditcopytex.xhtml \
+          menueditdeleteselection.xhtml \
+          menueditcopyasimage.xhtml \
+          menueditselectiontoimage.xhtml \
+          menueditselectiontoinput.xhtml \
+          menueditcut.xhtml \
+          menueditpaste.xhtml \
+          menuaxiominterrupt.xhtml \
+          menuaxiomrestart.xhtml \
+          menuaxiomclearmemory.xhtml \
+          menuaxiomaddtopath.xhtml \
+          menuaxiomshowfunctions.xhtml \
+          menuaxiomshowdefinition.xhtml \
+          menuaxiomshowvariables.xhtml \
+          menuaxiomdeletefunction.xhtml \
+          menuaxiomdeletevariable.xhtml \
+          menuaxiomtoggletimedisplay.xhtml \
+          menuaxiomset.xhtml \
+          menuaxiomdisplay.xhtml \
+          menuequationssolve.xhtml \
+          menuequationssolvenumerically.xhtml \
+          menuequationsrootsofpolynomial.xhtml \
+          menuequationsrealrootsofpolynmial.xhtml \
+          menuequationssolvelinearsystem.xhtml \
+          menuequationssolvealgebraicsystem.xhtml \
+          menuequationseliminatevariable.xhtml \
+          menuequationssolveode.xhtml \
+          menuequationsinitialvalueproblem1.xhtml \
+          menuequationsinitialvalueproblem2.xhtml \
+          menuequationsboundaryvalueproblem.xhtml \
+          menuequationssolveodewithlaplace.xhtml \
+          menuequationsatvalue.xhtml \
+          menualgebrageneratematrix.xhtml \
+          menualgebraentermatrix.xhtml \
+          menualgebrainvertmatrix.xhtml \
+          menualgebracharacteristicpolynomial.xhtml \
+          menualgebradeterminant.xhtml \
+          menualgebraeigenvalues.xhtml \
+          menualgebraeigenvectors.xhtml \
+          menualgebraadjointmatrix.xhtml \
+          menualgebratransposematrix.xhtml \
+          menualgebramakelist.xhtml \
+          menualgebraapplytolist.xhtml \
+          menualgebramaptolist.xhtml \
+          menualgebrareducelist.xhtml \
+          menualgebramaptomatrix.xhtml \
+          menucalculuslevel3.xhtml \
+            menucalculuslevel3a.xhtml \
+            menucalculuslevel3b.xhtml \
+            menucalculuslevel3c.xhtml \
+          menucalculusintegrate.xhtml \
+          menucalculusrischintegrate.xhtml \
+          menucalculuschangevariable.xhtml \
+          menucalculusdifferentiate.xhtml \
+          menucalculusfindlimit.xhtml \
+          menucalculusgetseries.xhtml \
+          menucalculuspadeapproximation.xhtml \
+          menucalculuscalculussum.xhtml \
+          menucalculuscalculusproduct.xhtml \
+          menucalculuslaplacetransform.xhtml \
+          menucalculusinverselaplacetransform.xhtml \
+          menucalculusgreatestcommondivisor.xhtml \
+          menucalculusleastcommonmultiple.xhtml \
+          menucalculusdividepolynomials.xhtml \
+          menucalculuspartialfractions.xhtml \
+          menucalculuscontinuedfractions.xhtml \
+          menusimplifysimplifyexpression.xhtml \
+          menusimplifysimplifyradicals.xhtml \
+          menusimplifyfactorexpression.xhtml \
+          menusimplifyfactorcomplex.xhtml \
+          menusimplifyexpandexpression.xhtml \
+          menusimplifyexpandlogarithms.xhtml \
+          menusimplifycontractlogarithms.xhtml \
+          menusimplifyfactorialsandgamma.xhtml \
+          menusimplifytrigsimplification.xhtml \
+          menusimplifycomplexsimplification.xhtml \
+          menusimplifysubtitute.xhtml \
+          menusimplifyevaluatenounform.xhtml \
+          menusimplifytogglealgebraicflag.xhtml \
+          menusimplifyaddalgebraicequality.xhtml \
+          menusimplifymoduluscomputation.xhtml \
+          menunumerictogglenumericoutput.xhtml \
+          menunumerictofloat.xhtml \
+          menunumerictobigfloat.xhtml \
+          menunumericsetprecision.xhtml \
         basiccommand.xhtml \
         tutorial.xhtml \
         jenks.xhtml \
@@ -909,6 +1006,7 @@ The {\bf div} section with {\bf id=``mathAns''} is replaced by the
 result sent from the server.
 
 \section{Cascading Style Sheet}
+\subsection{Standard Style Sheet}
 This is the standard CSS style section that gets included with every
 page. We do this here but it could be a separate style sheet. It 
 hardly matters either way as the style sheet is trivial.
@@ -966,7 +1064,195 @@ hardly matters either way as the style sheet is trivial.
    }
   </style>
 @
+\subsection{Menu style sheet}
+<<menu style>>=
+ <style>
+
+   form {
+     margin-top: 0;
+     margin-bottom: 0;
+     padding-left: 10px;
+   }
+
+   table.main {
+     background-color: #FFFF66;
+     font-size: 10pt;
+     font-family: arial;
+   }
+
+   .main A:link {
+     font-family: arial;
+     color:#016bbd;
+   }
+
+   .main A:hover {
+     font-family: arial;
+     color: #64747A;
+   }
+
+   .main A:visited {
+     font-family: arial;
+     color:#336699;
+   }
+
+   /* style the outer div to give it width */
+   .menu {
+     font-size:0.85em;
+   }
+
+   /* remove all the bullets, borders and padding 
+      from the default list styling */
+   .menu ul {
+     padding:0;
+     width:1000px;
+     margin:0;
+     list-style-type:none;
+     white-space: normal;
+   }
+
+   .menu ul ul {
+     width:90px;
+   }
+
+   /* float the list to make it horizontal and a relative position 
+      so that you can control the dropdown menu positon */
+   .menu li {
+     float:left;
+     width:90px;
+     position:relative;
+   }
+
+   /* style the links for the top level */
+   .menu a, .menu a:visited {
+     display:block;
+     font-size:12px;
+     text-decoration:none; 
+     font-weight:bold;
+     color:#2952a7;
+     width:99px;
+     height:32px;
+     line-height:29px;
+     border:0px solid #fff;
+     border-width:0px 0px 0 0px;
+     text-align:center;
+   }
+
+   /* style the second level links 
+      if this breaks all the level 2 links appear at once */
+   .menu ul ul a, .menu ul ul a:visited {
+     font-size:10px;
+     font-weight:normal;
+     background:#d4d8bd; 
+     color:#000; 
+     height:auto; 
+     line-height:1em; 
+     padding:5px 10px; 
+     width:78px
+   }
 
+   /* style the top level hover */
+   .menu a:hover, .menu ul ul a:hover{
+     border:1px solid #000;
+     border-width:1px 1px 0 1px;
+   }
+
+   .menu :hover > a, .menu ul ul :hover > a {
+     border:1px solid #000;
+     border-width:1px 1px 0 1px;
+   }
+
+   /* style the second level background */
+   .menu ul ul a.drop, .menu ul ul a.drop:visited {
+     background:#e0d8d0; 
+   }
+
+   /* style the second level hover */
+   .menu ul ul a.drop:hover{
+     background:#c9ba65;
+   }
+
+   .menu ul ul :hover > a.drop {
+     background:#c9ba65;
+   }
+
+   /* style the third level background */
+   .menu ul ul ul a, .menu ul ul ul a:visited {
+     background:#e2dfa8;
+   }
+
+   /* style the third level hover */
+   .menu ul ul ul a:hover {
+     background:#b2ab9b;
+   }
+
+   .menu ul ul ul :hover > a {
+     background:#b2ab9b;
+   }
+
+   /* hide the sub levels and give them a positon absolute 
+      so that they take up no room */
+   .menu ul ul {
+     visibility:hidden;
+     position:absolute;
+     height:0;
+     top:31px;
+     left:0;
+     width:150px;
+   }
+
+   /* position the third level flyout menu */
+   .menu ul ul ul{
+     left:100px; 
+     top:0;
+     width:90px;
+   }
+
+   /* position the third level flyout menu for a left flyout */
+   .menu ul ul ul.left {
+     left:-90px;
+   }
+
+   /* style the table so that it takes no part in the layout - 
+      required for IE to work */
+   .menu table {
+     position:absolute; 
+     top:0; 
+     left:0;
+   }
+
+   /* make the second level visible when hover on 
+     first level list OR link */
+   .menu ul li:hover ul,
+     .menu ul a:hover ul {
+       visibility:visible; 
+   }
+
+   /* keep the third level hidden when you hover on 
+      first level list OR link */
+   .menu ul :hover ul ul {
+     visibility:hidden;
+   }
+
+   /* keep the fourth level hidden when you hover on 
+      second level list OR link */
+   .menu ul :hover ul :hover ul ul {
+     visibility:hidden;
+   }
+
+   /* make the third level visible when you hover over second level list 
+      OR link */
+   .menu ul :hover ul :hover ul { 
+     visibility:visible;
+   }
+
+   /* make the fourth level visible when you hover over third level list 
+      OR link */
+   .menu ul :hover ul :hover ul :hover ul { 
+     visibility:visible;
+   }
+
+ </style>
+@
 \section{standard head}
 This is the standard head section. It is used on pages that do not
 include javascript. Note that it does NOT include the </head> so
@@ -1219,6 +1505,7 @@ is currently ignored.
 \section{Pages}
 <<testpage.xhtml>>=
 <<standard head>>
+<<menu style>>
   <script type="text/javascript">
 <<handlefreevars>>
 <<axiom talker>>
@@ -1228,6 +1515,591 @@ is currently ignored.
 <<page head>>
   <div align="center">Test Page</div>
   <hr/>
+  <div align="center">
+   <!--main menu-->
+   <form method="get" action="foo.xhtml">
+    <table class="mainmenu" border="0" cellspacing="0" cellpadding="0">
+     <tr>
+      <td align="center" valign="middle" nowrap="nowrap">
+       <div class="menu">
+        <ul>
+         <!-- Begin File Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           File<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="file/open.xhtml">
+             Open
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/readfile.xhtml">
+             Read file
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/save.xhtml">
+             Save
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/saveas.xhtml">
+             Save as
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/input.xhtml">
+             Embed
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/batchfile.xhtml">
+             Batch file
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/exporttohtml.xhtml">
+             Export to html
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/selectfile.xhtml">
+             Select file
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/monitorfile.xhtml">
+             Monitor file
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/print.xhtml">
+             Print
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="file/exit.xhtml">
+             Exit
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End File Menu -->
+         <!-- Start Edit Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Edit<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="edit/copy.xhtml">
+             Copy
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/copytext.xhtml">
+             Copy text
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/copytex.xhtml">
+             Copy TeX
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/deleteselection.xhtml">
+              Delete selection
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/copyasimage.xhtml">
+             Copy as image     
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/selectiontoimage.xhtml">
+             Selection to image
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/selectiontoinput.xhtml">
+             Selection to input
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/cut.xhtml">
+             Cut               
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/paste.xhtml">
+             Paste
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="edit/print.xhtml">
+             Print
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Edit Menu -->
+         <!-- Start Axiom Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Axiom<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="axiom/interrupt.xhtml">
+             Interrupt
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/restart.xhtml">
+             Restart
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/clearmemory.xhtml">
+             Clear Memory
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/addtopath.xhtml">
+              Add to path
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/showfunctions.xhtml">
+             Show functions
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/showdefinition.xhtml">
+             Show definition
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/showvariables.xhtml">
+             Show variables
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/deletefunction.xhtml">
+             Delete function
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/deletevariable.xhtml">
+             Delete variable
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/toggletimedisplay.xhtml">
+             Toggle time display
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/change2ddisplay.xhtml">
+             Change 2D display
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="axiom/displaytex.xhtml">
+             Display TeX
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Axiom Menu -->
+         <!-- Start Equations Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Equations<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="equations/solve.xhtml">
+             Solve
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/solvenumerically.xhtml">
+             Solve numerically
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/rootsofpolynomial.xhtml">
+             Roots of polynomial
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/Real roots of polynmial.xhtml">
+              Real roots of polynomial
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/solvelinearsystem.xhtml">
+             Solve linear system
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/solvealgebraicsystem.xhtml">
+             Solve algebraic system
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/eliminatevariable.xhtml">
+             Eliminate variable
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/solveode.xhtml">
+             Solve ODE
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/initialvalueproblem1.xhtml">
+             Initial value problem (1)
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/initialvalueproblem2.xhtml">
+             Initial value problem (2)
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/boundaryvalueproblem.xhtml">
+             Boundary value problem
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/solveodewithlaplace.xhtml">
+             Solve ODE with Laplace
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="equations/atvalue.xhtml">
+             At value
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Equations Menu -->
+         <!-- Start Algebra Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Algebra<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="algebra/generatematrix.xhtml">
+             Generate matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/entermatrix.xhtml">
+             Enter matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/invertmatrix.xhtml">
+             Invert matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/characteristicpolynomial.xhtml">
+             Characteristic polynomial
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/determinant.xhtml">
+             Determinant
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/eigenvalues.xhtml">
+             Eigenvalues
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/eigenvectors.xhtml">
+             Eigenvectors
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/adjointmatrix.xhtml">
+             Adjoint matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/transposematrix.xhtml">
+             Transpose matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/makelist.xhtml">
+             Make list
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/applytolist.xhtml">
+             Apply to list
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/maptolist.xhtml">
+             Map to list
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/reducelist.xhtml">
+             Reduce list
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="algebra/maptomatrix.xhtml">
+             Map to matrix
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Algebra Menu -->
+         <!-- Start Calculus Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Calculus<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="calculus/level3.xhtml">
+             Level 3
+            </a>
+            <ul>
+             <li>
+              <a class="drop" href="calculus/integrate.xhtml">
+               Level 3 A
+              </a>
+             </li>
+             <li>
+              <a class="drop" href="calculus/integrate.xhtml">
+               Level 3 B
+              </a>
+             </li>
+             <li>
+              <a class="drop" href="calculus/integrate.xhtml">
+               Level 3 C
+              </a>
+             </li>
+            </ul>
+           </li>
+           <li>
+            <a class="drop" href="calculus/integrate.xhtml">
+             Integrate
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/rischintegrate.xhtml">
+             Risch integrate
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/changevariable.xhtml">
+             Change variable
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/differentiate.xhtml">
+             Differentiate
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/findlimit.xhtml">
+             Find limit
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/getseries.xhtml">
+             Get series
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/padeapproximation.xhtml">
+             Pade approximation
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/calculussum.xhtml">
+             Calculus sum
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/calculusproduct.xhtml">
+             Calculus product
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/laplacetransform.xhtml">
+             Laplace transform
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/inverselaplacetransform.xhtml">
+             Inverse Laplace transform
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/greatestcommondivisor.xhtml">
+             Greatest common divisor
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/leastcommonmultiple.xhtml">
+             Least common multiple
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/dividepolynomials.xhtml">
+             Divide polynomials
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/partialfractions.xhtml">
+             Partial fractions
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="calculus/continuedfractions.xhtml">
+             Continued fractions
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Calculus Menu -->
+         <!-- Start Simplify Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Simplify<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="simplify/simplifyexpression.xhtml">
+             Simplify expression
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/simplifyradicals.xhtml">
+             Simplify radicals
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/factorexpression.xhtml">
+             Factor expression
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/factorcomplex.xhtml">
+             Factor complex
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/expandexpression.xhtml">
+             Expand expression
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/expandlogarithms.xhtml">
+             Expand logarithms
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/contractlogarithms.xhtml">
+             Contract logarithms
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/factorialsandgamma.xhtml">
+             Factorials and Gamma
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/trigonometricsimplification.xhtml">
+             Trigonometric simplification
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/complexsimplification.xhtml">
+             Complex simplification
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/subtitute.xhtml">
+             Substitute
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/evaluatenounform.xhtml">
+             Evaluate noun form
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/togglealgebraicflag.xhtml">
+             Toggle algebraic flag
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/addalgebraicequality.xhtml">
+             Add algebraic equality
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="simplify/moduluscomputation.xhtml">
+             Modulus computation
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Simplify Menu -->
+         <!-- Start Numeric Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Numeric<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="numeric/togglenumericoutput.xhtml">
+             Toggle numeric output
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="numeric/tofloat.xhtml">
+             To float
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="numeric/tobigfloat.xhtml">
+             To bigfloat
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="numeric/setprecision.xhtml">
+             Set precision
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Simplify Menu -->
+        </ul>
+       </div>
+      </td>
+     </tr>
+    </table>
+   </form>
+  </div>
+
 <ul>
  <li>
   <input type="submit" id="p1" class="subbut" 
@@ -6499,22 +7371,743 @@ The available test suites are:
 \subsection{commandline.xhtml}
 <<commandline.xhtml>>=
 <<standard head>>
+<<menu style>>
   <script type="text/javascript">
    function commandline(arg) {
     return(document.getElementById('comm').value);
    }
+   function popUp(url,widthsize,heightsize) {
+     var widthsize=640;
+     var heightsize=480;
+     var p1 = "toolbar=no";
+     var p2 = ",location=no";
+     var p3 = ",directories=no";
+     var p4 = ",status=no";
+     var p5 = ",menubar=no";
+     var p6 = ",scrollbars=no";
+     var p7 = ",resizable=no";
+     var p8 = ",top="+(window.screen.height-heightsize)/2;
+     var p9 = ",left="+(window.screen.width-widthsize)/2;
+     var pa = ",width="+widthsize;
+     var pb = ",height="+heightsize;
+     var winProps=p1+p2+p3+p4+p5+p6+p7+p8+p9+pa+pb;
+     var popUp = window.open(url,"popup",winProps);
+     popUp.focus();
+   }
+   var card = '{is:"card",'+
+               'title:"",'+
+               'content:"",'+
+               'type:"",'+
+               'visible:"false"}';
+   function newcard(title,content,type,visible) {
+      var c = eval("("+card+")"); 
+      c.title=title;
+      c.content=content;
+      c.type=type;
+      c.visible=visible;
+      return(c);
+   }
+   var pamphlet = '{is:"pamphlet",'+
+                   'head:"",'+
+                   'body:[],'+
+                   'tail:"",'+
+                   'visible:"false"}';
+   function newpamphlet(title,content,type,visible) {
+      var p = eval("("+pamphlet+")"); 
+      p.title=title;
+      p.content=content;
+      p.type=type;
+      p.visible=visible;
+      return(p);
+   }
+   function dump(d) {
+     if (d.is == "card") {
+      return("CARD"+"\n"+
+             "title:  "+d.title+"\n"+
+             "content:"+d.content+"\n"+
+             "visible:"+d.visible+"\n"+
+             "type:   "+d.type);
+     }
+     if (d.is == "pamphlet") {
+      return("PAMPHLET"+"\n"+
+             "title:  "+d.title+"\n"+
+             "content:"+d.content+"\n"+
+             "visible:"+d.visible+"\n"+
+             "type:   "+d.type);
+     }
+   }
+   function makeone() {
+     var p = newpamphlet("makeone",card,"text","true");
+     alert(dumppamphlet(p));
+     alert(dump(p));
+   }
 <<showfullanswer>>
 <<axiom talker>>
   </script>
  </head>
  <body>
-<<page head>>
+  <div align="center">
+   <!--main menu-->
+   <form method="get" action="foo.xhtml">
+    <table class="mainmenu" border="0" cellspacing="0" cellpadding="0">
+     <tr>
+      <td align="center" valign="middle" nowrap="nowrap">
+       <div class="menu">
+        <ul>
+         <!-- Begin File Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           File<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="javascript:popUp('menufileopen.xhtml')">
+             Open
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menufileread.xhtml')">
+             Read file
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menufilesave.xhtml')">
+             Save
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menufilesaveas.xhtml')">
+             Save as
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menufileloadlibrary.xhtml')">
+             Load library
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menufileinputfile.xhtml')">
+             Input file
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menufiletogglespool.xhtml')">
+             Toggle spool
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menufileprint.xhtml')">
+             Print
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menufileexit.xhtml')">
+             Exit
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End File Menu -->
+         <!-- Start Edit Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Edit<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href="javascript:popUp('menueditcopy.xhtml')">
+             Copy
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menueditcopytext.xhtml')">
+             Copy text
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menueditcopytex.xhtml')">
+             Copy TeX
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menueditdeleteselection.xhtml')">
+              Delete selection
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menueditcopyasimage.xhtml')">
+             Copy as image     
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menueditselectiontoimage.xhtml')">
+             Selection to image
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menueditselectiontoinput.xhtml')">
+             Selection to input
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menueditcut.xhtml')">
+             Cut               
+            </a>
+           </li>
+           <li>
+            <a class="drop" href="javascript:popUp('menueditpaste.xhtml')">
+             Paste
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Edit Menu -->
+         <!-- Start Axiom Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Axiom<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiominterrupt.xhtml')">
+             Interrupt
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+              href="javascript:popUp('menuaxiomrestart.xhtml')">
+             Restart
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomclearmemory.xhtml')">
+             Clear Memory
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomaddtopath.xhtml')">
+              Add to path
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomshowfunctions.xhtml')">
+             Show functions
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomshowdefinition.xhtml')">
+             Show definition
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomshowvariables.xhtml')">
+             Show variables
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomdeletefunction.xhtml')">
+             Delete function
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomdeletevariable.xhtml')">
+             Delete variable
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomtoggletimedisplay.xhtml')">
+             Toggle time display
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomset.xhtml')">
+             Set ...
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuaxiomdisplay.xhtml')">
+             Display ...
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Axiom Menu -->
+         <!-- Start Equations Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Equations<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationssolve.xhtml')">
+             Solve
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationssolvenumerically.xhtml')">
+             Solve numerically
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationsrootsofpolynomial.xhtml')">
+             Roots of polynomial
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+                "javascript:popUp('menuequationsrealrootsofpolynmial.xhtml')">
+              Real roots of polynomial
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationssolvelinearsystem.xhtml')">
+             Solve linear system
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menuequationssolvealgebraicsystem.xhtml')">
+             Solve algebraic system
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationseliminatevariable.xhtml')">
+             Eliminate variable
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationssolveode.xhtml')">
+             Solve ODE
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menuequationsinitialvalueproblem1.xhtml')">
+             Initial value problem (1)
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menuequationsinitialvalueproblem2.xhtml')">
+             Initial value problem (2)
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menuequationsboundaryvalueproblem.xhtml')">
+             Boundary value problem
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menuequationssolveodewithlaplace.xhtml')">
+             Solve ODE with Laplace
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menuequationsatvalue.xhtml')">
+             At value
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Equations Menu -->
+         <!-- Start Algebra Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Algebra<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebrageneratematrix.xhtml')">
+             Generate matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebraentermatrix.xhtml')">
+             Enter matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebrainvertmatrix.xhtml')">
+             Invert matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menualgebracharacteristicpolynomial.xhtml')">
+             Characteristic polynomial
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebradeterminant.xhtml')">
+             Determinant
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebraeigenvalues.xhtml')">
+             Eigenvalues
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebraeigenvectors.xhtml')">
+             Eigenvectors
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebraadjointmatrix.xhtml')">
+             Adjoint matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebratransposematrix.xhtml')">
+             Transpose matrix
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebramakelist.xhtml')">
+             Make list
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebraapplytolist.xhtml')">
+             Apply to list
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebramaptolist.xhtml')">
+             Map to list
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebrareducelist.xhtml')">
+             Reduce list
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menualgebramaptomatrix.xhtml')">
+             Map to matrix
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Algebra Menu -->
+         <!-- Start Calculus Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Calculus<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuslevel3.xhtml')">
+             Level 3
+            </a>
+            <ul>
+             <li>
+              <a class="drop" 
+               href="javascript:popUp('menucalculuslevel3a.xhtml')">
+               Level 3 A
+              </a>
+             </li>
+             <li>
+              <a class="drop" 
+               href="javascript:popUp('menucalculuslevel3b.xhtml')">
+               Level 3 B
+              </a>
+             </li>
+             <li>
+              <a class="drop" 
+               href="javascript:popUp('menucalculuslevel3c.xhtml')">
+               Level 3 C
+              </a>
+             </li>
+            </ul>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculusintegrate.xhtml')">
+             Integrate
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculusrischintegrate.xhtml')">
+             Risch integrate
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuschangevariable.xhtml')">
+             Change variable
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculusdifferentiate.xhtml')">
+             Differentiate
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculusfindlimit.xhtml')">
+             Find limit
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculusgetseries.xhtml')">
+             Get series
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuspadeapproximation.xhtml')">
+             Pade approximation
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuscalculussum.xhtml')">
+             Calculus sum
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuscalculusproduct.xhtml')">
+             Calculus product
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuslaplacetransform.xhtml')">
+             Laplace transform
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menucalculusinverselaplacetransform.xhtml')">
+             Inverse Laplace transform
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menucalculusgreatestcommondivisor.xhtml')">
+             Greatest common divisor
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menucalculusleastcommonmultiple.xhtml')">
+             Least common multiple
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculusdividepolynomials.xhtml')">
+             Divide polynomials
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menucalculuspartialfractions.xhtml')">
+             Partial fractions
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+              href="javascript:popUp('menucalculuscontinuedfractions.xhtml')">
+             Continued fractions
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Calculus Menu -->
+         <!-- Start Simplify Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Simplify<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menusimplifysimplifyexpression.xhtml')">
+             Simplify expression
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifysimplifyradicals.xhtml')">
+             Simplify radicals
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifyfactorexpression.xhtml')">
+             Factor expression
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifyfactorcomplex.xhtml')">
+             Factor complex
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifyexpandexpression.xhtml')">
+             Expand expression
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifyexpandlogarithms.xhtml')">
+             Expand logarithms
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifycontractlogarithms.xhtml')">
+             Contract logarithms
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+              href="javascript:popUp('menusimplifyfactorialsandgamma.xhtml')">
+             Factorials and Gamma
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menusimplifytrigsimplification.xhtml')">
+             Trigonometric simplification
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menusimplifycomplexsimplification.xhtml')">
+             Complex simplification
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifysubtitute.xhtml')">
+             Substitute
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifyevaluatenounform.xhtml')">
+             Evaluate noun form
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+               "javascript:popUp('menusimplifytogglealgebraicflag.xhtml')">
+             Toggle algebraic flag
+            </a>
+           </li>
+           <li>
+            <a class="drop" href=
+              "javascript:popUp('menusimplifyaddalgebraicequality.xhtml')">
+             Add algebraic equality
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menusimplifymoduluscomputation.xhtml')">
+             Modulus computation
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Simplify Menu -->
+         <!-- Start Numeric Menu -->
+         <li>
+          <a class="toplevel" href="/">
+           Numeric<!--span class="nabla">&nabla;</span-->
+          </a>
+          <ul>
+           <li>
+            <a class="drop" 
+              href="javascript:popUp('menunumerictogglenumericoutput.xhtml')">
+             Toggle numeric output
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menunumerictofloat.xhtml')">
+             To float
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menunumerictobigfloat.xhtml')">
+             To bigfloat
+            </a>
+           </li>
+           <li>
+            <a class="drop" 
+               href="javascript:popUp('menunumericsetprecision.xhtml')">
+             Set precision
+            </a>
+           </li>
+          </ul>
+         </li>
+         <!-- End Simplify Menu -->
+        </ul>
+       </div>
+      </td>
+     </tr>
+    </table>
+   </form>
+  </div>
+<hr/>
+<a href="javascript:makeone();">makeone</a>
   <form id="commreq">
     <p>
       Type an input command line to Axiom:<br/>
       <input type="text" id="p1" 
        onclick="interpcall('p1');"
-       value="integrate(sin(x),x)" />
+       value="integrate(sin(x),x)" 
+       size="80" />
     </p>
   </form>
   <center>
@@ -38981,6 +40574,966 @@ Enter search string (use <b>*</b> for wild card unless counter-indicated):
 <<page foot>>
 @
 
+\subsection{menualgebraadjointmatrix.xhtml}
+<<menualgebraadjointmatrix.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebraadjointmatrix not implemented
+<<page foot>>
+@
+
+\subsection{menualgebraapplytolist.xhtml}
+<<menualgebraapplytolist.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebraapplytolist not implemented
+<<page foot>>
+@
+
+\subsection{menualgebracharacteristicpolynomial.xhtml}
+<<menualgebracharacteristicpolynomial.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebracharacteristicpolynomial not implemented
+<<page foot>>
+@
+
+\subsection{menualgebradeterminant.xhtml}
+<<menualgebradeterminant.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebradeterminant not implemented
+<<page foot>>
+@
+
+\subsection{menualgebraeigenvalues.xhtml}
+<<menualgebraeigenvalues.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebraeigenvalues not implemented
+<<page foot>>
+@
+
+\subsection{menualgebraeigenvectors.xhtml}
+<<menualgebraeigenvectors.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebraeigenvectors not implemented
+<<page foot>>
+@
+
+\subsection{menualgebraentermatrix.xhtml}
+<<menualgebraentermatrix.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebraentermatrix not implemented
+<<page foot>>
+@
+
+\subsection{menualgebrainvertmatrix.xhtml}
+<<menualgebrainvertmatrix.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebrainvertmatrix not implemented
+<<page foot>>
+@
+
+\subsection{menualgebrageneratematrix.xhtml}
+<<menualgebrageneratematrix.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebrageneratematrix not implemented
+<<page foot>>
+@
+
+\subsection{menualgebramakelist.xhtml}
+<<menualgebramakelist.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebramakelist not implemented
+<<page foot>>
+@
+
+\subsection{menualgebramaptolist.xhtml}
+<<menualgebramaptolist.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebramaptolist not implemented
+<<page foot>>
+@
+
+\subsection{menualgebramaptomatrix.xhtml}
+<<menualgebramaptomatrix.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebramaptomatrix not implemented
+<<page foot>>
+@
+
+\subsection{menualgebrareducelist.xhtml}
+<<menualgebrareducelist.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebrareducelist not implemented
+<<page foot>>
+@
+
+\subsection{menualgebratransposematrix.xhtml}
+<<menualgebratransposematrix.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menualgebratransposematrix not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomaddtopath.xhtml}
+<<menuaxiomaddtopath.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomaddtopath not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomclearmemory.xhtml}
+<<menuaxiomclearmemory.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomclearmemory not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomdeletefunction.xhtml}
+<<menuaxiomdeletefunction.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomdeletefunction not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomdeletevariable.xhtml}
+<<menuaxiomdeletevariable.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomdeletevariable not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiominterrupt.xhtml}
+<<menuaxiominterrupt.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiominterrupt not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomrestart.xhtml}
+<<menuaxiomrestart.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomrestart not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomshowdefinition.xhtml}
+<<menuaxiomshowdefinition.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomshowdefinition not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomdisplay.xhtml}
+<<menuaxiomdisplay.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomdisplay not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomset.xhtml}
+<<menuaxiomset.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomset not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomshowfunctions.xhtml}
+<<menuaxiomshowfunctions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomshowfunctions not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomshowvariables.xhtml}
+<<menuaxiomshowvariables.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomshowvariables not implemented
+<<page foot>>
+@
+
+\subsection{menuaxiomtoggletimedisplay.xhtml}
+<<menuaxiomtoggletimedisplay.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuaxiomtoggletimedisplay not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuscalculussum.xhtml}
+<<menucalculuscalculussum.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuscalculussum not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuscalculusproduct.xhtml}
+<<menucalculuscalculusproduct.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuscalculusproduct not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuschangevariable.xhtml}
+<<menucalculuschangevariable.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuschangevariable not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuscontinuedfractions.xhtml}
+<<menucalculuscontinuedfractions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuscontinuedfractions not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusdifferentiate.xhtml}
+<<menucalculusdifferentiate.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusdifferentiate not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusdividepolynomials.xhtml}
+<<menucalculusdividepolynomials.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusdividepolynomials not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusfindlimit.xhtml}
+<<menucalculusfindlimit.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusfindlimit not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusgetseries.xhtml}
+<<menucalculusgetseries.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusgetseries not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusgreatestcommondivisor.xhtml}
+<<menucalculusgreatestcommondivisor.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusgreatestcommondivisor not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusleastcommonmultiple.xhtml}
+<<menucalculusleastcommonmultiple.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusleastcommonmultiple not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusintegrate.xhtml}
+<<menucalculusintegrate.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusintegrate not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusinverselaplacetransform.xhtml}
+<<menucalculusinverselaplacetransform.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusinverselaplacetransform not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuslaplacetransform.xhtml}
+<<menucalculuslaplacetransform.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuslaplacetransform not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuslevel3.xhtml}
+<<menucalculuslevel3.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuslevel3 not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuslevel3a.xhtml}
+<<menucalculuslevel3a.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuslevel3a not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuslevel3b.xhtml}
+<<menucalculuslevel3b.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuslevel3b not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuslevel3c.xhtml}
+<<menucalculuslevel3c.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuslevel3c not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuspadeapproximation.xhtml}
+<<menucalculuspadeapproximation.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuspadeapproximation not implemented
+<<page foot>>
+@
+
+\subsection{menucalculuspartialfractions.xhtml}
+<<menucalculuspartialfractions.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculuspartialfractions not implemented
+<<page foot>>
+@
+
+\subsection{menucalculusrischintegrate.xhtml}
+<<menucalculusrischintegrate.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menucalculusrischintegrate not implemented
+<<page foot>>
+@
+
+\subsection{menueditcopy.xhtml}
+<<menueditcopy.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditcopy not implemented
+<<page foot>>
+@
+
+\subsection{menueditcopyasimage.xhtml}
+<<menueditcopyasimage.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditcopyasimage not implemented
+<<page foot>>
+@
+
+\subsection{menueditcopytex.xhtml}
+<<menueditcopytex.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditcopytex not implemented
+<<page foot>>
+@
+
+\subsection{menueditcopytext.xhtml}
+<<menueditcopytext.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditcopytext not implemented
+<<page foot>>
+@
+
+\subsection{menueditcut.xhtml}
+<<menueditcut.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditcut not implemented
+<<page foot>>
+@
+
+\subsection{menueditpaste.xhtml}
+<<menueditpaste.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditpaste not implemented
+<<page foot>>
+@
+
+\subsection{menueditdeleteselection.xhtml}
+<<menueditdeleteselection.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditdeleteselection not implemented
+<<page foot>>
+@
+
+\subsection{menueditselectiontoimage.xhtml}
+<<menueditselectiontoimage.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditselectiontoimage not implemented
+<<page foot>>
+@
+
+\subsection{menueditselectiontoinput.xhtml}
+<<menueditselectiontoinput.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menueditselectiontoinput not implemented
+<<page foot>>
+@
+
+\subsection{menuequationsrealrootsofpolynmial.xhtml}
+<<menuequationsrealrootsofpolynmial.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationsrealrootsofpolynmial not implemented
+<<page foot>>
+@
+
+\subsection{menuequationsatvalue.xhtml}
+<<menuequationsatvalue.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationsatvalue not implemented
+<<page foot>>
+@
+
+\subsection{menuequationsboundaryvalueproblem.xhtml}
+<<menuequationsboundaryvalueproblem.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationsboundaryvalueproblem not implemented
+<<page foot>>
+@
+
+\subsection{menuequationsinitialvalueproblem1.xhtml}
+<<menuequationsinitialvalueproblem1.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationsinitialvalueproblem1 not implemented
+<<page foot>>
+@
+
+\subsection{menuequationsinitialvalueproblem2.xhtml}
+<<menuequationsinitialvalueproblem2.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationsinitialvalueproblem2 not implemented
+<<page foot>>
+@
+
+\subsection{menuequationssolvealgebraicsystem.xhtml}
+<<menuequationssolvealgebraicsystem.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationssolvealgebraicsystem not implemented
+<<page foot>>
+@
+
+\subsection{menuequationseliminatevariable.xhtml}
+<<menuequationseliminatevariable.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationseliminatevariable not implemented
+<<page foot>>
+@
+
+\subsection{menuequationssolvelinearsystem.xhtml}
+<<menuequationssolvelinearsystem.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationssolvelinearsystem not implemented
+<<page foot>>
+@
+
+\subsection{menuequationssolveode.xhtml}
+<<menuequationssolveode.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationssolveode not implemented
+<<page foot>>
+@
+
+\subsection{menuequationssolveodewithlaplace.xhtml}
+<<menuequationssolveodewithlaplace.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationssolveodewithlaplace not implemented
+<<page foot>>
+@
+
+\subsection{menuequationsrootsofpolynomial.xhtml}
+<<menuequationsrootsofpolynomial.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationsrootsofpolynomial not implemented
+<<page foot>>
+@
+
+\subsection{menuequationssolve.xhtml}
+<<menuequationssolve.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationssolve not implemented
+<<page foot>>
+@
+
+\subsection{menuequationssolvenumerically.xhtml}
+<<menuequationssolvenumerically.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menuequationssolvenumerically not implemented
+<<page foot>>
+@
+
+\subsection{menufileexit.xhtml}
+<<menufileexit.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufileexit not implemented
+<<page foot>>
+@
+
+\subsection{menufileinputfile.xhtml}
+<<menufileinputfile.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufileinputfile not implemented
+<<page foot>>
+@
+
+\subsection{menufileloadlibrary.xhtml}
+<<menufileloadlibrary.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufileloadlibrary not implemented
+<<page foot>>
+@
+
+\subsection{menufileopen.xhtml}
+<<menufileopen.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufileopen not implemented
+<<page foot>>
+@
+
+\subsection{menufileprint.xhtml}
+<<menufileprint.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufileprint not implemented
+<<page foot>>
+@
+
+\subsection{menufileread.xhtml}
+<<menufileread.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufileread not implemented
+<<page foot>>
+@
+
+\subsection{menufilesave.xhtml}
+<<menufilesave.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufilesave not implemented
+<<page foot>>
+@
+
+\subsection{menufilesaveas.xhtml}
+<<menufilesaveas.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufilesaveas not implemented
+<<page foot>>
+@
+
+\subsection{menufiletogglespool.xhtml}
+<<menufiletogglespool.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menufiletogglespool not implemented
+<<page foot>>
+@
+
+\subsection{menunumericsetprecision.xhtml}
+<<menunumericsetprecision.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menunumericsetprecision not implemented
+<<page foot>>
+@
+
+\subsection{menunumerictobigfloat.xhtml}
+<<menunumerictobigfloat.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menunumerictobigfloat not implemented
+<<page foot>>
+@
+
+\subsection{menunumerictofloat.xhtml}
+<<menunumerictofloat.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menunumerictofloat not implemented
+<<page foot>>
+@
+
+\subsection{menunumerictogglenumericoutput.xhtml}
+<<menunumerictogglenumericoutput.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menunumerictogglenumericoutput not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyaddalgebraicequality.xhtml}
+<<menusimplifyaddalgebraicequality.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyaddalgebraicequality not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifycomplexsimplification.xhtml}
+<<menusimplifycomplexsimplification.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifycomplexsimplification not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifycontractlogarithms.xhtml}
+<<menusimplifycontractlogarithms.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifycontractlogarithms not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyevaluatenounform.xhtml}
+<<menusimplifyevaluatenounform.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyevaluatenounform not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyexpandexpression.xhtml}
+<<menusimplifyexpandexpression.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyexpandexpression not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyexpandlogarithms.xhtml}
+<<menusimplifyexpandlogarithms.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyexpandlogarithms not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyfactorialsandgamma.xhtml}
+<<menusimplifyfactorialsandgamma.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyfactorialsandgamma not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyfactorcomplex.xhtml}
+<<menusimplifyfactorcomplex.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyfactorcomplex not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifyfactorexpression.xhtml}
+<<menusimplifyfactorexpression.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifyfactorexpression not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifymoduluscomputation.xhtml}
+<<menusimplifymoduluscomputation.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifymoduluscomputation not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifysimplifyexpression.xhtml}
+<<menusimplifysimplifyexpression.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifysimplifyexpression not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifysubtitute.xhtml}
+<<menusimplifysubtitute.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifysubtitute not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifysimplifyradicals.xhtml}
+<<menusimplifysimplifyradicals.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifysimplifyradicals not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifytogglealgebraicflag.xhtml}
+<<menusimplifytogglealgebraicflag.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>>
+menusimplifytogglealgebraicflag not implemented
+<<page foot>>
+@
+
+\subsection{menusimplifytrigsimplification.xhtml}
+<<menusimplifytrigsimplification.xhtml>>=
+<<standard head>>
+ </head>
+ <body>
+<<page head>> 
+menusimplifytrigsimplification not implemented
+<<page foot>>
+@
+
 %%N
 \subsection{numbasicfunctions.xhtml}
 <<numbasicfunctions.xhtml>>=

\start
Date: 25 Mar 2008 11:05:34 +0100
From: Martin Rubey
To: list
Subject: understanding domain vectors, optimization etc.

Dear all,

Waldek Hebisch writes:

> Some source of inefficiency is clear: profile shows that access to matrix
> elements is done via function calls and that those calls take substantial
> time (more than arithmetic).  Also aritmetic in Z_p is done via function
> calls which is much slower than inline code.

and a little later:

> Let us at maxColIndex.  In IIARRAY2.lsp we have:
> 
> (DEFUN |IIARRAY2;maxColIndex;$I;7| (|m| $)
>   (- (+ (SPADCALL |m| (QREFELT $ 28)) (QREFELT $ 8)) 1))
> 
> which means: 
>  1) maxColIndex get m as normal argument, and has the second argument
>     called '$' which is a "domain vector" (a vector which is a runtime
>     representation of a type).
>  2) first we take element 28 from domain vector of current domain and call
>     it giving it m as argument.  The call also must pass correct domain
>     vector, I am too lazy to check what this will be, but the SPADCALL
>     macro is responsible for passing it.
>  3) next, we fetch element number 8 from domain vestor and add it
>     to the result of previous call.
>  4) finally we substract 1 to get final result.
> 
> Note that Lisp compiler have no idea what m can be.  Also, since we have:
> 
>     maxColIndex m == ncols m + mnCol - 1
> 
> I can deduce that (SPADCALL |m| (QREFELT $ 28)) corresponds to ncols m, but
> Lisp compiler have no idea which function will be called.

I was looking a little closer at the lisp code generated by the SPAD compiler.
There are still a few things I do not understand:

a) how is some function like |IIARRAY2;maxColIndex;$I;7| actually called?  More
   precisely, where does it get it's second argument (the domain vector) from?

b) isn't the domain vector constant for domains and packages?  I guess it won't
   be constant for default domains, right?  I believe it should be that way,
   because there is no way that a function definition in a domain or package
   can be overridden, contrary to default definitions in categories.

c) how does SPADCALL work?  I tried:

    (1) -> )lisp (macroexpand '(SPADCALL |m| (QREFELT $ 28)))
    
    Value = (LET ((#:G1406 (QREFELT $ 28)))
              (THE (VALUES T) (FUNCALL (CAR #:G1406) |m| (CDR #:G1406))))


   and I know that (QREFELT $ 28) produces element number 28 from the domain
   vector, but I was (so far) unable to find out what it looks like precisely.

   At the end of IIARRAY2.NRLIB/code.lsp I find a MAKEPROP statement which
   seems to take three arguments, the third one being a list with a couple of
   elements, whose car is a vector that has as element 28
   |IIARRAY2;ncols;$Nni;9|.  So, that has clearly something to do with the
   domain vector, but it's only half the story...


In fact, b) may be the most important question: if I'm right and the domain
vector is indeed constant for domains, then there may be some room for
optimization -- given that a lisp compiler will not optimize away the FUNCALL
in

    (LET ((#:G1406 (QREFELT $ 28)))
      (THE (VALUES T) (FUNCALL (CAR #:G1406) |m| (CDR #:G1406))))

???


I believe -- since IIARRAY2 is a domain --

    maxColIndex m == ncols m + mnCol - 1 

which currently translates to

    (DEFUN |IIARRAY2;maxColIndex;$I;7| (|m| $)
        (- (+ (SPADCALL |m| (QREFELT $ 28)) (QREFELT $ 8)) 1))

could become something like

    (DEFUN |IIARRAY2;maxColIndex;$I;7| (|m| $)
        (- (+ (|IIARRAY2;ncols;$Nni;9| |m| $) (QREFELT $ 8)) 1))

\start
Date: 25 Mar 2008 11:26:22 +0100
From: Martin Rubey
To: list
Subject: Re: understanding domain vectors, optimization etc.


> b) isn't the domain vector constant for domains and packages?  I guess it won't
>    be constant for default domains, right?  I believe it should be that way,
>    because there is no way that a function definition in a domain or package
>    can be overridden, contrary to default definitions in categories.

sorry, I should have been more precise than that: I realize that it is not
constant as a whole, since the domain constructor may have parameters.  What I
meant is that (qrefelt $ nn) is constant.  I guess not even that is entirely
correct, but mostly.

\start
Date: Tue, 25 Mar 2008 11:49:19 -0600
From: Tim Daly
To: list
Subject: 20080325.01.tpd.patch (mathml invisibletimes regression testing)

This fixes the mathml.input.pamphlet testing for invisibletimes.

Tim

=======================================================================
diff --git a/changelog b/changelog
index 50efc4a..b27a52a 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080325 tpd src/input/mathml.input fix invisibletimes regression tests
 20080323 tpd src/hyper/bookvol11 add menus
 20080318 tpd src/input/kamke2.input check results using Maxima
 20080317 tpd src/input/kamke2.input check results using Maple
diff --git a/src/input/mathml.input.pamphlet b/src/input/mathml.input.pamphlet
index 0cbcf7b..a19b868 100644
--- a/src/input/mathml.input.pamphlet
+++ b/src/input/mathml.input.pamphlet
@@ -30,9 +30,9 @@ coerce(%)$MMLFORM
 --R
 --R   (2)
 --R  "<mrow><mrow><msup><mrow><mi>y</mi></mrow><mrow><mn>2</mn></mrow></msup></mro
---R  w><mo>+</mo><mrow><mn>2</mn><mo>&#x02062;</mo><mi>x</mi><mo>&#x02062;</mo><mi
---R  >y</mi></mrow><mo>+</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></
---R  mrow></msup></mrow></mrow>"
+--R  w><mo>+</mo><mrow><mn>2</mn><mspace width='0.3em'/><mi>x</mi><mspace width='0
+--R  .3em'/><mi>y</mi></mrow><mo>+</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><m
+--R  n>2</mn></mrow></msup></mrow></mrow>"
 --R                                                                 Type: String
 --E 2
 
@@ -49,7 +49,7 @@ coerce(%)$MMLFORM
 display(coerce(%)$MMLFORM)$MMLFORM
 --R 
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mrow><msup><mrow><mi>y</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mo>+</mo><mrow><mn>2</mn><mo>&#x02062;</mo><mi>x</mi><mo>&#x02062;</mo><mi>y</mi></mrow><mo>+</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow>
+--R<mrow><mrow><msup><mrow><mi>y</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mo>+</mo><mrow><mn>2</mn><mspace width='0.3em'/><mi>x</mi><mspace width='0.3em'/><mi>y</mi></mrow><mo>+</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow>
 --R</math>
 --R                                                                   Type: Void
 --E 4
@@ -58,11 +58,12 @@ display(coerce(%)$MMLFORM)$MMLFORM
 
 --S 5 of 21
 (x+y)**2
+--R 
 --R
 --R         2           2
 --R   (5)  y  + 2x y + x
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mrow><msup><mrow><mi>y</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mo>+</mo><mrow><mn>2</mn><mo>&#x02062;</mo><mi>x</mi><mo>&#x02062;</mo><mi>y</mi></mrow><mo>+</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow>
+--R<mrow><mrow><msup><mrow><mi>y</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow><mo>+</mo><mrow><mn>2</mn><mspace width='0.3em'/><mi>x</mi><mspace width='0.3em'/><mi>y</mi></mrow><mo>+</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow>
 --R</math>
 --R
 --R                                                     Type: Polynomial Integer
@@ -70,6 +71,7 @@ display(coerce(%)$MMLFORM)$MMLFORM
 
 --S 6 of 21
 integrate(x**x,x)
+--R 
 --R
 --R           x
 --R         ++    %I
@@ -84,6 +86,7 @@ integrate(x**x,x)
 
 --S 7 of 21
 integral(x**x,x)
+--R 
 --R
 --R           x
 --R         ++    %I
@@ -98,12 +101,13 @@ integral(x**x,x)
 
 --S 8 of 21
 (5+sqrt 63 + sqrt 847)**(1/3)
+--R 
 --R
 --R         +----------+
 --R        3|   +-+
 --R   (8)  \|14\|7  + 5
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mroot><mrow><mrow><mrow><mrow><mrow><mn>14</mn></mrow><mo>&#x02062;</mo><msqrt><mrow><mn>7</mn></mrow></msqrt></mrow><mo>+</mo><mn>5</mn></mrow></mrow></mrow><mn>3</mn></mroot></mrow>
+--R<mrow><mroot><mrow><mrow><mrow><mrow><mrow><mn>14</mn></mrow><mspace width='0.3em'/><msqrt><mrow><mn>7</mn></mrow></msqrt></mrow><mo>+</mo><mn>5</mn></mrow></mrow></mrow><mn>3</mn></mroot></mrow>
 --R</math>
 --R
 --R                                                        Type: AlgebraicNumber
@@ -111,6 +115,7 @@ integral(x**x,x)
 
 --S 9 of 21
 set [1,2,3]
+--R 
 --R
 --R   (9)  {1,2,3}
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
@@ -122,6 +127,7 @@ set [1,2,3]
 
 --S 10 of 21
 multiset [x rem 5 for x in primes(2,1000)]
+--R 
 --R
 --R   (10)  {0,40: 1,47: 2,42: 3,38: 4}
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
@@ -133,13 +139,14 @@ multiset [x rem 5 for x in primes(2,1000)]
 
 --S 11 of 21
 series(sin(a*x),x=0)
+--R 
 --R
 --R                3        5        7          9            11
 --R               a   3    a   5    a    7     a     9      a      11      12
 --R   (11)  a x - -- x  + --- x  - ---- x  + ------ x  - -------- x   + O(x  )
 --R                6      120      5040      362880      39916800
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mrow><mi>a</mi><mo>&#x02062;</mo><mi>x</mi></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mrow><mn>6</mn></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mrow><mrow><mn>120</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mrow><mrow><mn>5040</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mrow><mrow><mn>362880</mn></mrow></!
mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mrow><mrow><mn>39916800</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>12</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
+--R<mrow><mrow><mi>a</mi><mspace width='0.3em'/><mi>x</mi></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mrow><mn>6</mn></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mrow><mrow><mn>120</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mrow><mrow><mn>5040</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mrow><mrow><mn>!
362880</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><msup><mrow><mi>a</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mrow><mrow><mn>39916800</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>12</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
 --R</math>
 --R
 --R                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
@@ -147,6 +154,7 @@ series(sin(a*x),x=0)
 
 --S 12 of 21
 matrix [[xi+yj for i in 1..10] for j in 1..10]
+--R 
 --R
 --R   (12)
 --R   [
@@ -198,6 +206,7 @@ matrix [[xi+yj for i in 1..10] for j in 1..10]
 
 --S 13 of 21
 y:=operator 'y
+--R 
 --R
 --R   (13)  y
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
@@ -262,6 +271,7 @@ x:=series 'x
 
 --S 18 of 21
 sin(1+x)
+--R 
 --R
 --R   (4)
 --R                        sin(1)  2   cos(1)  3   sin(1)  4   cos(1)  5
@@ -272,7 +282,7 @@ sin(1+x)
 --R     - ------ x  - ------ x  + ------ x  + ------ x  - ------- x   + O(x  )
 --R         720        5040        40320      362880      3628800
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow><mo>+</mo><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow><mo>&#x02062;</mo><mi>x</mi></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mn>2</mn></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mn>6</mn></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>24</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>4</mn></mrow></msup></mrow></mro!
w><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>120</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>720</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>6</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>5040</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>40320</mn></mrow></mrow></mfrac></mrow><mo>&!
#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>8</!
mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>362880</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>3628800</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>10</mn></mrow></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
+--R<mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow><mo>+</mo><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow><mspace width='0.3em'/><mi>x</mi></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mn>2</mn></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mn>6</mn></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>24</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>4</mn></mrow!
></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>120</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>720</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>6</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>5040</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>40320</mn!
></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><m!
sup><mrow><mi>x</mi></mrow><mrow><mn>8</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>cos</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>362880</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mo><mo>sin</mo></mo><mo>(</mo><mrow><mn>1</mn></mrow><mo>)</mo></mrow></mrow><mrow><mrow><mn>3628800</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>10</mn></mrow></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mi>x</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
 --R</math>
 --R
 --R                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
@@ -282,6 +292,7 @@ sin(1+x)
 
 --S 19 of 21
 series(1/log(y),y=1)
+--R 
 --R
 --R   (1)
 --R            - 1   1    1            1        2    19        3    3         4
@@ -296,7 +307,7 @@ series(1/log(y),y=1)
 --R     - --------- (y - 1)  + O((y - 1)  )
 --R       479001600
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow></msup></mrow><mo>+</mo><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><mrow><mn>12</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><mrow><mn>24</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>19</mn></mrow></mrow><mrow><mrow><mn>720</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><m!
row><mrow><mfrac><mrow><mn>3</mn></mrow><mrow><mrow><mn>160</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>4</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>863</mn></mrow></mrow><mrow><mrow><mn>60480</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mn>275</mn></mrow></mrow><mrow><mrow><mn>24192</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>6</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>33953</mn></mrow></mrow><mrow><mrow><mn>3628800</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>!
1</mn><mo>)</mo></mrow></mrow><mrow><mn>7</mn></mrow></msup><!
/mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mn>8183</mn></mrow></mrow><mrow><mrow><mn>1036800</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>8</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>3250433</mn></mrow></mrow><mrow><mrow><mn>479001600</mn></mrow></mrow></mfrac></mrow><mo>&#x02062;</mo><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mrow><mn>10</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
+--R<mrow><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow></msup></mrow><mo>+</mo><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><mrow><mn>12</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mn>1</mn></mrow><mrow><mrow><mn>24</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>19</mn></mrow></mrow><mrow><mrow><mn>720</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>3</mn></mrow></msup></mrow></mr!
ow><mo>+</mo><mrow><mrow><mfrac><mrow><mn>3</mn></mrow><mrow><mrow><mn>160</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>4</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>863</mn></mrow></mrow><mrow><mrow><mn>60480</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mn>275</mn></mrow></mrow><mrow><mrow><mn>24192</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>6</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>33953</mn></mrow></mrow><mrow><mrow><mn>3628800</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow!
><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></m!
row><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mrow><mfrac><mrow><mrow><mn>8183</mn></mrow></mrow><mrow><mrow><mn>1036800</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>8</mn></mrow></msup></mrow></mrow><mo>-</mo><mrow><mrow><mfrac><mrow><mrow><mn>3250433</mn></mrow></mrow><mrow><mrow><mn>479001600</mn></mrow></mrow></mfrac></mrow><mspace width='0.3em'/><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mrow><mrow><mrow><mn>10</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
 --R</math>
 --R
 --R                        Type: UnivariatePuiseuxSeries(Expression Integer,y,1)
@@ -306,6 +317,7 @@ series(1/log(y),y=1)
 
 --S 20 of 21
 y:UTS(FLOAT,'z,0):=exp(z)
+--R 
 --R
 --R   (1)
 --R                    2                            3
@@ -323,7 +335,7 @@ y:UTS(FLOAT,'z,0):=exp(z)
 --R                                   10      11
 --R     0.2755731922 3985890653 E -6 z   + O(z  )
 --R<math xmlns="http://www.w3.org/1998/Math/MathML" mathsize="big" display="block">
---R<mrow><mn>1.0</mn><mo>+</mo><mi>z</mi><mo>+</mo><mrow><mn>0.5</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.1666666666 6666666667</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0416666666 6666666666 7</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>4</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0083333333 3333333333 34</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0013888888 8888888888 89</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>6</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0001984126 9841269841 27</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0000248015 8730158730 1587</mn><mo>&#x02062;</mo><mrow><msup><mr!
ow><mi>z</mi></mrow><mrow><mn>8</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0000027557 3192239858 90653</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.2755731922 3985890653 E -6</mn><mo>&#x02062;</mo><mrow><msup><mrow><mi>z</mi></mrow><mrow><mrow><mn>10</mn></mrow></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mi>z</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
+--R<mrow><mn>1.0</mn><mo>+</mo><mi>z</mi><mo>+</mo><mrow><mn>0.5</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.1666666666 6666666667</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>3</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0416666666 6666666666 7</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>4</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0083333333 3333333333 34</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>5</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0013888888 8888888888 89</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>6</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0001984126 9841269841 27</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>7</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0000248015 8730158730 1587</mn><ms!
pace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>8</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.0000027557 3192239858 90653</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mn>9</mn></mrow></msup></mrow></mrow><mo>+</mo><mrow><mn>0.2755731922 3985890653 E -6</mn><mspace width='0.3em'/><mrow><msup><mrow><mi>z</mi></mrow><mrow><mrow><mn>10</mn></mrow></mrow></msup></mrow></mrow><mo>+</mo><mrow><mo><mi>O</mi></mo><mo>(</mo><mrow><mrow><msup><mrow><mi>z</mi></mrow><mrow><mrow><mn>11</mn></mrow></mrow></msup></mrow></mrow><mo>)</mo></mrow></mrow>
 --R</math>
 --R
 --R                                    Type: UnivariateTaylorSeries(Float,z,0.0)
@@ -331,6 +343,7 @@ y:UTS(FLOAT,'z,0):=exp(z)
 
 --S 21 of 21
 c:=continuedFraction(314159/100000)
+--R 
 --R
 --R              1 |     1  |     1 |     1  |     1 |     1 |     1 |
 --R   (2)  3 + +---+ + +----+ + +---+ + +----+ + +---+ + +---+ + +---+


\start
Date: Tue, 25 Mar 2008 11:59:41 -0600
From: Tim Daly
To: list
Subject: 20080325.02.tpd.patch

The display command now generates examples when displaying operations.
This code has been picked up, documented, and added to book volume 5
(the interpreter). This is the first step of tree-shaking the display code.

Tim

=========================================================================
diff --git a/changelog b/changelog
index b27a52a..b44d9d4 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20080325 tpd src/interp/interp-proclaims.lisp case-change display
+20080325 tpd src/interp/i-syscmd.boot treeshake display to bookvol5
+20080325 tpd src/interp/bookvol5 document display function
 20080325 tpd src/input/mathml.input fix invisibletimes regression tests
 20080323 tpd src/hyper/bookvol11 add menus
 20080318 tpd src/input/kamke2.input check results using Maxima
diff --git a/src/interp/bookvol5.pamphlet b/src/interp/bookvol5.pamphlet
index d3ebb9b..f8fb4a2 100644
--- a/src/interp/bookvol5.pamphlet
+++ b/src/interp/bookvol5.pamphlet
@@ -1243,6 +1243,7 @@ this is what the current code does so I won't change it.
 
 @
 \chapter{System Command Handling}
+\section{Variables Used}
 \subsection{defvar \$systemCommands}
 The system commands are the top-level commands available in Axiom
 that can all be invoked by prefixing the symbol with a closed-paren. 
@@ -1435,7 +1436,7 @@ during a session are pushed onto this list for later lookup.
  (setq |$CommandSynonymAlist| (copy-alist |$InitialCommandSynonymAlist|)))
 
 @
-
+\section{Functions}
 \subsection{defun ncloopCommand}
 The \$systemCommandFunction is set in SpadInterpretStream
 to point to the function InterpExecuteSpadSystemCommand.
@@ -1514,6 +1515,269 @@ token in the string. If the string only 0 or more blanks it returns nil.
      (list (subseq x nonblank) "")))))
 
 @
+\chapter{The Display Command}
+\section{)display}
+\begin{verbatim}
+  )display abbreviations 
+  )display abbreviations [obj]
+  )display all
+  )display macros
+  )display mode all
+  )display mode [obj1 [obj2 ...]]
+  )display names
+  )display operations opname
+  )display properties
+  )display properties all
+  )display properties [obj1 [obj2 ...]]
+  )display value all
+  )display value [obj1 [obj2 ...]]
+\end{verbatim}
+
+This command is used to display the contents of the workspace and
+signatures of functions with a given name. A signature gives the
+argument and return types of a function.
+
+The command
+\begin{verbatim}
+  )display abbreviations 
+  )display abbreviations [obj]
+\end{verbatim}
+will show all of the abbreviations in the current workspace.
+
+The command
+\begin{verbatim}
+  )display all 
+\end{verbatim}
+is equivalent to 
+\begin{verbatim}
+  )display properties
+\end{verbatim}
+
+The command
+\begin{verbatim}
+  )display macros
+\end{verbatim}
+will show all of the macros in the current workspace.
+
+
+The command
+\begin{verbatim}
+  )display names
+\end{verbatim}
+lists the names of all user-defined objects in the workspace. This is
+useful if you do not wish to see everything about the objects and need
+only be reminded of their names.
+
+To just show the declared mode of ``d'', issue
+\begin{verbatim}
+  )display mode d
+\end{verbatim}
+
+All modemaps for a given operation may be displayed by using
+\begin{verbatim}
+  )display operations
+\end{verbatim}
+
+A modemap is a collection of information about a particular reference
+to an operation. This includes the types of the arguments and the
+return value, the location of the implementation and any conditions on
+the types. The modemap may contain patterns. The following displays
+the modemaps for the operation {\bf complex}:
+\begin{verbatim}
+  )d op complex
+\end{verbatim}
+
+In addition to the modemaps for an operation the request to display
+an operation will be followed by examples of the operation from each
+domain.
+
+The commands
+\begin{verbatim}
+  )display all
+  )display properties
+  )display properties all
+\end{verbatim}
+all do the  same thing: show the values and types and declared modes
+of all variables in the workspace. If you have defined functions,
+their signatures and definitions will also be displayed.
+
+To show all information about a particular variable or user functions,
+for example, something named ``d'', issue
+\begin{verbatim}
+  )display properties d
+\end{verbatim}
+
+To just show the value (and the type) of ``d'', issue
+\begin{verbatim}
+  )display value d
+\end{verbatim}
+\section{Variables Used}
+\subsection{defvar \$displayOptions}
+The current value of \$displayOptions is
+
+<<initvars>>=
+(defvar |$displayOptions| 
+ '(|abbreviations| |all| |macros| |modes| |names| |operations| 
+   |properties| |types| |values|))
+
+@
+
+\section{Data Structures}
+\section{Functions}
+\subsection{defun display}
+This trivial function satisfies the standard pattern of making a
+user command match the name of the function which implements the
+command. That command immediatly invokes a ``Spad2Cmd'' version.
+<<defun display>>=
+(defun |display| (l)
+ (displaySpad2Cmd l)) 
+
+@
+
+\subsection{displaySpad2Cmd}
+We process the options to the command and call the appropriate
+display function. There are really only 4 display functions.
+All of the other options are just subcases.
+
+There is a slight mismatch between the \$displayOptions list of
+symbols and the options this command accepts so we have a cond
+branch to clean up the option variable.
+
+If we fall all the way thru we use the \$displayOptions list
+to construct a list of strings for the sayMessage function
+and tell the user what options are available.
+<<defun displaySpad2Cmd>>=
+(defun displaySpad2Cmd (l)
+ (declare (special |$e|))
+ (let ((|$e| |$EmptyEnvironment|) (opt (car l)) (vl (cdr l)) 
+       option optList msg)
+  (if (and (pairp l) (not (eq opt '?)))
+   (progn
+    (setq option (|selectOptionLC| opt |$displayOptions| '|optionError|))
+    (cond
+     ((eq option '|all|)
+       (setq l (list '|properties|))
+       (setq option '|properties|))
+     ((or (eq option '|modes|) (eq option '|types|))
+       (setq l (cons '|type| vl))
+       (setq option '|type|))
+     ((eq option '|values|)
+       (setq l (cons '|value| vl))
+       (setq option '|value|)))
+    (cond 
+     ((eq option '|abbreviations|)
+      (if (null vl)
+        (|listConstructorAbbreviations|)
+        (dolist (v vl) (|abbQuery| (|opOf| v)))))
+     ((eq option '|operations|) (|displayOperations| vl))
+     ((eq option '|macros|) (|displayMacros| vl))
+     ((eq option '|names|) (|displayWorkspaceNames|))
+     (t (|displayProperties| option l))))
+   (|sayMessage|
+    (append 
+      '("  )display keyword arguments are")
+      (mapcar #'(lambda (x) (format nil "~%     ~a" x)) |$displayOptions|)
+      (format nil "~%  or abbreviations thereof"))))))
+
+@
+\subsection{defun displayOperations}
+This function takes a list of operation names. If the list is null
+we query the user to see if they want all operations printed. Otherwise
+we print the information for the requested symbols.
+<<defun displayOperations>>=
+(defun |displayOperations| (l)
+ (if l
+  (dolist (op l) (|reportOpSymbol| op))
+  (if (yesanswer)
+   (dolist (op (|allOperations|)) (|reportOpSymbol| op))
+   (|sayKeyedMsg| 's2iz0059 nil))))
+
+@
+\subsection{defun yesanswer}
+This is a trivial function to simplify the logic of displaySpad2Cmd.
+If the user didn't supply an argument to the )display op command
+we ask if they wish to have all information about all Axiom operations
+displayed. If the answer is either Y or YES we return true else nil.
+<<defun yesanswer>>=
+(defun yesanswer ()
+ (memq (string2id-n (upcase (|queryUserKeyedMsg| 's2iz0058 nil)) 1) '(y yes)))
+
+@
+
+\subsection{defun displayMacros}
+;displayMacros names ==
+;  imacs := getInterpMacroNames()
+;  pmacs := getParserMacroNames()
+;  macros :=
+;     null names => APPEND (imacs, pmacs)
+;     names
+;  macros := REMDUP macros
+;  null macros => sayBrightly '"   There are no Axiom macros."
+;  -- first do user defined ones
+;  first := true
+;  for macro in macros repeat
+;    macro in pmacs =>
+;        if first then
+;            sayBrightly ['%l,'"User-defined macros:"]
+;            first := NIL
+;        displayParserMacro macro
+;    macro in imacs => 'iterate
+;    sayBrightly (["   ",'%b, macro, '%d, " is not a known Axiom macro."])
+;  -- now system ones
+;  first := true
+;  for macro in macros repeat
+;    macro in imacs =>
+;        macro in pmacs => 'iterate
+;        if first then
+;            sayBrightly ['%l,'"System-defined macros:"]
+;            first := NIL
+;        displayMacro macro
+;    macro in pmacs => 'iterate
+;  NIL
+<<defun displayMacros>>=
+(defun |displayMacros| (names)
+ (let (imacs pmacs macros first)
+  (setq imacs (|getInterpMacroNames|))
+  (setq pmacs (|getParserMacroNames|))
+  (if names
+    (setq macros names)
+    (setq macros (append imacs pmacs)))
+  (setq macros (remdup macros))
+  (cond
+   ((null macros) (|sayBrightly| "   There are no Axiom macros."))
+   (t
+     (setq first t)
+     (do ((t0 macros (cdr t0)) (macro nil))
+         ((or (atom t0) (progn (setq macro (car t0)) nil)) nil)
+      (seq
+       (exit
+        (cond
+         ((|member| macro pmacs)
+           (cond
+            (first (|sayBrightly| (cons '|%l| (cons "User-defined macros:" nil))) (setq first nil)))
+           (|displayParserMacro| macro))
+         ((|member| macro imacs) '|iterate|)
+         (t (|sayBrightly| (cons "   " (cons '|%b| (cons macro (cons '|%d| (cons " is not a known Axiom macro." nil)))))))))))
+     (setq first t)
+     (do ((t1 macros (cdr t1)) (macro nil))
+         ((or (atom t1) (progn (setq macro (car t1)) nil)) nil)
+      (seq
+       (exit
+        (cond
+         ((|member| macro imacs)
+           (cond
+            ((|member| macro pmacs) '|iterate|)
+            (t 
+             (cond
+              (first
+               (|sayBrightly|
+                (cons '|%l|
+                 (cons "System-defined macros:" nil))) (setq first nil)))
+             (|displayMacro| macro))))
+         ((|member| macro pmacs) '|iterate|)))))
+     nil)))) 
+
+@
 \chapter{The History Mechanism}
 \section{)history}
 \index{ugSysCmdhistory}
@@ -4331,7 +4595,7 @@ findFrameInRing(name) ==
       (exit val))))))) 
 
 @
-\subsection{updateCurrentInterpreterFrame}
+\subsection{defun updateCurrentInterpreterFrame}
 \begin{verbatim}
 updateCurrentInterpreterFrame() ==
   RPLACA($interpreterFrameRing,createCurrentInterpreterFrame())
@@ -5951,7 +6215,11 @@ DEBUGSYS=${OBJ}/${SYS}/bin/debugsys
 <<defun dewritify,is?>>
 <<defun diffAlist>>
 <<defun disableHist>>
+<<defun display>>
 <<defun displayFrameNames>>
+<<defun displayMacros>>
+<<defun displayOperations>>
+<<defun displaySpad2Cmd>>
 
 <<defun emptyInterpreterFrame>>
 
@@ -6060,6 +6328,8 @@ DEBUGSYS=${OBJ}/${SYS}/bin/debugsys
 <<defun writeHistModesAndValues>>
 <<defun writeInputLines>>
 
+<<defun yesanswer>>
+
 @
 \chapter{Makefile.bookvol5}
 <<*>>=
diff --git a/src/interp/i-syscmd.boot.pamphlet b/src/interp/i-syscmd.boot.pamphlet
index 0cac608..b9a20d3 100644
--- a/src/interp/i-syscmd.boot.pamphlet
+++ b/src/interp/i-syscmd.boot.pamphlet
@@ -148,18 +148,6 @@ SETANDFILEQ($clearOptions, '( _
   values  _
   ))
 
-SETANDFILEQ($displayOptions, '( _
-  abbreviations _
-  all _
-  macros _
-  modes _
-  names _
-  operations  _
-  properties _
-  types _
-  values _
-  ))
-
 SETANDFILEQ($countAssoc,'( (cache countCache) ))
 
 --% Top level system command
@@ -844,76 +832,6 @@ credits() ==
 
 --% )display
 
-display l == displaySpad2Cmd l
-
-displaySpad2Cmd l ==
-  $e: local := $EmptyEnvironment
-  l is [opt,:vl] and opt ^= "?" =>
-    option := selectOptionLC(opt,$displayOptions,'optionError) =>
-
-      -- the option may be given in the plural but the property in
-      -- the alist is sometimes singular
-
-      option :=
-        option = 'all   =>
-            l := ['properties]
-            'properties
-        (option = 'modes) or (option = 'types) =>
-            l := ['type, :vl]
-            'type
-        option = 'values =>
-            l := ['value, :vl]
-            'value
-        option
-
-      option = 'abbreviations =>
-        null vl => listConstructorAbbreviations()
-        for v in vl repeat abbQuery(opOf v)
-
-      option = 'operations =>     displayOperations vl
-      option = 'macros =>         displayMacros vl
-      option = 'names =>          displayWorkspaceNames()
-      displayProperties(option,l)
-  optList:= [:['%l,'"        ",x] for x in $displayOptions]
-  msg := [:bright '"  )display",'"keyword arguments are",
-    :bright optList,'%l,'"   or abbreviations thereof."]
-  sayMessage msg
-
-displayMacros names ==
-  imacs := getInterpMacroNames()
-  pmacs := getParserMacroNames()
-  macros :=
-     null names => APPEND (imacs, pmacs)
-     names
-  macros := REMDUP macros
-
-  null macros => sayBrightly '"   There are no Axiom macros."
-
-  -- first do user defined ones
-
-  first := true
-  for macro in macros repeat
-    macro in pmacs =>
-        if first then
-            sayBrightly ['%l,'"User-defined macros:"]
-            first := NIL
-        displayParserMacro macro
-    macro in imacs => 'iterate
-    sayBrightly (["   ",'%b, macro, '%d, " is not a known Axiom macro."])
-
-  -- now system ones
-
-  first := true
-  for macro in macros repeat
-    macro in imacs =>
-        macro in pmacs => 'iterate
-        if first then
-            sayBrightly ['%l,'"System-defined macros:"]
-            first := NIL
-        displayMacro macro
-    macro in pmacs => 'iterate
-  NIL
-
 getParserMacroNames() ==
   REMDUP [CAR mac for mac in getParserMacros()]
 
@@ -954,15 +872,6 @@ getWorkspaceNames() ==
   NMSORT [n for [n,:.] in CAAR $InteractiveFrame |
     (n ^= "--macros--" and n^= "--flags--")]
 
-displayOperations l ==
-  null l =>
-    x := UPCASE queryUserKeyedMsg("S2IZ0058",NIL)
-    if MEMQ(STRING2ID_-N(x,1),'(Y YES))
-      then for op in allOperations() repeat reportOpSymbol op
-      else sayKeyedMsg("S2IZ0059",NIL)
-    nil
-  for op in l repeat reportOpSymbol op
-
 interpFunctionDepAlists() ==
   $e : local := $InteractiveFrame
   deps := getFlag "$dependencies"
diff --git a/src/interp/interp-proclaims.lisp b/src/interp/interp-proclaims.lisp
index 016d485..85867b2 100644
--- a/src/interp/interp-proclaims.lisp
+++ b/src/interp/interp-proclaims.lisp
@@ -2250,7 +2250,7 @@
             BOOT::|displayOperationsFromLisplib| BOOT::|say2PerLine|
             BOOT::|getArgumentConstructors,fn|
             BOOT::|getArgumentConstructors,gn| BOOT::|display|
-            BOOT::|displaySpad2Cmd| BOOT::|frameEnvironment|
+            BOOT::displaySpad2Cmd BOOT::|frameEnvironment|
             BOOT::|getArgumentConstructors| BOOT::|buildLibAttrs|
             BOOT::|buildLibOps| BOOT::|splitIntoOptionBlocks|
             BOOT::|writedb| BOOT::|getFirstWord| BOOT::|f07aefSolve,fp|


\start
Date: Tue, 25 Mar 2008 12:06:42 -0600
From: Tim Daly
To: list
Subject: 20080325.03.tpd.patch (handle firefox operations page requests)

Axiom Firefox needs to look up operations information and format the pages
for display. This is the first step in that process.

Tim

===========================================================================
diff --git a/changelog b/changelog
index b44d9d4..98e26e4 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,4 @@
+20080325 tpd src/algebra/axserver.spad set up handling of operations pages
 20080325 tpd src/interp/interp-proclaims.lisp case-change display
 20080325 tpd src/interp/i-syscmd.boot treeshake display to bookvol5
 20080325 tpd src/interp/bookvol5 document display function
diff --git a/src/algebra/axserver.spad.pamphlet b/src/algebra/axserver.spad.pamphlet
index 6862900..84f72f8 100644
--- a/src/algebra/axserver.spad.pamphlet
+++ b/src/algebra/axserver.spad.pamphlet
@@ -195,16 +195,17 @@ and do a lookup for the source file.
 \subsection{makeDBPage}
 <<package AXSERV AxiomServer>>=
    makeDBPage(pathvar:String):String ==
-     params:=split(pathvar,char "?")
-     args:=split(params.2, char "&")
-     dom:=args.1
-     domi:=INTERN(dom)$Lisp
-     -- category, domain, or package?
-     constructorkind:=getDatabase(dom,"CONSTRUCTORKIND")
-     abbreviation:=getDatabase(dom, "ABBREVIATION")
-     sourcefile:=getDatabase(dom, "SOURCEFILE")
-     constructorkind.1:=upperCase constructorkind.1
-     description:=getDescription(dom)
+     params:List(String):=split(pathvar,char "?")
+     for i in 1..#params repeat WriteLine$Lisp concat ["params: ",params.i]
+     pathparts:List(String):=split(params.1,char "/")
+     for i in 1..#pathparts repeat 
+       WriteLine$Lisp concat ["pathparts: ",pathparts.i]
+     pagename:=last pathparts
+     WriteLine$Lisp concat ["pagename: ",pagename]
+     cmd:=first split(pagename,char ".")
+     WriteLine$Lisp concat ["cmd: ",cmd]
+     args:List(String):=split(params.2, char "&")
+     for i in 1..#args repeat WriteLine$Lisp concat ["args: ",args.i]
      page:String:="<!DOCTYPE html PUBLIC "
      page:=page "_"-//W3C//DTD XHTML 1.0 Strict//EN_" "
      page:=page "_"http://www.w3.org/TR/xthml1/DTD/xhtml1-strict.dtd_">"
@@ -212,56 +213,119 @@ and do a lookup for the source file.
      page:=page "<head>"
      page:=page "<meta http-equiv=_"Content-Type_" content=_"text/html_"" 
      page:=page " charset=_"us-ascii_"/>"
-     page:=page "<title>" constructorkind " " dom "</title></head>"
+     page:=page "<title>" cmd " " args.1 "</title></head>"
      page:=page "<style> html { background-color: #FFFF66; } </style>"
      page:=page "<body>"
-     page:=page "<div align=_"center_">"
-     page:=page "<img align=_"middle_" src=_"doctitle.png_"/></div><hr/>"
-     page:=page "<div align=_"center_">" constructorkind " " dom "</div><hr/>"
-     page:=page "<table>"
-     page:=page "<tr><td valign=_"top_">Description:  </td>"
-     page:=page "<td>" description  "</td></tr>"
-     page:=page "<tr><td>Abbreviation: </td><td>" abbreviation "</td></tr>"
-     page:=page "<tr><td>Source File:  </td><td>" sourcefile   "</td></tr>"
-     page:=page "</table><hr/>"
-     page:=page "<table>"
-     page:=page "<tr>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Ancestors_">Ancestors</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Dependents_">Dependents</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Exports_">Exports</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Parents_">Parents</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Users_">Users</a>"
-     page:=page "</td>"
-     page:=page "</tr>"
-     page:=page "<tr>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Attributes_">Attributes</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Examples_">Examples</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Operations_">Operations</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=SearchPath_">Search Path</a>"
-     page:=page "</td>"
-     page:=page "<td>"
-     page:=page "<a href=_"?" dom "&lookup=Uses_">Uses</a>"
-     page:=page "</td>"
-     page:=page "</tr>"
-     page:=page "</table>"
-     page:=page "</body></html>"
+     cmd = "db" =>
+      dom:=args.1
+      domi:=INTERN(dom)$Lisp
+      -- category, domain, or package?
+      constructorkind:=getDatabase(dom,"CONSTRUCTORKIND")
+      abbreviation:=getDatabase(dom, "ABBREVIATION")
+      sourcefile:=getDatabase(dom, "SOURCEFILE")
+      constructorkind.1:=upperCase constructorkind.1
+      description:=getDescription(dom)
+      page:=page "<div align=_"center_">"
+      page:=page "<img align=_"middle_" src=_"doctitle.png_"/></div><hr/>"
+      page:=page "<div align=_"center_">" constructorkind " " dom "</div><hr/>"
+      page:=page "<table>"
+      page:=page "<tr><td valign=_"top_">Description:  </td>"
+      page:=page "<td>" description  "</td></tr>"
+      page:=page "<tr><td>Abbreviation: </td><td>" abbreviation "</td></tr>"
+      page:=page "<tr><td>Source File:  </td><td>" sourcefile   "</td></tr>"
+      page:=page "</table><hr/>"
+      page:=page "<table>"
+      page:=page "<tr>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Ancestors_">Ancestors</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Dependents_">Dependents</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Exports_">Exports</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Parents_">Parents</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Users_">Users</a>"
+      page:=page "</td>"
+      page:=page "</tr>"
+      page:=page "<tr>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Attributes_">Attributes</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Examples_">Examples</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Operations_">Operations</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=SearchPath_">Search Path</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Uses_">Uses</a>"
+      page:=page "</td>"
+      page:=page "</tr>"
+      page:=page "</table>"
+     cmd = "op" =>
+      dom:=args.1
+      domi:=INTERN(dom)$Lisp
+      -- category, domain, or package?
+      constructorkind:=getDatabase(dom,"CONSTRUCTORKIND")
+      abbreviation:=getDatabase(dom, "ABBREVIATION")
+      sourcefile:=getDatabase(dom, "SOURCEFILE")
+      constructorkind.1:=upperCase constructorkind.1
+      description:=getDescription(dom)
+      page:=page "<div align=_"center_">"
+      page:=page "<img align=_"middle_" src=_"doctitle.png_"/></div><hr/>"
+      page:=page "<div align=_"center_">" constructorkind " " dom "</div><hr/>"
+      page:=page "<table>"
+      page:=page "<tr><td valign=_"top_">Description:  </td>"
+      page:=page "<td>" description  "</td></tr>"
+      page:=page "<tr><td>Abbreviation: </td><td>" abbreviation "</td></tr>"
+      page:=page "<tr><td>Source File:  </td><td>" sourcefile   "</td></tr>"
+      page:=page "</table><hr/>"
+      page:=page "<table>"
+      page:=page "<tr>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Ancestors_">Ancestors</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Dependents_">Dependents</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Exports_">Exports</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Parents_">Parents</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Users_">Users</a>"
+      page:=page "</td>"
+      page:=page "</tr>"
+      page:=page "<tr>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Attributes_">Attributes</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Examples_">Examples</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Operations_">Operations</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=SearchPath_">Search Path</a>"
+      page:=page "</td>"
+      page:=page "<td>"
+      page:=page "<a href=_"?" dom "&lookup=Uses_">Uses</a>"
+      page:=page "</td>"
+      page:=page "</tr>"
+      page:=page "</table>"
 --     WriteLine(page)$Lisp
+     page:=page "</body></html>"
      page
 @
 \subsection{readTheFile}

\start
Date: Wed, 26 Mar 2008 00:47:09 +0100 (CET)
From: Waldek Hebisch
To: Lennin Sanchez
Subject: Re: java.lang.ClassCastException

> 
> Hello !!! Im Trying to deserialize an OMElement into an Array of Objects,
> here a snippets of my code 
> 

> org.apache.axiom.om.impl.llom.util.AXIOMUtil.stringToOM(xml);
 
Looks like wrong list.  There are many things called Axiom.  This
list is about http://www.axiom-developer.org, while you seem to speak
about http://ws.apache.org/commons/axiom.

\start
Date: Tue, 25 Mar 2008 21:39:03 -0600
From: Tim Daly
To: list
Subject: Axiom March 2008 Release

Axiom March 2008 Release is up. You can get it at

github.com (git)
   git-clone git://github.com/daly/axiom.git

sourceforge.net (cvs)
   cvs -d:pserver:anonymous@axiom.cvs.sf.net:/cvsroot/axiom co -P axiom

sourceforge.net (svn)
   svn co https://axiom.svn.sf.net/svnroot/axiom/trunk/axiom axiom

axiom-developer.org (arch)
   tla get axiom--main--1

The binary downloads will soon be available at:
 <http://axiom.axiom-developer.org/axiom-website/download.html>

==============================================================================
Summary: March 2008 release

Axiom is now available at github, a git-based code repository.
This site will have the Gold version of Axiom, that is, only
code that changes at each two-month release. To get a clone type:

   git-clone git://github.com/daly/axiom.git


USER VISIBLE CHANGES

  One primary focus of this release has been extending the Firefox
  toward being a full Axiom user interface (as opposed to a simple
  hyperdoc replacement). The Firefox console page has new, AJAX
  based, dropdown menus which are planned to be dynamically updated
  to display available functions for the last computed type. This 
  should make it much easier to find the applicable functions by
  category and type. They are currently static in this release.

* Firefox Pages

 o Dropdown menus were added to the Axiom console page
 o More hyperdoc pages were translated to Firefox/html
 o Bitmaps and graphics are now properly handled in pages
 o A minor mathml fix was applied (for invisible times)

* Refcard

 o An Axiom reference card of Axiom commands was created (src/doc/refcard)

* Examples

 o It is often difficult to figure the exact arguments required to call
   any given function in Axiom. The )display operation command used to
   only show the available modemaps. This command has now been changed.
    )display operation foo
   now shows examples of function calls for foo.

* Help

 o The plot routines have new help files and documentation

PORTING

 o Axiom was ported to MAC-OSX

 o The binary download page now has binaries for 
   Ubuntu, OpenSUsE, Redhat9, Redhat72, Debian, MACOSX at 
    <http://axiom.axiom-developer.org/axiom-website/download.html>

 o Binaries for the this release will be available shortly.


INTERNALS

* Compiler changes
 o  hashtables were used to speed up compiles

* Algebra changes
 o  There are new special functions, Ei,En,Ei1,Ei2,Ei3,Ei4,Ei5,Ei6
 o  The prime and BasicSieve functions are faster
 o  The Brent/Pollard algorithm was documented
 o  Bad gcd reductions are checked (heugcd regression test file added)
 o  The plot routines have new help files and documentation

* Makefile changes
 o  Bi-capital SVN copies are no longer made

* Interpreter changes
 o  Book Volume 5 has new documentation on the display function
 o  The display function code has been translated and moved to book volume 5
 o  PI has a higher internal precision
 o  Mappings are now properly hashed for Aldor

CATS (Computer Algebra Test Suite)

 o The differential equations regression tests are being checked against
   Mathematica, Maple, and Maxima. This has happended for the kamke2.input
   regression test file and will happen for the other regression tests.

o  Complex Gamma, logGamma, and log(Gamma) have additional tests and
   documentation. 

\start
Date: Fri, 28 Mar 2008 10:35:09 -0600
From: Tim Daly
To: list
Subject: Axiom binaries for March 2008 release

The binaries for the March 2008 release are available at:
<http://axiom.axiom-developer.org/axiom-website/download.html>

\start
Date: Fri, 28 Mar 2008 11:57:32 -0600
From: Tim Daly
To: list
Subject: Google Summer of Code
Cc: Heow Eide-Goodman

LispNYC is a sponsoring organization for the Google Summer of Code 
projects. Heow Eide-Goodman still has a
few slots available for qualified projects.

In the past, Axiom has had several projects proposed. One of them
was "Create a Hyperdoc replacement/enhancement". This work has 
been ongoing recently with the new Firefox replacement. There are
several interesting tasks that need to be done, some of them are
high level design. Some suggested tasks might be:

* Integrate graphics

One of the tasks is to integrate the existing graphics into the
Firefox browser. The planned direction for this over the coming
months is to write the graphics onto the new CANVAS object. This
involves figuring out an interface to the graphics, working out 
the correct API, and constructing an AJAX interface that allows
Axiom to manipulate the canvas.

* Affordance design

I am currently designing the new crystal interface, which will first
appear as a Firefox frontend to Axiom. There are several ideas 
being prototyped. This project would involve reading in design
(Winograd "Understanding Computers and Cognition. A New Foundation
for Design"; Winograd "Bringing Design to Software", Alexander,
"A Pattern Language", etc) and high level discussions. It also
involves prototyping design ideas. You do not need to know how
to write code but a strong background in design is important.

* Contextual menus

The new Firefox interface now has menus similar to wxMaxima. However,
in Axiom the menu items are not static but depend on the type of the
current expression. For instance, "solve" does not exist for integers
and thus should not be in the menu when the last result is an integer.
A mechanism needs to be worked out to compute the menu-set for a
given type. This will involve writing Lisp code to manipulate the category
and type hierarchy of Axiom.

* Pamphlet awareness

Axiom's native file format is the pamphlet, which is a literate
program that combines latex and source code. There is a need to 
make the system pervasively aware of this format so that one can,
for example, compile directly from the pamphlet or spool output
directly to pamphlets. This involves Lisp programing and a working
knowledge of Latex.

* asdf rewrite

Axiom will move away from Makefiles soon after the Firefox front
end is fully viable. This will involve redesigning and reimplementing
the current build architecture to use asdf rather than make as the
primary organizing machine. This will involve several subtasks and
assumes a strong ANSI lisp background and a working knowledge of asdf.

* Special functions

Axiom lacks support for many special functions. These are implemented
in either Lisp or Axiom. This requires a strong math background and
an ability to program in common lisp.



There are many other projects that are on the list. And Heow is open
to non-axiom projects so you might want to send him your ideas. I'd
suggest you hurry though as the bidding should close soon.

\start
Date: Fri, 28 Mar 2008 14:36:55 -0700
From: Arthur Ralfs
To: list
Subject: Re: Google Summer of Code

Tim Daly wrote:
> * Integrate graphics
>
> One of the tasks is to integrate the existing graphics into the
> Firefox browser. The planned direction for this over the coming
> months is to write the graphics onto the new CANVAS object. This
> involves figuring out an interface to the graphics, working out 
> the correct API, and constructing an AJAX interface that allows
> Axiom to manipulate the canvas.
>
>
> Tim 
>
>   
Tim,

Are you planning to use the existing C graphics code?

\start
Date: Fri, 28 Mar 2008 18:11:40 -0500
From: Tim Daly
To: Alfredo Portes
Subject: Firefox interface

(copied to the list)
Alfredo,

The current work in the Firefox hyperdoc is to add a general purpose
"card" object. Think of an index card. Card objects have properties
(like title) and a body.

A document is a series of card objects where the first card is the
head, then there is a list of cards, some of which are latex sections
and subsections, or code chunks, and finally a biblio card set and a
tail card.

Cards can be dynamically displayed, hidden, and rearranged.

This is the mechanism that will allow pamphlet files to be sent to and
from the browser and also constructed within the browser.  A pamphlet
is just a card deck.

This allows a user to work directly with pamphlet files in the
browser. You can create a new card, title it with an expression, fill
the body with the result, and then insert the card anywhere in the
deck. You can preceed or follow the card with other cards that contain
latex or code chunks.

Menu contents are context-sensitive to the card contents so "solve"
does not show up when viewing an Integer card, or latex section cards.

I should have this working shortly.

On the back end this will interface to the new, as-yet-unpublished API
domain which exposes the functionality I mentioned, like getdatabase
and history.

\start
Date: Fri, 28 Mar 2008 18:15:01 -0500
From: Tim Daly
To: Arthur Ralfs
Subject: Re: Google Summer of Code

>> * Integrate graphics
>>
>> One of the tasks is to integrate the existing graphics into the
>> Firefox browser. The planned direction for this over the coming
>> months is to write the graphics onto the new CANVAS object. This
>> involves figuring out an interface to the graphics, working out 
>> the correct API, and constructing an AJAX interface that allows
>> Axiom to manipulate the canvas.
>>
>>
>> Tim 
>>
>>   
>Tim,
>
>Are you planning to use the existing C graphics code?

The plan is to refactor the current C graphics code so all of the
X11 calls exist as a separate API. These will be replaced by a
different set of routines, matching the API, but these new routines
will output to the CANVAS object rather than X11. 

\start
Date: Fri, 28 Mar 2008 18:26:31 -0500
From: Tim Daly
To: Alfredo Portes
Subject: Re: getDatabase

(copied to the list)

>>  On the queue of things to do is to create an API domain in spad that
>>  lifts various functions up to the user level. One of these is to
>>  lift the getdatabase information, another is to lift the history
>>  information so you can get a grip on the input expression, etc.
 
>An nice. I think this is very important to have, so format (html
>pages, etc) do not have to be generated inside Axiom and *any* GUI
>interface can display in very different formats and more
>dynamically. That is why I was thinking of having the API output XML
>(ala the whole AJAX, SOAP, etc). Thank you.

Actually, I am reformatting the interface that Arthur wrote so that
it uses JSON rather than html as much as possible. JSON (javascript
object notation) is a simple idea. Basically you describe the set
of object property-value pairs as a data structure:

var p =
{  "prop1" : "string",
   "prop2" : {
     a : "1",
     b : "string"
   },
   "prop3 : "some string"
}

and then you can do:

var q = eval("(",p,")");

and then

  q.prop1 

is valid. So I can pass the data structures for cards around and
only care how they get formatted at the very last second for display.
This is dynamically extensible since new properties can be added by
just including them in the data structure.

You'll notice that these are nothing more than Record objects in Spad.

I suppose it would be nice to lift this whole thing up to the Spad
level but I haven't thought that idea thru. The closest I've come
is the new API stuff, intending to lift system internals up to where
I can rewrite axserver without $Lisp calls, etc.

\start
Date: Sat, 29 Mar 2008 01:03:01 -0600
From: Tim Daly
To: list
Subject: 20080328.01.tpd.patch (CATS integration regression testing)

More testing of integration, part of the computer algebra test suite.

Tim

=========================================================================
diff --git a/changelog b/changelog
index f2d93ae..c467da5 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20080328 tpd src/input/Makefile add integration regression testing
+20080328 tpd src/input/schaum6.input integrals of x^2+a^2
+20080328 tpd src/input/schaum5.input integrals of sqrt(ax+b) and sqrt(px+q)
+20080328 tpd src/input/schaum4.input integrals of sqrt(ax+b) and px+q
+20080328 tpd src/input/schaum3.input integrals of ax+b and px+q
+20080328 tpd src/input/schaum2.input integrals of sqrt(ax+b)
 20080325 tpd Makefile VERSION="Axiom (March 2008)"
 20080325 tpd src/algebra/axserver.spad set up handling of operations pages
 20080325 tpd src/interp/interp-proclaims.lisp case-change display
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index 2b626c3..d4caed2 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -355,7 +355,8 @@ REGRES= algaggr.regress algbrbf.regress  algfacob.regress alist.regress  \
     r21bugsbig.regress r21bugs.regress radff.regress    radix.regress \
     realclos.regress  reclos.regress   repa6.regress    robidoux.regress \
     roman.regress     roots.regress    ruleset.regress  rules.regress \
-    schaum1.regress \
+    schaum1.regress   schaum2.regress  schaum3.regress  schaum4.regress \
+    schaum5.regress   schaum6.regress \
     scherk.regress    scope.regress    seccsc.regress \
     segbind.regress   seg.regress \
     series2.regress   series.regress   sersolve.regress set.regress \
@@ -628,6 +629,8 @@ FILES= ${OUT}/algaggr.input  ${OUT}/algbrbf.input    ${OUT}/algfacob.input \
        ${OUT}/reclos.input   ${OUT}/regset.input     \
        ${OUT}/robidoux.input ${OUT}/roman.input      ${OUT}/roots.input \
        ${OUT}/ruleset.input  ${OUT}/rules.input      ${OUT}/schaum1.input \
+       ${OUT}/schaum2.input  ${OUT}/schaum3.input    ${OUT}/schaum4.input \
+       ${OUT}/schaum5.input  ${OUT}/schaum6.input \
        ${OUT}/saddle.input \
        ${OUT}/scherk.input   ${OUT}/scope.input      ${OUT}/seccsc.input \
        ${OUT}/segbind.input  ${OUT}/seg.input        ${OUT}/series2.input \
@@ -926,7 +929,9 @@ DOCFILES= \
   ${DOC}/robidoux.input.dvi    ${DOC}/roman.input.dvi      \
   ${DOC}/romnum.as.dvi         ${DOC}/roots.input.dvi      \
   ${DOC}/ruleset.input.dvi     ${DOC}/rules.input.dvi      \
-  ${DOC}/schaum1.input.dvi \
+  ${DOC}/schaum1.input.dvi     ${DOC}/schaum2.input.dvi \
+  ${DOC}/schaum3.input.dvi     ${DOC}/schaum4.input.dvi \
+  ${DOC}/schaum5.input.dvi     ${DOC}/schaum6.input.dvi \
   ${DOC}/s01eaf.input.dvi      ${DOC}/s13aaf.input.dvi     \
   ${DOC}/s13acf.input.dvi      ${DOC}/s13adf.input.dvi     \
   ${DOC}/s14aaf.input.dvi      ${DOC}/s14abf.input.dvi     \
diff --git a/src/input/schaum2.input.pamphlet b/src/input/schaum2.input.pamphlet
new file mode 100644
index 0000000..cb8e6db
--- /dev/null
+++ b/src/input/schaum2.input.pamphlet
@@ -0,0 +1,1464 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum2.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.84~~~~~$\displaystyle\int{\frac{dx}{\sqrt{ax+b}}}$}
+$$\int{\frac{dx}{\sqrt{ax+b}}}=\frac{2\sqrt{ax+b}}{a}$$
+<<*>>=
+)spool schaum2.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 92
+aa:=integrate(1/sqrt(a*x+b),x)
+--R 
+--R
+--R          +-------+
+--R        2\|a x + b
+--R   (1)  -----------
+--R             a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 2 of 92
+bb:=(2*sqrt(a*x+b))/a
+--R 
+--R
+--R          +-------+
+--R        2\|a x + b
+--R   (2)  -----------
+--R             a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 3 of 92
+cc:=aa-bb
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.85~~~~~$\displaystyle\int{\frac{x~dx}{\sqrt{ax+b}}}$}
+$$\int{\frac{x~dx}{\sqrt{ax+b}}}=\frac{2(ax-2b)}{3a^2}\sqrt{ax+b}$$
+<<*>>=
+)clear all
+
+--S 4 of 92
+aa:=integrate(x/sqrt(a*x+b),x)
+--R 
+--R
+--R                    +-------+
+--R        (2a x - 4b)\|a x + b
+--R   (1)  ---------------------
+--R                   2
+--R                 3a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 5 of 92
+bb:=(2*(a*x-2*b))/(3*a^2)*sqrt(a*x+b)
+--R 
+--R
+--R                    +-------+
+--R        (2a x - 4b)\|a x + b
+--R   (2)  ---------------------
+--R                   2
+--R                 3a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 6 of 92
+cc:=aa-bb
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.86~~~~~$\displaystyle\int{\frac{x^2~dx}{\sqrt{ax+b}}}$}
+$$\int{\frac{x~dx}{\sqrt{ax+b}}}=
+\frac{2(3a^2x^2-4abx+8b^2)}{15a^2}\sqrt{ax+b}$$
+<<*>>=
+)clear all
+
+--S 7 of 92
+aa:=integrate(x^2/sqrt(a*x+b),x)
+--R 
+--R
+--R           2 2               2  +-------+
+--R        (6a x  - 8a b x + 16b )\|a x + b
+--R   (1)  ---------------------------------
+--R                          3
+--R                       15a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 8 of 92
+bb:=(2*(3*a^2*x^2-4*a*b*x+8*b^2))/(15*a^3)*sqrt(a*x+b)
+--R 
+--R
+--R           2 2               2  +-------+
+--R        (6a x  - 8a b x + 16b )\|a x + b
+--R   (2)  ---------------------------------
+--R                          3
+--R                       15a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 9 of 92
+cc:=aa-bb
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.87~~~~~$\displaystyle\int{\frac{dx}{x\sqrt{ax+b}}}$}
+$$\int{\frac{dx}{x\sqrt{ax+b}}}=
+\left\{
+\begin{array}{l}
+\displaystyle
+\frac{1}{\sqrt{b}}~\ln
+\left(\frac{\sqrt{ax+b}-\sqrt{b}}{\sqrt{ax+b}+\sqrt{b}}\right)\\
+\displaystyle
+\frac{2}{\sqrt{-b}}~\tan^{-1}\sqrt{\frac{ax+b}{-b}}
+\end{array}
+\right.$$
+
+Note: the first answer assumes $b > 0$ and the second assumes $b < 0$.
+<<*>>=
+)clear all
+
+--S 10 of 92
+aa:=integrate(1/(x*sqrt(a*x+b)),x)
+--R 
+--R
+--R                  +-------+              +-+           +---+ +-------+
+--R             - 2b\|a x + b  + (a x + 2b)\|b           \|- b \|a x + b
+--R         log(-------------------------------)   2atan(----------------)
+--R                            x                                 b
+--R   (1)  [------------------------------------,- -----------------------]
+--R                          +-+                             +---+
+--R                         \|b                             \|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+Cleary Spiegel's first answer assumes $b > 0$:
+<<*>>=
+--S 11 of 92
+bb1:=1/sqrt(b)*log((sqrt(a*x+b)-sqrt(b))/(sqrt(a*x+b)+sqrt(b)))
+--R 
+--R
+--R             +-------+    +-+
+--R            \|a x + b  - \|b
+--R        log(-----------------)
+--R             +-------+    +-+
+--R            \|a x + b  + \|b
+--R   (2)  ----------------------
+--R                  +-+
+--R                 \|b
+--R                                                     Type: Expression Integer
+--E
+@
+So we try the difference of the two results
+<<*>>=
+--S 12 of 92
+cc11:=aa.1-bb1
+--R
+--R               +-------+    +-+             +-------+              +-+
+--R              \|a x + b  - \|b         - 2b\|a x + b  + (a x + 2b)\|b
+--R        - log(-----------------) + log(-------------------------------)
+--R               +-------+    +-+                       x
+--R              \|a x + b  + \|b
+--R   (3)  ---------------------------------------------------------------
+--R                                       +-+
+--R                                      \|b
+--R                                                     Type: Expression Integer
+--E
+@
+But the results don't simplify to 0. So we try some other tricks.
+
+Since both functions are of the form log(f(x))/sqrt(b) we extract
+the f(x) from each. First we get the function from Axiom's first answer:
+<<*>>=
+--S 13 of 92
+ff:=exp(aa.1*sqrt(b))
+--R
+--R             +-------+              +-+
+--R        - 2b\|a x + b  + (a x + 2b)\|b
+--R   (4)  -------------------------------
+--R                       x
+--R                                                     Type: Expression Integer
+--E
+@
+and we get the same form from Spiegel's answer
+<<*>>=
+--S 14 of 92
+gg:=exp(bb1*sqrt(b))
+--R
+--R         +-------+    +-+
+--R        \|a x + b  - \|b
+--R   (5)  -----------------
+--R         +-------+    +-+
+--R        \|a x + b  + \|b
+--R                                                     Type: Expression Integer
+--E
+@
+We can change Spiegel's form into Axiom's form because they differ by
+the constant a*sqrt(b). To see this we multiply the numerator and
+denominator by $1 == (sqrt(a*x+b) - sqrt(b))/(sqrt(a*x+b) - sqrt(b))$.
+
+First we multiply the numerator by $(sqrt(a*x+b) - sqrt(b))$
+<<*>>=
+--S 15 of 92
+gg1:=gg*(sqrt(a*x+b) - sqrt(b))
+--R
+--R            +-+ +-------+
+--R        - 2\|b \|a x + b  + a x + 2b
+--R   (6)  ----------------------------
+--R               +-------+    +-+
+--R              \|a x + b  + \|b
+--R                                                     Type: Expression Integer
+--E
+@
+Now we multiply the denominator by $(sqrt(a*x+b) - sqrt(b))$
+<<*>>=
+--S 16 of 92
+gg2:=gg1/(sqrt(a*x+b) - sqrt(b))
+--R
+--R            +-+ +-------+
+--R        - 2\|b \|a x + b  + a x + 2b
+--R   (7)  ----------------------------
+--R                     a x
+--R                                                     Type: Expression Integer
+--E
+@
+and now we multiply by the integration constant $a*sqrt(b)$
+<<*>>=
+--S 17 of 92
+gg3:=gg2*(a*sqrt(b))
+--R
+--R             +-------+              +-+
+--R        - 2b\|a x + b  + (a x + 2b)\|b
+--R   (8)  -------------------------------
+--R                       x
+--R                                                     Type: Expression Integer
+--E
+@
+and when we difference this with ff, the Axiom answer we get:
+<<*>>=
+--S 18 of 92
+ff-gg3
+--R
+--R   (9)  0
+--R                                                     Type: Expression Integer
+--E
+@
+So the constant of integration difference is $a*sqrt(b)$
+
+Now we look at the second equations. We difference Axiom's second answer
+from Spiegel's answer:
+<<*>>=
+--S 19 of 92
+t1:=aa.2-bb1
+--R
+--R                      +-------+    +-+               +---+ +-------+
+--R            +---+    \|a x + b  - \|b       +-+     \|- b \|a x + b
+--R         - \|- b log(-----------------) - 2\|b atan(----------------)
+--R                      +-------+    +-+                      b
+--R                     \|a x + b  + \|b
+--R   (10)  ------------------------------------------------------------
+--R                                   +---+ +-+
+--R                                  \|- b \|b
+--R                                                     Type: Expression Integer
+--E
+@
+and again they do not simplify to zero. But we can show that both answers
+differ by a constant because the derivative is zero:
+<<*>>=
+--S 20 of 92
+D(t1,x)
+--R
+--R   (11)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+Rather than find the constant this time we will differentiate both
+answers and compare them with the original equation.
+<<*>>=
+--S 21 of 92
+target:=1/(x*sqrt(a*x+b))
+--R
+--R              1
+--R   (12)  -----------
+--R           +-------+
+--R         x\|a x + b
+--R                                                     Type: Expression Integer
+--E
+@
+and we select the second Axiom solution
+<<*>>=
+--S 22 of 92
+aa2:=aa.2
+--R
+--R                  +---+ +-------+
+--R                 \|- b \|a x + b
+--R           2atan(----------------)
+--R                         b
+--R   (13)  - -----------------------
+--R                     +---+
+--R                    \|- b
+--R                                                     Type: Expression Integer
+--E
+@
+take its derivative
+<<*>>=
+--S 23 of 92
+ad2:=D(aa2,x)
+--R
+--R              1
+--R   (14)  -----------
+--R           +-------+
+--R         x\|a x + b
+--R                                                     Type: Expression Integer
+--E
+@
+When we take the difference of Axiom's input and the derivative of the
+output we see:
+<<*>>=
+--S 24 of 92
+ad2-target
+--R
+--R   (15)  0
+--R                                                     Type: Expression Integer
+--E
+@
+Thus the original equation and Axiom's derivative of the integral are equal.
+
+Now we do the same with Spiegel's answer. We take the derivative of his
+answer.
+<<*>>=
+--S 25 of 92
+ab1:=D(bb1,x)
+--R
+--R                +-------+    +-+
+--R               \|a x + b  + \|b
+--R   (16)  ----------------------------
+--R           +-+ +-------+      2
+--R         x\|b \|a x + b  + a x  + b x
+--R                                                     Type: Expression Integer
+--E
+@
+and we difference it from the original equation
+<<*>>=
+--S 26 of 92
+ab1-target
+--R
+--R   (17)  0
+--R                                                     Type: Expression Integer
+--E
+@
+Thus the original equation and Spiegel's derivative of the integral are equal.
+
+So we can conclude that both second answers are correct although they differ
+by a constant of integration.
+
+ \section{\cite{1}:14.88~~~~~$\displaystyle\int{\frac{dx}{x^2\sqrt{ax+b}}}$}
+$$\int{\frac{dx}{x^2\sqrt{ax+b}}}=
+-\frac{\sqrt{ax+b}}{bx}-\frac{a}{2b}~\int{\frac{dx}{x\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 27 of 92
+aa:=integrate(1/(x^2*sqrt(a*x+b)),x)
+--R 
+--R
+--R   (1)
+--R               +-------+              +-+
+--R            2b\|a x + b  + (a x + 2b)\|b       +-+ +-------+
+--R    a x log(-----------------------------) - 2\|b \|a x + b
+--R                          x
+--R   [--------------------------------------------------------,
+--R                                 +-+
+--R                            2b x\|b
+--R              +---+ +-------+
+--R             \|- b \|a x + b      +---+ +-------+
+--R    a x atan(----------------) - \|- b \|a x + b
+--R                     b
+--R    ---------------------------------------------]
+--R                          +---+
+--R                      b x\|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+In order to write down the book answer we need to first take the
+integral which has two results
+<<*>>=
+--S 28 of 92
+dd:=integrate(1/(x*sqrt(a*x+b)),x)
+--R 
+--R
+--R                  +-------+              +-+           +---+ +-------+
+--R             - 2b\|a x + b  + (a x + 2b)\|b           \|- b \|a x + b
+--R         log(-------------------------------)   2atan(----------------)
+--R                            x                                 b
+--R   (2)  [------------------------------------,- -----------------------]
+--R                          +-+                             +---+
+--R                         \|b                             \|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E
+@
+and derive two results for the book answer. The first result assumes
+$b > 0$
+<<*>>=
+--S 29 of 92
+bb1:=-sqrt(a*x+b)/(b*x)-a/(2*b)*dd.1
+--R 
+--R
+--R                       +-------+              +-+
+--R                  - 2b\|a x + b  + (a x + 2b)\|b       +-+ +-------+
+--R        - a x log(-------------------------------) - 2\|b \|a x + b
+--R                                 x
+--R   (3)  ------------------------------------------------------------
+--R                                       +-+
+--R                                  2b x\|b
+--R                                                     Type: Expression Integer
+--E
+@
+and the second result assumes $b < 0$.
+<<*>>=
+--S 30 of 92
+bb2:=-sqrt(a*x+b)/(b*x)-a/(2*b)*dd.2
+--R 
+--R
+--R                  +---+ +-------+
+--R                 \|- b \|a x + b      +---+ +-------+
+--R        a x atan(----------------) - \|- b \|a x + b
+--R                         b
+--R   (4)  ---------------------------------------------
+--R                              +---+
+--R                          b x\|- b
+--R                                                     Type: Expression Integer
+--E
+@
+
+So we compute the difference of Axiom's first result with Spiegel's
+first result
+<<*>>=
+--S 31 of 92
+cc11:=bb1-aa.1
+--R
+--R   (5)
+--R                  +-------+              +-+
+--R               2b\|a x + b  + (a x + 2b)\|b
+--R       - a log(-----------------------------)
+--R                             x
+--R     + 
+--R                    +-------+              +-+
+--R               - 2b\|a x + b  + (a x + 2b)\|b
+--R       - a log(-------------------------------)
+--R                              x
+--R  /
+--R        +-+
+--R     2b\|b
+--R                                                     Type: Expression Integer
+--E
+@
+we compute its derivative
+<<*>>=
+--S 32 of 92
+D(cc11,x)
+--R
+--R   (6)  0
+--R                                                     Type: Expression Integer
+--E
+@
+and we can see that the answers differ by a constant, the constant of
+integration. So Axiom's first answer should differentiate back to the target
+equation.
+<<*>>=
+--S 33 of 92
+target:=1/(x^2*sqrt(a*x+b))
+--R
+--R              1
+--R   (7)  ------------
+--R         2 +-------+
+--R        x \|a x + b
+--R                                                     Type: Expression Integer
+--E
+@
+We differentiate Axiom's first answer
+<<*>>=
+--S 34 of 92
+ad1:=D(aa.1,x)
+--R
+--R                             +-+ +-------+              2
+--R                  (a x + 2b)\|b \|a x + b  + 2a b x + 2b
+--R   (8)  ----------------------------------------------------------
+--R               3     2 2  +-------+     2 4         3     2 2  +-+
+--R        (2a b x  + 2b x )\|a x + b  + (a x  + 3a b x  + 2b x )\|b
+--R                                                     Type: Expression Integer
+--E
+@
+and subtract it from the target equation
+<<*>>=
+--S 35 of 92
+ad1-target
+--R
+--R   (9)  0
+--R                                                     Type: Expression Integer
+--E
+@
+and now we do the same with first Spiegel's answer:
+<<*>>=
+--S 36 of 92
+bd1:=D(bb1,x)
+--R
+--R                                +-+ +-------+              2
+--R                   (- a x - 2b)\|b \|a x + b  + 2a b x + 2b
+--R   (10)  ------------------------------------------------------------
+--R                3     2 2  +-------+       2 4         3     2 2  +-+
+--R         (2a b x  + 2b x )\|a x + b  + (- a x  - 3a b x  - 2b x )\|b
+--R                                                     Type: Expression Integer
+--E
+@
+and we subtract it from the target
+<<*>>=
+--S 37 of 92
+bd1-target
+--R
+--R   (11)  0
+--R                                                     Type: Expression Integer
+--E
+@
+so we know that the two first answers are both correct and that their
+integrals differ by a constant.
+
+Now we look at the second answers. We difference the answers and can
+see immediately that they are equal.
+<<*>>=
+--S 38 of 92
+cc22:=bb2-aa.2
+--R 
+--R
+--R   (12)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.89~~~~~$\displaystyle\int{\sqrt{ax+b}~dx}$}
+$$\int{\sqrt{ax+b}~dx}=
+\frac{2\sqrt{(ax+b)^3}}{3a}$$
+<<*>>=
+)clear all
+
+--S 39 of 92
+aa:=integrate(sqrt(a*x+b),x)
+--R 
+--R
+--R                    +-------+
+--R        (2a x + 2b)\|a x + b
+--R   (1)  ---------------------
+--R                  3a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 40 of 92
+bb:=(2*sqrt((a*x+b)^3))/(3*a)
+--R 
+--R
+--R          +----------------------------+
+--R          | 3 3     2   2       2     3
+--R        2\|a x  + 3a b x  + 3a b x + b
+--R   (2)  --------------------------------
+--R                       3a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 41 of 92
+cc:=aa-bb
+--R
+--R            +----------------------------+
+--R            | 3 3     2   2       2     3                +-------+
+--R        - 2\|a x  + 3a b x  + 3a b x + b   + (2a x + 2b)\|a x + b
+--R   (3)  ----------------------------------------------------------
+--R                                    3a
+--R                                                     Type: Expression Integer
+--E
+@
+Since this didn't simplify we could check each answer using the derivative
+<<*>>=
+--S 42 of 92
+target:=sqrt(a*x+b)
+--R
+--R         +-------+
+--R   (4)  \|a x + b
+--R                                                     Type: Expression Integer
+--E
+@
+We take the derivative of Axiom's answer
+<<*>>=
+--S 43 of 92
+t1:=D(aa,x)
+--R
+--R          a x + b
+--R   (5)  ----------
+--R         +-------+
+--R        \|a x + b
+--R                                                     Type: Expression Integer
+--E
+@
+And we subtract the target from the derivative of Axiom's answer
+<<*>>=
+--S 44 of 92
+t1-target
+--R
+--R   (6)  0
+--R                                                     Type: Expression Integer
+--E
+@
+So they are equal. Now we do the same with Spiegel's answer
+<<*>>=
+--S 45 of 92
+t2:=D(bb,x)
+--R
+--R                2 2             2
+--R               a x  + 2a b x + b
+--R   (7)  -------------------------------
+--R         +----------------------------+
+--R         | 3 3     2   2       2     3
+--R        \|a x  + 3a b x  + 3a b x + b
+--R                                                     Type: Expression Integer
+--E
+@
+The numerator is
+<<*>>=
+--S 46 of 92
+nn:=(a*x+b)^2
+--R
+--R         2 2             2
+--R   (8)  a x  + 2a b x + b
+--R                                                     Type: Polynomial Integer
+--E
+@
+<<*>>=
+--S 47 of 92
+mm:=(a*x+b)^3
+--R
+--R         3 3     2   2       2     3
+--R   (9)  a x  + 3a b x  + 3a b x + b
+--R                                                     Type: Polynomial Integer
+--E
+@
+which expands to Spiegel's version.
+<<*>>=
+--S 48 of 92
+result=nn/sqrt(mm)
+--R
+--R                         2 2             2
+--R                        a x  + 2a b x + b
+--R   (10)  result= -------------------------------
+--R                  +----------------------------+
+--R                  | 3 3     2   2       2     3
+--R                 \|a x  + 3a b x  + 3a b x + b
+--R                                            Type: Equation Expression Integer
+--E
+@
+and this reduces to $\sqrt{ax+b}$
+
+\section{\cite{1}:14.90~~~~~$\displaystyle\int{x\sqrt{ax+b}~dx}$}
+$$\int{x\sqrt{ax+b}~dx}=
+\frac{2(3ax-2b)}{15a^2}~\sqrt{(ax+b)^3}$$
+<<*>>=
+)clear all
+
+--S 49 of 92
+aa:=integrate(x*sqrt(a*x+b),x)
+--R 
+--R
+--R           2 2              2  +-------+
+--R        (6a x  + 2a b x - 4b )\|a x + b
+--R   (1)  --------------------------------
+--R                         2
+--R                      15a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 50 of 92
+bb:=(2*(3*a*x-2*b))/(15*a^2)*sqrt((a*x+b)^3)
+--R 
+--R
+--R                    +----------------------------+
+--R                    | 3 3     2   2       2     3
+--R        (6a x - 4b)\|a x  + 3a b x  + 3a b x + b
+--R   (2)  ------------------------------------------
+--R                              2
+--R                           15a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 51 of 92
+cc:=aa-bb
+--R
+--R   (3)
+--R                     +----------------------------+
+--R                     | 3 3     2   2       2     3
+--R       (- 6a x + 4b)\|a x  + 3a b x  + 3a b x + b
+--R     + 
+--R          2 2              2  +-------+
+--R       (6a x  + 2a b x - 4b )\|a x + b
+--R  /
+--R        2
+--R     15a
+--R                                                     Type: Expression Integer
+--E
+@
+If we had the terms
+<<*>>=
+--S 52 of 92
+t1:=(3*a*x-2*b)
+--R
+--R   (4)  3a x - 2b
+--R                                                     Type: Polynomial Integer
+--E
+@
+<<*>>=
+--S 53 of 92
+t2:=(a*x+b)
+--R
+--R   (5)  a x + b
+--R                                                     Type: Polynomial Integer
+--E
+@
+We can construct the Axiom result 
+<<*>>=
+--S 54 of 92
+2*t1*t2*sqrt(t2)/(15*a^2)
+--R
+--R           2 2              2  +-------+
+--R        (6a x  + 2a b x - 4b )\|a x + b
+--R   (6)  --------------------------------
+--R                         2
+--R                      15a
+--R                                                     Type: Expression Integer
+--E
+@
+and we can construct the Spiegel result
+<<*>>=
+--S 55 of 92
+2*t1*sqrt(t2^3)/(15*a^2)
+--R
+--R                    +----------------------------+
+--R                    | 3 3     2   2       2     3
+--R        (6a x - 4b)\|a x  + 3a b x  + 3a b x + b
+--R   (7)  ------------------------------------------
+--R                              2
+--R                           15a
+--R                                                     Type: Expression Integer
+--E
+@
+the difference of these two depends on
+<<*>>=
+--S 56 of 92
+t2*sqrt(t2)-sqrt(t2^3)
+--R
+--R           +----------------------------+
+--R           | 3 3     2   2       2     3              +-------+
+--R   (8)  - \|a x  + 3a b x  + 3a b x + b   + (a x + b)\|a x + b
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.91~~~~~$\displaystyle\int{x^2\sqrt{ax+b}~dx}$}
+$$\int{x^2\sqrt{ax+b}~dx}=
+\frac{2(15a^2x^2-12abx+8b^2)}{105a^2}~\sqrt{(a+bx)^3}$$
+Note: the sqrt term is almost certainly $\sqrt{(ax+b)}$
+<<*>>=
+)clear all
+
+--S 57 of 92
+aa:=integrate(x^2*sqrt(a*x+b),x)
+--R 
+--R
+--R            3 3     2   2       2       3  +-------+
+--R        (30a x  + 6a b x  - 8a b x + 16b )\|a x + b
+--R   (1)  --------------------------------------------
+--R                                3
+--R                            105a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 58 of 92
+bb:=(2*(15*a^2*x^2-12*a*b*x+8*b^2))/(105*a^2)*sqrt((a*x+b)^3)
+--R 
+--R
+--R                                  +----------------------------+
+--R            2 2                2  | 3 3     2   2       2     3
+--R        (30a x  - 24a b x + 16b )\|a x  + 3a b x  + 3a b x + b
+--R   (2)  --------------------------------------------------------
+--R                                      2
+--R                                  105a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 59 of 92
+cc:=aa-bb
+--R 
+--R
+--R   (3)
+--R                                     +----------------------------+
+--R             3 2      2           2  | 3 3     2   2       2     3
+--R       (- 30a x  + 24a b x - 16a b )\|a x  + 3a b x  + 3a b x + b
+--R     + 
+--R           3 3     2   2       2       3  +-------+
+--R       (30a x  + 6a b x  - 8a b x + 16b )\|a x + b
+--R  /
+--R         3
+--R     105a
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.92~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x}~dx}$}
+$$\int{\frac{\sqrt{ax+b}}{x}~dx}=
+2\sqrt{ax+b}+b~\int{\frac{dx}{x\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 60 of 92
+aa:=integrate(sqrt(a*x+b)/x,x)
+--R 
+--R
+--R   (1)
+--R                +-+ +-------+
+--R     +-+    - 2\|b \|a x + b  + a x + 2b      +-------+
+--R   [\|b log(----------------------------) + 2\|a x + b ,
+--R                          x
+--R                   +-------+
+--R        +---+     \|a x + b       +-------+
+--R    - 2\|- b atan(----------) + 2\|a x + b ]
+--R                     +---+
+--R                    \|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 61 of 92
+dd:=integrate(1/(x*sqrt(a*x+b)),x)
+--R 
+--R
+--R                  +-------+              +-+           +---+ +-------+
+--R             - 2b\|a x + b  + (a x + 2b)\|b           \|- b \|a x + b
+--R         log(-------------------------------)   2atan(----------------)
+--R                            x                                 b
+--R   (2)  [------------------------------------,- -----------------------]
+--R                          +-+                             +---+
+--R                         \|b                             \|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E
+@
+<<*>>=
+--S 62 of 92
+bb1:=2*sqrt(a*x+b)+b*dd.1
+--R 
+--R
+--R                   +-------+              +-+
+--R              - 2b\|a x + b  + (a x + 2b)\|b       +-+ +-------+
+--R        b log(-------------------------------) + 2\|b \|a x + b
+--R                             x
+--R   (3)  --------------------------------------------------------
+--R                                   +-+
+--R                                  \|b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 63 of 92
+bb2:=2*sqrt(a*x+b)+b*dd.2
+--R 
+--R
+--R                   +---+ +-------+
+--R                  \|- b \|a x + b       +---+ +-------+
+--R        - 2b atan(----------------) + 2\|- b \|a x + b
+--R                          b
+--R   (4)  -----------------------------------------------
+--R                              +---+
+--R                             \|- b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 64 of 92
+cc11:=bb1-aa.1
+--R 
+--R
+--R   (5)
+--R              +-------+              +-+              +-+ +-------+
+--R         - 2b\|a x + b  + (a x + 2b)\|b           - 2\|b \|a x + b  + a x + 2b
+--R   b log(-------------------------------) - b log(----------------------------)
+--R                        x                                       x
+--R   ----------------------------------------------------------------------------
+--R                                        +-+
+--R                                       \|b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 65 of 92
+cc12:=bb1-aa.2
+--R 
+--R
+--R                   +-------+              +-+                     +-------+
+--R              - 2b\|a x + b  + (a x + 2b)\|b       +---+ +-+     \|a x + b
+--R        b log(-------------------------------) + 2\|- b \|b atan(----------)
+--R                             x                                      +---+
+--R                                                                   \|- b
+--R   (6)  --------------------------------------------------------------------
+--R                                         +-+
+--R                                        \|b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 66 of 92
+cc21:=bb2-aa.1
+--R 
+--R
+--R   (7)
+--R                       +-+ +-------+                        +---+ +-------+
+--R      +---+ +-+    - 2\|b \|a x + b  + a x + 2b            \|- b \|a x + b
+--R   - \|- b \|b log(----------------------------) - 2b atan(----------------)
+--R                                 x                                 b
+--R   -------------------------------------------------------------------------
+--R                                      +---+
+--R                                     \|- b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 67 of 92
+cc22:=bb2-aa.2
+--R 
+--R
+--R                   +---+ +-------+             +-------+
+--R                  \|- b \|a x + b             \|a x + b
+--R        - 2b atan(----------------) - 2b atan(----------)
+--R                          b                      +---+
+--R                                                \|- b
+--R   (8)  -------------------------------------------------
+--R                               +---+
+--R                              \|- b
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.93~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x^2}~dx}$}
+$$\int{\frac{\sqrt{ax+b}}{x^2}~dx}=
+-\frac{\sqrt{ax+b}}{x}+\frac{a}{2}~\int{\frac{dx}{x\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 68 of 92
+aa:=integrate(sqrt(a*x+b)/x^2,x)
+--R 
+--R
+--R   (1)
+--R                 +-------+              +-+
+--R            - 2b\|a x + b  + (a x + 2b)\|b       +-+ +-------+
+--R    a x log(-------------------------------) - 2\|b \|a x + b
+--R                           x
+--R   [----------------------------------------------------------,
+--R                                 +-+
+--R                              2x\|b
+--R                +---+ +-------+
+--R               \|- b \|a x + b      +---+ +-------+
+--R    - a x atan(----------------) - \|- b \|a x + b
+--R                       b
+--R    -----------------------------------------------]
+--R                          +---+
+--R                        x\|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 69 of 92
+dd:=integrate(1/(x*sqrt(a*x+b)),x)
+--R 
+--R
+--R                  +-------+              +-+           +---+ +-------+
+--R             - 2b\|a x + b  + (a x + 2b)\|b           \|- b \|a x + b
+--R         log(-------------------------------)   2atan(----------------)
+--R                            x                                 b
+--R   (2)  [------------------------------------,- -----------------------]
+--R                          +-+                             +---+
+--R                         \|b                             \|- b
+--R                                     Type: Union(List Expression Integer,...)
+--E
+@
+<<*>>=
+--S 70 of 92
+bb1:=-sqrt(a*x+b)/x+a/2*dd.1
+--R 
+--R
+--R                     +-------+              +-+
+--R                - 2b\|a x + b  + (a x + 2b)\|b       +-+ +-------+
+--R        a x log(-------------------------------) - 2\|b \|a x + b
+--R                               x
+--R   (3)  ----------------------------------------------------------
+--R                                     +-+
+--R                                  2x\|b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 71 of 92
+bb2:=-sqrt(a*x+b)/x+a/2*dd.2
+--R 
+--R
+--R                    +---+ +-------+
+--R                   \|- b \|a x + b      +---+ +-------+
+--R        - a x atan(----------------) - \|- b \|a x + b
+--R                           b
+--R   (4)  -----------------------------------------------
+--R                              +---+
+--R                            x\|- b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 72 of 92
+cc11:=bb1-aa.1
+--R 
+--R
+--R   (5)  0
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 73 of 92
+cc21:=bb-aa.1
+--R 
+--R
+--R   (6)
+--R                  +-------+              +-+
+--R             - 2b\|a x + b  + (a x + 2b)\|b       +-+ +-------+         +-+
+--R   - a x log(-------------------------------) + 2\|b \|a x + b  + 2bb x\|b
+--R                            x
+--R   ------------------------------------------------------------------------
+--R                                       +-+
+--R                                    2x\|b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 74 of 92
+cc12:=bb1-aa.2
+--R 
+--R
+--R   (7)
+--R                   +-------+              +-+                +---+ +-------+
+--R     +---+    - 2b\|a x + b  + (a x + 2b)\|b        +-+     \|- b \|a x + b
+--R   a\|- b log(-------------------------------) + 2a\|b atan(----------------)
+--R                             x                                      b
+--R   --------------------------------------------------------------------------
+--R                                     +---+ +-+
+--R                                   2\|- b \|b
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 75 of 92
+cc22:=bb2-aa.2
+--R 
+--R
+--R   (8)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.94~~~~~$\displaystyle\int{\frac{x^m}{\sqrt{ax+b}}~dx}$}
+$$\int{\frac{x^m}{\sqrt{ax+b}}~dx}=
+\frac{2x^m\sqrt{ax+b}}{(2m+1)a}-\frac{2mb}{(2m+1)a}
+~\int{\frac{x^{m-1}}{\sqrt{ax+b}}~dx}$$
+<<*>>=
+)clear all
+
+--S 76 of 92
+aa:=integrate(x^m/sqrt(a*x+b),x)
+--R 
+--R
+--R           x       m
+--I         ++      %L
+--I   (1)   |   ----------- d%L
+--R        ++    +--------+
+--I             \|b + %L a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.95~~~~~$\displaystyle\int{\frac{dx}{x^m\sqrt{ax+b}}}$}
+$$\int{\frac{dx}{x^m\sqrt{ax+b}}}=
+-\frac{\sqrt{ax+b}}{(m-1)bx^{m-1}}-\frac{(2m-3)a}{(2m-2)b}
+~\int{\frac{dx}{x^{m-1}\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 77 of 92
+aa:=integrate(1/(x^m*sqrt(a*x+b)),x)
+--R 
+--R
+--R           x
+--R         ++         1
+--I   (1)   |   -------------- d%L
+--R        ++     m +--------+
+--I             %L \|b + %L a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.96~~~~~$\displaystyle\int{x^m\sqrt{ax+b}~dx}$}
+$$\int{x^m\sqrt{ax+b}~dx}=
+\frac{2x^m}{(2m+3)a}(ax+b)^{3/2}
+-\frac{2mb}{(2m+3)a}~\int{x^{m-1}\sqrt{ax+b}~dx}$$
+<<*>>=
+)clear all
+
+--S 78 of 92
+aa:=integrate(x^m*sqrt(a*x+b),x)
+--R 
+--R
+--R           x
+--R         ++    m +--------+
+--I   (1)   |   %L \|b + %L a d%L
+--R        ++
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.97~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x^m}~dx}$}
+$$\int{\frac{\sqrt{ax+b}}{x^m}~dx}=
+-\frac{\sqrt{ax+b}}{(m-1)x^{m-1}}
++\frac{a}{2(m-1)}~\int{\frac{dx}{x^{m-1}\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 79 of 92
+aa:=integrate(sqrt(a*x+b)/x^m,x)
+--R 
+--R
+--R           x  +--------+
+--I         ++  \|b + %L a
+--I   (1)   |   ----------- d%L
+--R        ++         m
+--I                 %L
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.98~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x^m}~dx}$}
+$$\int{\frac{\sqrt{ax+b}}{x^m}~dx}=
+\frac{-(ax+b)^{3/2}}{(m-1)bx^{m-1}}
+-\frac{(2m-5)a}{(2m-2)b}~\int{\frac{\sqrt{ax+b}}{x^{m-1}}~dx}$$
+Note: 14.98 is the same as 14.97
+<<*>>=
+)clear all
+
+--S 80 of 92
+aa:=integrate(sqrt(a*x+b)/x^m,x)
+--R 
+--R
+--R           x  +--------+
+--I         ++  \|b + %L a
+--I   (1)   |   ----------- d%L
+--R        ++         m
+--I                 %L
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.99~~~~~$\displaystyle\int{(ax+b)^{m/2}~dx}$}
+$$\int{(ax+b)^{m/2}~dx}=
+\frac{2(ax+b)^{(m+2)/2}}{a(m+2)}$$
+<<*>>=
+)clear all
+
+--S 81 of 92
+aa:=integrate((a*x+b)^(m/2),x)
+--R 
+--R
+--R                     m log(a x + b)
+--R                     --------------
+--R                            2
+--R        (2a x + 2b)%e
+--R   (1)  ---------------------------
+--R                  a m + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 82 of 92
+bb:=(2*(a*x+b)^((m+2)/2))/(a*(m+2))
+--R 
+--R
+--R                  m + 2
+--R                  -----
+--R                    2
+--R        2(a x + b)
+--R   (2)  ---------------
+--R            a m + 2a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 83 of 92
+cc:=aa-bb
+--R 
+--R
+--R                     m log(a x + b)             m + 2
+--R                     --------------             -----
+--R                            2                     2
+--R        (2a x + 2b)%e               - 2(a x + b)
+--R   (3)  ---------------------------------------------
+--R                           a m + 2a
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.100~~~~~$\displaystyle\int{x(ax+b)^{m/2}~dx}$}
+$$\int{x(ax+b)^{m/2}~dx}=
+\frac{2(ax+b)^{(m+4)/2}}{a^2(m+4)}
+-\frac{2b(ax+b)^{(m+2)/2}}{a^2(m+2)}$$
+<<*>>=
+)clear all
+
+--S 84 of 92
+aa:=integrate(x*(a*x+b)^(m/2),x)
+--R 
+--R
+--R                                           m log(a x + b)
+--R                                           --------------
+--R            2      2  2                2          2
+--R        ((2a m + 4a )x  + 2a b m x - 4b )%e
+--R   (1)  -------------------------------------------------
+--R                         2 2     2      2
+--R                        a m  + 6a m + 8a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 85 of 92
+bb:=(2*(a*x+b)^((m+4)/2))/(a^2*(m+4))-(2*b*(a*x+b)^((m+2)/2))/(a^2*(m+2))
+--R 
+--R
+--R                         m + 4                         m + 2
+--R                         -----                         -----
+--R                           2                             2
+--R        (2m + 4)(a x + b)      + (- 2b m - 8b)(a x + b)
+--R   (2)  ----------------------------------------------------
+--R                           2 2     2      2
+--R                          a m  + 6a m + 8a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 86 of 92
+cc:=aa-bb
+--R 
+--R
+--R   (3)
+--R                                          m log(a x + b)
+--R                                          --------------
+--R           2      2  2                2          2
+--R       ((2a m + 4a )x  + 2a b m x - 4b )%e
+--R     + 
+--R                          m + 4                       m + 2
+--R                          -----                       -----
+--R                            2                           2
+--R       (- 2m - 4)(a x + b)      + (2b m + 8b)(a x + b)
+--R  /
+--R      2 2     2      2
+--R     a m  + 6a m + 8a
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.101~~~~~$\displaystyle\int{x^2(ax+b)^{m/2}~dx}$}
+$$\int{x^2(ax+b)^{m/2}~dx}=
+\frac{2(ax+b)^{(m+6)/2}}{a^3(m+6)}
+-\frac{4b(ax+b)^{(m+4)/2}}{a^3(m+4)}
++\frac{2b^2(ax+b)^{(m+2)/2}}{a^3(m+2)}$$
+<<*>>=
+)clear all
+
+--S 87 of 92
+aa:=integrate(x^2*(a*x+b)^(m/2),x)
+--R 
+--R
+--R   (1)
+--R           3 2      3       3  3      2   2     2     2       2         3
+--R       ((2a m  + 12a m + 16a )x  + (2a b m  + 4a b m)x  - 8a b m x + 16b )
+--R    *
+--R         m log(a x + b)
+--R         --------------
+--R                2
+--R       %e
+--R  /
+--R      3 3      3 2      3       3
+--R     a m  + 12a m  + 44a m + 48a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 88 of 92
+bb:=(2*(a*x+b)^((m+6)/2))/(a^3*(m+6))-_
+      (4*b*(a*x+b)^((m+4)/2))/(a^3*(m+4))+_
+        (2*b^2*(a*x+b)^((m+2)/2))/(a^3*(m+2))
+--R 
+--R
+--R   (2)
+--R                                m + 6                                   m + 4
+--R                                -----                                   -----
+--R          2                       2            2                          2
+--R       (2m  + 12m + 16)(a x + b)      + (- 4b m  - 32b m - 48b)(a x + b)
+--R     + 
+--R                                      m + 2
+--R                                      -----
+--R          2 2      2       2            2
+--R       (2b m  + 20b m + 48b )(a x + b)
+--R  /
+--R      3 3      3 2      3       3
+--R     a m  + 12a m  + 44a m + 48a
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 89 of 92
+cc:=aa-bb
+--R 
+--R
+--R   (3)
+--R             3 2      3       3  3      2   2     2     2       2         3
+--R         ((2a m  + 12a m + 16a )x  + (2a b m  + 4a b m)x  - 8a b m x + 16b )
+--R      *
+--R           m log(a x + b)
+--R           --------------
+--R                  2
+--R         %e
+--R     + 
+--R                                  m + 6                                 m + 4
+--R                                  -----                                 -----
+--R            2                       2          2                          2
+--R       (- 2m  - 12m - 16)(a x + b)      + (4b m  + 32b m + 48b)(a x + b)
+--R     + 
+--R                                        m + 2
+--R                                        -----
+--R            2 2      2       2            2
+--R       (- 2b m  - 20b m - 48b )(a x + b)
+--R  /
+--R      3 3      3 2      3       3
+--R     a m  + 12a m  + 44a m + 48a
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.102~~~~~$\displaystyle\int{\frac{(ax+b)^{m/2}}{x}~dx}$}
+$$\int{\frac{(ax+b)^{m/2}}{x}~dx}=
+\frac{2(ax+b)^{m/2}}{m}
++b~\int{\frac{(ax+b)^{(m-2)/2}}{x}~dx}$$
+<<*>>=
+)clear all
+
+--S 90 of 92
+aa:=integrate((a*x+b)^(m/2)/x,x)
+--R 
+--R
+--R                       m
+--R                       -
+--R           x           2
+--I         ++  (b + %L a)
+--I   (1)   |   ----------- d%L
+--I        ++        %L
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+\section{\cite{1}:14.103~~~~~$\displaystyle
+\int{\frac{(ax+b)^{m/2}}{x^2}~dx}$}
+$$\int{\frac{(ax+b)^{m/2}}{x^2}~dx}=
+-\frac{(ax+b)^{(m+2)/2}}{bx}
++\frac{ma}{2b}~\int{\frac{(ax+b)^{m/2}}{x}~dx}$$
+<<*>>=
+)clear all
+
+--S 91 of 92
+aa:=integrate((a*x+b)^(m/2)/x^2,x)
+--R 
+--R
+--R                       m
+--R                       -
+--R           x           2
+--I         ++  (b + %L a)
+--I   (1)   |   ----------- d%L
+--R        ++         2
+--I                 %L
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+\section{\cite{1}:14.104~~~~~$\displaystyle
+\int{\frac{dx}{x(ax+b)^{m/2}}}$}
+$$\int{\frac{dx}{x(ax+b)^{m/2}}}=
+\frac{2}{(m-2)b(ax+b)^{(m-2)/2}}
++\frac{1}{b}~\int{\frac{dx}{x(ax+b)^{(m-2)/2}}}$$
+<<*>>=
+)clear all
+
+--S 92 of 92
+aa:=integrate(1/(x*(a*x+b)^(m/2)),x)
+--R 
+--R
+--R           x
+--R         ++         1
+--I   (1)   |   -------------- d%L
+--R        ++                m
+--R                          -
+--R                          2
+--I             %L (b + %L a)
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+<<*>>=
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 pp61-62
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum3.input.pamphlet b/src/input/schaum3.input.pamphlet
new file mode 100644
index 0000000..e273509
--- /dev/null
+++ b/src/input/schaum3.input.pamphlet
@@ -0,0 +1,409 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum3.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.105~~~~~$\displaystyle\int{\frac{dx}{(ax+b)(px+q)}}$}
+$$\int{\frac{dx}{(ax+b)(px+q)}}=
+\frac{1}{bp-aq}~\ln\left(\frac{px+q}{ax+b}\right)$$
+<<*>>=
+)spool schaum3.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 11
+aa:=integrate(1/((a*x+b)*(p*x+q)),x)
+--R 
+--R
+--R        - log(p x + q) + log(a x + b)
+--R   (1)  -----------------------------
+--R                  a q - b p
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 2 of 11
+bb:=1/(b*p-a*q)*log((p*x+q)/(a*x+b))
+--R 
+--R
+--R              p x + q
+--R          log(-------)
+--R              a x + b
+--R   (2)  - ------------
+--R            a q - b p
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 3 of 11
+cc:=aa-bb
+--R 
+--R
+--R                                            p x + q
+--R        - log(p x + q) + log(a x + b) + log(-------)
+--R                                            a x + b
+--R   (3)  --------------------------------------------
+--R                          a q - b p
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.106~~~~~$\displaystyle\int{\frac{x~dx}{(ax+b)(px+q)}}$}
+$$\int{\frac{x~dx}{(ax+b)(px+q)}}=
+\frac{1}{bp-aq}\left\{\frac{b}{a}~\ln(ax+b)-\frac{q}{p}~\ln(px+q)\right\}$$
+<<*>>=
+)clear all
+
+--S 4 of 11
+aa:=integrate(x/((a*x+b)*(p*x+q)),x)
+--R 
+--R
+--R        a q log(p x + q) - b p log(a x + b)
+--R   (1)  -----------------------------------
+--R                    2           2
+--R                   a p q - a b p
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 5 of 11
+bb:=1/(b*p-a*q)*(b/a*log(a*x+b)-q/p*log(p*x+q))
+--R 
+--R
+--R        a q log(p x + q) - b p log(a x + b)
+--R   (2)  -----------------------------------
+--R                    2           2
+--R                   a p q - a b p
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 6 of 11
+cc:=aa-bb
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.107~~~~~$\displaystyle\int{\frac{dx}{(ax+b)^2(px+q)}}$}
+$$\int{\frac{dx}{(ax+b)^2(px+q)}}=
+\frac{1}{bp-aq}
+\left\{\frac{1}{ax+b}+
+\frac{p}{bp-aq}~\ln\left(\frac{px+q}{ax+b}\right)\right\}$$
+<<*>>=
+)clear all
+
+--S 7 of 11
+aa:=integrate(1/((a*x+b)^2*(p*x+q)),x)
+--R 
+--R
+--R        (a p x + b p)log(p x + q) + (- a p x - b p)log(a x + b) - a q + b p
+--R   (1)  -------------------------------------------------------------------
+--R                 3 2     2           2 2      2   2       2       3 2
+--R               (a q  - 2a b p q + a b p )x + a b q  - 2a b p q + b p
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 8 of 11
+bb:=1/(b*p-a*q)*(1/(a*x+b)+p/(b*p-a*q)*log((p*x+q)/(a*x+b)))
+--R 
+--R
+--R                                  p x + q
+--R                 (a p x + b p)log(-------) - a q + b p
+--R                                  a x + b
+--R   (2)  ------------------------------------------------------
+--R          3 2     2           2 2      2   2       2       3 2
+--R        (a q  - 2a b p q + a b p )x + a b q  - 2a b p q + b p
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 9 of 11
+cc:=aa-bb
+--R 
+--R
+--R                                                p x + q
+--R        p log(p x + q) - p log(a x + b) - p log(-------)
+--R                                                a x + b
+--R   (3)  ------------------------------------------------
+--R                      2 2               2 2
+--R                     a q  - 2a b p q + b p
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.108~~~~~$\displaystyle\int{\frac{x~dx}{(ax+b)^2(px+q)}}$}
+$$\int{\frac{x~dx}{(ax+b)^2(px+q)}}=
+\frac{1}{bp-aq}
+\left\{\frac{q}{bp-aq}
+~\ln\left(\frac{ax+b}{px+q}\right)-\frac{b}{a(ax+b)}\right\}$$
+
+<<*>>=
+)clear all
+
+--S 10 of 11
+aa:=integrate(x/((a*x+b)^2*(p*x+q)),x)
+--R 
+--R
+--R   (1)
+--R       2                             2                                    2
+--R   (- a q x - a b q)log(p x + q) + (a q x + a b q)log(a x + b) + a b q - b p
+--R   -------------------------------------------------------------------------
+--R              4 2     3         2 2 2      3   2     2 2         3 2
+--R            (a q  - 2a b p q + a b p )x + a b q  - 2a b p q + a b p
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 11 of 11
+bb:=1/(b*p-a*q)*(q/(b*p-a*q)*log((a*x+b)/(p*x+q))-b/(a*(a*x+b)))
+--R 
+--R
+--R                  2                a x + b             2
+--R                (a q x + a b q)log(-------) + a b q - b p
+--R                                   p x + q
+--R   (2)  --------------------------------------------------------
+--R          4 2     3         2 2 2      3   2     2 2         3 2
+--R        (a q  - 2a b p q + a b p )x + a b q  - 2a b p q + a b p
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+cc:=aa-bb
+--R 
+--R
+--R                                                  a x + b
+--R        - q log(p x + q) + q log(a x + b) - q log(-------)
+--R                                                  p x + q
+--R   (3)  --------------------------------------------------
+--R                       2 2               2 2
+--R                      a q  - 2a b p q + b p
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.109~~~~~$\displaystyle
+\int{\frac{x^2~dx}{(ax+b)^2(px+q)}}$}
+$$\int{\frac{x^2~dx}{(ax+b)^2(px+q)}}=$$
+$$\frac{b^2}{(bp-aq)a^2(ax+b)}+\frac{1}{(bp-aq)^2}
+\left\{\frac{q^2}{p}~\ln(px+q)+\frac{b(bp-2aq)}{a^2}~\ln(ax+b)\right\}$$
+<<*>>=
+)clear all
+
+--S 
+aa:=integrate(x^2/((a*x+b)^2*(p*x+q)),x)
+--R 
+--R
+--R   (1)
+--R         3 2     2   2
+--R       (a q x + a b q )log(p x + q)
+--R     + 
+--R             2           2 2         2       3 2                   2       3 2
+--R       ((- 2a b p q + a b p )x - 2a b p q + b p )log(a x + b) - a b p q + b p
+--R  /
+--R       5   2     4   2     3 2 3      4     2     3 2 2     2 3 3
+--R     (a p q  - 2a b p q + a b p )x + a b p q  - 2a b p q + a b p
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 
+bb:=b^2/((b*p-a*q)*a^2*(a*x+b))+_
+     1/(b*p-a*q)^2*(q^2/p*log(p*x+q)+((b*(b*p-2*a*q))/a^2)*log(a*x+b))
+--R 
+--R
+--R   (2)
+--R         3 2     2   2
+--R       (a q x + a b q )log(p x + q)
+--R     + 
+--R             2           2 2         2       3 2                   2       3 2
+--R       ((- 2a b p q + a b p )x - 2a b p q + b p )log(a x + b) - a b p q + b p
+--R  /
+--R       5   2     4   2     3 2 3      4     2     3 2 2     2 3 3
+--R     (a p q  - 2a b p q + a b p )x + a b p q  - 2a b p q + a b p
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 
+cc:=aa-bb
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.110~~~~~$\displaystyle\int{\frac{dx}{(ax+b)^m(px+q)^n}}$}
+$$\int{\frac{dx}{(ax+b)^m(px+q)^n}}=$$
+$$\frac{-1}{(n-1)(bp-aq)}
+\left\{\frac{1}{(ax+b)^{m-1}(px+q)^{n-1}}+
+a(m+n-2)~\int{\frac{dx}{(ax+b)^m(px+q)^{n-1}}}\right\}$$
+<<*>>=
+)clear all
+
+--S 
+aa:=integrate(1/((a*x+b)^m*(p*x+q)^n),x)
+--R 
+--R
+--R           x
+--R         ++             1
+--I   (1)   |   ---------------------- d%L
+--R        ++             m          n
+--I             (b + %L a) (q + %L p)
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 
+dd:=integrate(1/((a*x+b)^m*(p*x+q)^(n-1)),x)
+--R 
+--R
+--R           x
+--R         ++               1
+--I   (2)   |   -------------------------- d%L
+--R        ++             m          n - 1
+--I             (b + %L a) (q + %L p)
+--R                                          Type: Union(Expression Integer,...)
+--E
+@
+
+<<*>>=
+--S 
+bb:=-1/((n-1)*(b*p-a*q))*(1/((a*x+b)^(m-1)*(p*x+q)^(n-1))+a*(m+n-2)*dd)
+--R 
+--R
+--R   (3)
+--R                                  m - 1         n - 1
+--R         (a n + a m - 2a)(a x + b)     (p x + q)
+--R      *
+--R            x
+--R          ++               1
+--I          |   -------------------------- d%L
+--R         ++             m          n - 1
+--I              (b + %L a) (q + %L p)
+--R     + 
+--R       1
+--R  /
+--R                                         m - 1         n - 1
+--R     ((a n - a)q + (- b n + b)p)(a x + b)     (p x + q)
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 
+cc:=aa-bb
+--R 
+--R
+--R   (4)
+--R                                    m - 1         n - 1
+--R         (- a n - a m + 2a)(a x + b)     (p x + q)
+--R      *
+--R            x
+--R          ++               1
+--I          |   -------------------------- d%L
+--R         ++             m          n - 1
+--I              (b + %L a) (q + %L p)
+--R     + 
+--R                                             m - 1         n - 1
+--R         ((a n - a)q + (- b n + b)p)(a x + b)     (p x + q)
+--R      *
+--R            x
+--R          ++             1
+--I          |   ---------------------- d%L
+--R         ++             m          n
+--I              (b + %L a) (q + %L p)
+--R     + 
+--R       - 1
+--R  /
+--R                                         m - 1         n - 1
+--R     ((a n - a)q + (- b n + b)p)(a x + b)     (p x + q)
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.111~~~~~$\displaystyle\int{\frac{ax+b}{px+q}~dx}$}
+$$\int{\frac{ax+b}{px+q}~dx}=\frac{ax}{p}+\frac{bp-aq}{p^2}~\ln(px+q)$$
+<<*>>=
+)clear all
+
+--S 
+aa:=integrate((a*x+b)/(p*x+q),x)
+--R 
+--R
+--R        (- a q + b p)log(p x + q) + a p x
+--R   (1)  ---------------------------------
+--R                         2
+--R                        p
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+<<*>>=
+--S 
+bb:=(a*x)/p+(b*p-a*q)/p^2*log(p*x+q)
+--R 
+--R
+--R        (- a q + b p)log(p x + q) + a p x
+--R   (2)  ---------------------------------
+--R                         2
+--R                        p
+--R                                                     Type: Expression Integer
+--E
+@
+<<*>>=
+--S 
+cc:=aa-bb
+--R 
+--R
+--R   (3)  0
+--R                                                     Type: Expression Integer
+--E
+@
+
+\section{\cite{1}:14.112~~~~~$\displaystyle\int{\frac{(ax+b)^m}{(px+q)^n}~dx}$}
+$$\int{\frac{(ax+b)^m}{(px+q)^n}~dx}=\left\{
+\begin{array}{c}
+\frac{-1}{(n-1)(bp-aq)}
+\left\{\frac{(ax+b)^{m+1}}{(px+q)^{n-1}}+(n-m-2)a
+\int{\frac{(ax+b)^m}{(px+q)^{n-1}}}~dx\right\}\\
+\frac{-1}{(n-m-1)p}+\left\{\frac{(ax+b)^m}{(px+q)^{n-1}}+m(bp-aq)
+\int{\frac{(ax+b)^{m-1}}{(px+q)^n}}~dx\right\}\\
+\frac{-1}{(n-1)p}\left\{\frac{(ax+b)^m}{(px+q)^{n-1}}-ma
+\int{\frac{(ax+b)^{m-1}}{(px+q)^{n-1}}}~dx\right\}
+\end{array}
+\right.$$
+<<*>>=
+)clear all
+
+--S 
+aa:=integrate((a*x+b)^m/(p*x+q)^n,x)
+--R 
+--R
+--R           x           m
+--I         ++  (b + %L a)
+--I   (1)   |   ----------- d%L
+--R        ++             n
+--I             (q + %L p)
+--R                                          Type: Union(Expression Integer,...)
+--R
+--E
+<<*>>=
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 pp62-63
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum4.input.pamphlet b/src/input/schaum4.input.pamphlet
new file mode 100644
index 0000000..b57e857
--- /dev/null
+++ b/src/input/schaum4.input.pamphlet
@@ -0,0 +1,212 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum4.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.113~~~~~$\displaystyle\int{\frac{px+q}{\sqrt{ax+b}}}~dx$}
+$$\int{\frac{px+q}{\sqrt{ax+b}}}=
+\frac{2(apx+3aq-2bp)}{3a^2}\sqrt{ax+b}$$
+<<*>>=
+)spool schaum4.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 7
+aa:=integrate((p*x+q)/sqrt(a*x+b),x)
+--R 
+--R
+--R                               +-------+
+--R        (2a p x + 6a q - 4b p)\|a x + b
+--R   (1)  --------------------------------
+--R                         2
+--R                       3a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.114~~~~~$\displaystyle
+\int{\frac{dx}{(px+q)\sqrt{ax+b}}}~dx$}
+$$\int{\frac{dx}{(px+q)\sqrt{ax+b}}}=
+\left\{
+\begin{array}{l}
+\frac{1}{\sqrt{bp-aq}\sqrt{p}}\ln\left(
+\frac{\sqrt{p(ax+b)}-\sqrt{bp-aq}}{\sqrt{p(ax+b)}+\sqrt{bp-aq}}\right)\\
+\frac{2}{\sqrt{aq-bp}\sqrt{p}}\tan^{-1}\sqrt{\frac{p(ax+b)}{aq-bp}}
+\end{array}
+\right.
+$$
+<<*>>=
+)clear all
+
+--S 2 of 7
+aa:=integrate(1/((p*x+q)*sqrt(a*x+b)),x)
+--R 
+--R
+--R   (1)
+--R                                                          +--------------+
+--R                      2  +-------+                        |             2
+--R        (2a p q - 2b p )\|a x + b  + (a p x - a q + 2b p)\|- a p q + b p
+--R    log(------------------------------------------------------------------)
+--R                                      p x + q
+--R   [-----------------------------------------------------------------------,
+--R                                +--------------+
+--R                                |             2
+--R                               \|- a p q + b p
+--R           +------------+
+--R           |           2  +-------+
+--R          \|a p q - b p  \|a x + b
+--R    2atan(-------------------------)
+--R                  a q - b p
+--R    --------------------------------]
+--R              +------------+
+--R              |           2
+--R             \|a p q - b p
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.115~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{px+q}}~dx$}
+$$\int{\frac{\sqrt{ax+b}}{px+q}}=
+\left\{
+\begin{array}{l}
+\frac{2\sqrt{ax+b}}{p}+\frac{\sqrt{bp-aq}}{p\sqrt{p}}\ln\left(
+\frac{\sqrt{p(ax+b)}-\sqrt{bp-aq}}{\sqrt{p(ax+b)}+\sqrt{bp-aq}}\right)\\
+\frac{2\sqrt{ax+b}}{p}-\frac{2\sqrt{aq-bp}}{p\sqrt{p}}
+\tan^{-1}\sqrt{\frac{p(ax+b)}{aq-bp}}
+\end{array}
+\right.$$
+<<*>>=
+)clear all
+
+--S 3 of 7
+aa:=integrate(sqrt(a*x+b)/(p*x+q),x)
+--R 
+--R
+--R   (1)
+--R   [
+--R                                +-----------+
+--R                                |- a q + b p  +-------+
+--R          +-----------+    - 2p |----------- \|a x + b  + a p x - a q + 2b p
+--R          |- a q + b p         \|     p
+--R          |----------- log(-------------------------------------------------)
+--R         \|     p                               p x + q
+--R       + 
+--R           +-------+
+--R         2\|a x + b
+--R    /
+--R       p
+--R     ,
+--R         +---------+       +-------+
+--R         |a q - b p       \|a x + b       +-------+
+--R    - 2  |--------- atan(------------ + 2\|a x + b
+--R        \|    p           +---------+
+--R                          |a q - b p
+--R                          |---------
+--R                         \|    p
+--R    -----------------------------------------------]
+--R                           p
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.116~~~~~$\displaystyle\int{(px+b)^n\sqrt{ax+b}}~dx$}
+$$\int{(px+b)^n\sqrt{ax+b}}=
+\frac{2(px+q)^{n+1}\sqrt{ax+b}}{(2n+3)p}+\frac{bp-aq}{(2n+3)p}
+\int{\frac{(px+q)^n}{\sqrt{ax+b}}}~dx$$
+
+<<*>>=
+)clear all
+
+--S 4 of 7
+aa:=integrate((p*x+q)^n*sqrt(a*x+b),x)
+--R 
+--R
+--R           x
+--R         ++            n +--------+
+--I   (1)   |   (q + %L p) \|b + %L a d%L
+--R        ++
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.117~~~~~$\displaystyle
+\int{\frac{dx}{(px+b)^n\sqrt{ax+b}}}$}
+$$\int{\frac{dx}{(px+b)^n\sqrt{ax+b}}}=
+\frac{\sqrt{ax+b}}{(n-1)(aq-bp)(px+q)^{n-1}}+
+\frac{(2n-3)a}{2(n-1)(aq-bp)}
+\int{\frac{dx}{(px+q)^{n-1}\sqrt{ax+b}}}$$
+
+<<*>>=
+)clear all
+
+--S 5 of 7
+aa:=integrate(1/((p*x+q)^n*sqrt(a*x+b)),x)
+--R 
+--R
+--R           x
+--R         ++             1
+--I   (1)   |   ---------------------- d%L
+--R        ++             n +--------+
+--I             (q + %L p) \|b + %L a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.118~~~~~$\displaystyle
+\int{\frac{(px+q)^n}{\sqrt{ax+b}}}~dx$}
+$$\int{\frac{(px+q)^n}{\sqrt{ax+b}}}=
+\frac{2(px+q)^n\sqrt{ax+b}}{(2n+1)a}+
+\frac{2n(aq-bp)}{(2n+1)a}
+\int{\frac{(px+q)^{n-1}}{\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 6 of 7
+aa:=integrate((p*x+q)^n/sqrt(a*x+b),x)
+--R 
+--R
+--R           x           n
+--I         ++  (q + %L p)
+--I   (1)   |   ----------- d%L
+--R        ++    +--------+
+--I             \|b + %L a
+--R                                          Type: Union(Expression Integer,...)
+--E
+@
+
+\section{\cite{1}:14.119~~~~~$\displaystyle
+\int{\frac{\sqrt{ax+b}}{(px+q)^n}}~dx$}
+$$\int{\frac{\sqrt{ax+b}}{(px+q)^n}}=
+\frac{-\sqrt{ax+b}}{(n-1)p(px+q)^{n-1}}+
+\frac{a}{2(n-1)p}\int{\frac{dx}{(px+q)^{n-1}\sqrt{ax+b}}}$$
+<<*>>=
+)clear all
+
+--S 7 of 7
+aa:=integrate(sqrt(a*x+b)/(p*x+q)^n,x)
+--R 
+--R
+--R           x  +--------+
+--I         ++  \|b + %L a
+--I   (1)   |   ----------- d%L
+--R        ++             n
+--I             (q + %L p)
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 p63
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum5.input.pamphlet b/src/input/schaum5.input.pamphlet
new file mode 100644
index 0000000..a784b92
--- /dev/null
+++ b/src/input/schaum5.input.pamphlet
@@ -0,0 +1,367 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum5.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.120~~~~~$\displaystyle
+\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}$}
+$$\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}=
+\left\{
+\begin{array}{l}
+\frac{2}{\sqrt{ap}}\ln\left(\sqrt{a(px+q)}+\sqrt{p(ax+b)}\right)\\
+\frac{2}{\sqrt{-ap}}\tan^{-1}\sqrt{\frac{-p(ax+b)}{a(px+b)}}
+\end{array}
+\right.$$
+<<*>>=
+)spool schaum5.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 5
+aa:=integrate(1/sqrt((a*x+b)*(p*x+q)),x)
+--R 
+--R
+--R   (1)
+--R   [
+--R       log
+--R                                       +---------------------------+
+--R                 +---+ +---+           |     2
+--R              (2\|a p \|b q  - 2a p x)\|a p x  + (a q + b p)x + b q
+--R            + 
+--R                     +---+            2                          +---+
+--R              2a p x\|b q  + (- 2a p x  + (- a q - b p)x - 2b q)\|a p
+--R         /
+--R                    +---------------------------+
+--R              +---+ |     2
+--R            2\|b q \|a p x  + (a q + b p)x + b q  + (- a q - b p)x - 2b q
+--R    /
+--R        +---+
+--R       \|a p
+--R     ,
+--R                   +---------------------------+
+--R           +-----+ |     2                          +-----+ +---+
+--R          \|- a p \|a p x  + (a q + b p)x + b q  - \|- a p \|b q
+--R    2atan(-------------------------------------------------------)
+--R                                   a p x
+--R    --------------------------------------------------------------]
+--R                                +-----+
+--R                               \|- a p
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.121~~~~~$\displaystyle
+\int{\frac{x~dx}{\sqrt{(ax+b)(px+q)}}}$}
+$$\int{\frac{x~dx}{\sqrt{(ax+b)(px+q)}}}=
+\frac{\sqrt{(ax+b)(px+q)}}{ap}-\frac{bp+aq}{2ap}
+\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}
+$$
+<<*>>=
+)clear all
+
+--S 2 of 5
+aa:=integrate(x/sqrt((a*x+b)*(p*x+q)),x)
+--R 
+--R
+--R   (1)
+--R   [
+--R                                 +---------------------------+
+--R                           +---+ |     2
+--R             (2a q + 2b p)\|b q \|a p x  + (a q + b p)x + b q
+--R           + 
+--R                 2 2               2 2           2     2
+--R             (- a q  - 2a b p q - b p )x - 2a b q  - 2b p q
+--R        *
+--R           log
+--R                                           +---------------------------+
+--R                     +---+ +---+           |     2
+--R                  (2\|a p \|b q  + 2a p x)\|a p x  + (a q + b p)x + b q
+--R                + 
+--R                           +---+            2                          +---+
+--R                  - 2a p x\|b q  + (- 2a p x  + (- a q - b p)x - 2b q)\|a p
+--R             /
+--R                        +---------------------------+
+--R                  +---+ |     2
+--R                2\|b q \|a p x  + (a q + b p)x + b q  + (- a q - b p)x - 2b q
+--R       + 
+--R                                +---------------------------+
+--R                          +---+ |     2
+--R         (- 2a q - 2b p)x\|a p \|a p x  + (a q + b p)x + b q
+--R       + 
+--R                2                   +---+ +---+
+--R         (4a p x  + (2a q + 2b p)x)\|a p \|b q
+--R    /
+--R                          +---------------------------+
+--R              +---+ +---+ |     2
+--R         4a p\|a p \|b q \|a p x  + (a q + b p)x + b q
+--R       + 
+--R               2            2               +---+
+--R         ((- 2a p q - 2a b p )x - 4a b p q)\|a p
+--R     ,
+--R
+--R                                   +---------------------------+
+--R                             +---+ |     2
+--R             (- 2a q - 2b p)\|b q \|a p x  + (a q + b p)x + b q
+--R           + 
+--R               2 2               2 2           2     2
+--R             (a q  + 2a b p q + b p )x + 2a b q  + 2b p q
+--R        *
+--R                         +---------------------------+
+--R                 +-----+ |     2                          +-----+ +---+
+--R                \|- a p \|a p x  + (a q + b p)x + b q  - \|- a p \|b q
+--R           atan(-------------------------------------------------------)
+--R                                         a p x
+--R       + 
+--R                                +---------------------------+
+--R                        +-----+ |     2
+--R         (- a q - b p)x\|- a p \|a p x  + (a q + b p)x + b q
+--R       + 
+--R                2                 +-----+ +---+
+--R         (2a p x  + (a q + b p)x)\|- a p \|b q
+--R    /
+--R                            +---------------------------+
+--R              +-----+ +---+ |     2
+--R         2a p\|- a p \|b q \|a p x  + (a q + b p)x + b q
+--R       + 
+--R              2           2               +-----+
+--R         ((- a p q - a b p )x - 2a b p q)\|- a p
+--R     ]
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.122~~~~~$\displaystyle\int{\sqrt{(ax+b)(px+q)}}~dx$}
+$$\int{\sqrt{(ax+b)(px+q)}}=
+\frac{2apx+bp+aq}{4ap}\sqrt{(ax+b)(px+q)}-
+\frac{(bp-aq)^2}{8ap}\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}
+$$
+<<*>>=
+)clear all
+
+--S 3 of 5
+aa:=integrate(sqrt((a*x+b)*(p*x+q)),x)
+--R 
+--R
+--R   (1)
+--R   [
+--R                    3 3     2     2       2 2      3 3       2   3        2   2
+--R                 (4a q  - 4a b p q  - 4a b p q + 4b p )x + 8a b q  - 16a b p q
+--R               + 
+--R                   3 2
+--R                 8b p q
+--R            *
+--R                      +---------------------------+
+--R                +---+ |     2
+--R               \|b q \|a p x  + (a q + b p)x + b q
+--R           + 
+--R                 4 4     3     3      2 2 2 2       3 3     4 4  2
+--R             (- a q  - 4a b p q  + 10a b p q  - 4a b p q - b p )x
+--R           + 
+--R                  3   4     2 2   3       3 2 2     4 3        2 2 4
+--R             (- 8a b q  + 8a b p q  + 8a b p q  - 8b p q)x - 8a b q
+--R           + 
+--R                  3   3     4 2 2
+--R             16a b p q  - 8b p q
+--R        *
+--R           log
+--R                                           +---------------------------+
+--R                     +---+ +---+           |     2
+--R                  (2\|a p \|b q  + 2a p x)\|a p x  + (a q + b p)x + b q
+--R                + 
+--R                           +---+            2                          +---+
+--R                  - 2a p x\|b q  + (- 2a p x  + (- a q - b p)x - 2b q)\|a p
+--R             /
+--R                        +---------------------------+
+--R                  +---+ |     2
+--R                2\|b q \|a p x  + (a q + b p)x + b q  + (- a q - b p)x - 2b q
+--R       + 
+--R                  3   2      2   2        2 3  3
+--R             (- 4a p q  - 24a b p q - 4a b p )x
+--R           + 
+--R                  3 3      2     2        2 2      3 3  2
+--R             (- 2a q  - 46a b p q  - 46a b p q - 2b p )x
+--R           + 
+--R                  2   3        2   2     3 2
+--R             (- 8a b q  - 48a b p q  - 8b p q)x
+--R        *
+--R                  +---------------------------+
+--R            +---+ |     2
+--R           \|a p \|a p x  + (a q + b p)x + b q
+--R       + 
+--R                 3 2       2   3  4       3   2      2   2         2 3  3
+--R             (16a p q + 16a b p )x  + (24a p q  + 80a b p q + 24a b p )x
+--R           + 
+--R                3 3      2     2        2 2      3 3  2
+--R             (6a q  + 74a b p q  + 74a b p q + 6b p )x
+--R           + 
+--R                2   3        2   2     3 2
+--R             (8a b q  + 48a b p q  + 8b p q)x
+--R        *
+--R            +---+ +---+
+--R           \|a p \|b q
+--R    /
+--R                2             2                +---+ +---+
+--R           ((32a p q + 32a b p )x + 64a b p q)\|a p \|b q
+--R        *
+--R            +---------------------------+
+--R            |     2
+--R           \|a p x  + (a q + b p)x + b q
+--R       + 
+--R                  3   2      2   2        2 3  2         2     2        2 2
+--R             (- 8a p q  - 48a b p q - 8a b p )x  + (- 64a b p q  - 64a b p q)x
+--R           + 
+--R                    2   2
+--R             - 64a b p q
+--R        *
+--R            +---+
+--R           \|a p
+--R     ,
+--R
+--R                      3 3     2     2       2 2      3 3       2   3
+--R                 (- 4a q  + 4a b p q  + 4a b p q - 4b p )x - 8a b q
+--R               + 
+--R                      2   2     3 2
+--R                 16a b p q  - 8b p q
+--R            *
+--R                      +---------------------------+
+--R                +---+ |     2
+--R               \|b q \|a p x  + (a q + b p)x + b q
+--R           + 
+--R               4 4     3     3      2 2 2 2       3 3     4 4  2
+--R             (a q  + 4a b p q  - 10a b p q  + 4a b p q + b p )x
+--R           + 
+--R                3   4     2 2   3       3 2 2     4 3        2 2 4        3   3
+--R             (8a b q  - 8a b p q  - 8a b p q  + 8b p q)x + 8a b q  - 16a b p q
+--R           + 
+--R               4 2 2
+--R             8b p q
+--R        *
+--R                         +---------------------------+
+--R                 +-----+ |     2                          +-----+ +---+
+--R                \|- a p \|a p x  + (a q + b p)x + b q  - \|- a p \|b q
+--R           atan(-------------------------------------------------------)
+--R                                         a p x
+--R       + 
+--R                  3   2      2   2        2 3  3
+--R             (- 2a p q  - 12a b p q - 2a b p )x
+--R           + 
+--R                 3 3      2     2        2 2     3 3  2
+--R             (- a q  - 23a b p q  - 23a b p q - b p )x
+--R           + 
+--R                  2   3        2   2     3 2
+--R             (- 4a b q  - 24a b p q  - 4b p q)x
+--R        *
+--R                    +---------------------------+
+--R            +-----+ |     2
+--R           \|- a p \|a p x  + (a q + b p)x + b q
+--R       + 
+--R                3 2      2   3  4       3   2      2   2         2 3  3
+--R             (8a p q + 8a b p )x  + (12a p q  + 40a b p q + 12a b p )x
+--R           + 
+--R                3 3      2     2        2 2      3 3  2
+--R             (3a q  + 37a b p q  + 37a b p q + 3b p )x
+--R           + 
+--R                2   3        2   2     3 2
+--R             (4a b q  + 24a b p q  + 4b p q)x
+--R        *
+--R            +-----+ +---+
+--R           \|- a p \|b q
+--R    /
+--R                2             2                +-----+ +---+
+--R           ((16a p q + 16a b p )x + 32a b p q)\|- a p \|b q
+--R        *
+--R            +---------------------------+
+--R            |     2
+--R           \|a p x  + (a q + b p)x + b q
+--R       + 
+--R                  3   2      2   2        2 3  2         2     2        2 2
+--R             (- 4a p q  - 24a b p q - 4a b p )x  + (- 32a b p q  - 32a b p q)x
+--R           + 
+--R                    2   2
+--R             - 32a b p q
+--R        *
+--R            +-----+
+--R           \|- a p
+--R     ]
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.123~~~~~$\displaystyle\int{\sqrt{\frac{px+q}{ax+b}}}~dx$}
+$$\int{\sqrt{\frac{px+q}{ax+b}}}=
+\frac{\sqrt{(ax+b)(px+q)}}{a}+\frac{aq-bp}{2a}
+\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}
+$$
+<<*>>=
+)clear all
+
+--S 4 of 5
+aa:=integrate(sqrt((p*x+q)/(a*x+b)),x)
+--R 
+--R
+--R   (1)
+--R   [
+--R           (a q - b p)
+--R        *
+--R                                                              +-------+
+--R                                    +---+      2              |p x + q
+--R           log((2a p x + a q + b p)\|a p  + (2a p x + 2a b p) |------- )
+--R                                                             \|a x + b
+--R       + 
+--R                     +-------+
+--R                     |p x + q  +---+
+--R         (2a x + 2b) |------- \|a p
+--R                    \|a x + b
+--R    /
+--R          +---+
+--R       2a\|a p
+--R     ,
+--R                             +-------+
+--R                     +-----+ |p x + q
+--R                    \|- a p  |-------                       +-------+
+--R                            \|a x + b               +-----+ |p x + q
+--R    (a q - b p)atan(------------------) + (a x + b)\|- a p  |-------
+--R                             p                             \|a x + b
+--R    -----------------------------------------------------------------]
+--R                                  +-----+
+--R                                a\|- a p
+--R                                     Type: Union(List Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.124~~~~~$\displaystyle
+\int{\frac{dx}{(px+q)\sqrt{(ax+b)(px+q)}}}~dx$}
+$$\int{\frac{dx}{(px+q)\sqrt{(ax+b)(px+q)}}}=
+\frac{2\sqrt{ax+b}}{(aq-bp)\sqrt{px+q}}
+$$
+<<*>>=
+)clear all
+
+--S 5 of 5
+aa:=integrate(1/((p*x+q)*sqrt((a*x+b)*(p*x+q))),x)
+--R 
+--R
+--R                                 2x
+--R   (1)  ---------------------------------------------------
+--R          +---------------------------+
+--R          |     2                                     +---+
+--R        q\|a p x  + (a q + b p)x + b q  + (- p x - q)\|b q
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 pp63-64
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum6.input.pamphlet b/src/input/schaum6.input.pamphlet
new file mode 100644
index 0000000..1a4b430
--- /dev/null
+++ b/src/input/schaum6.input.pamphlet
@@ -0,0 +1,400 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum6.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.125~~~~~$\displaystyle\int{\frac{dx}{x^2+a^2}}$}
+$$\int{\frac{dx}{x^2+a^2}}=\frac{1}{a}\tan^{-1}\frac{x}{a}$$
+<<*>>=
+)spool schaum6.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 19
+aa:=integrate(1/(x^2+a^2),x)
+--R 
+--R
+--R             x
+--R        atan(-)
+--R             a
+--R   (1)  -------
+--R           a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.126~~~~~$\displaystyle\int{\frac{x~dx}{x^2+a^2}}$}
+$$\int{\frac{x~dx}{x^2+a^2}}=\frac{1}{2}\ln(x^2+a^2)$$
+<<*>>=
+)clear all
+
+--S 2 of 19
+aa:=integrate(x/(x^2+a^2),x)
+--R 
+--R
+--R             2    2
+--R        log(x  + a )
+--R   (1)  ------------
+--R              2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.127~~~~~$\displaystyle\int{\frac{x^2~dx}{x^2+a^2}}$}
+$$\int{\frac{x^2~dx}{x^2+a^2}}=x-a\tan^{-1}\frac{x}{a}$$
+<<*>>=
+)clear all
+
+--S 3 of 19
+aa:=integrate(x^2/(x^2+a^2),x)
+--R 
+--R
+--R                 x
+--R   (1)  - a atan(-) + x
+--R                 a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.128~~~~~$\displaystyle\int{\frac{x^3~dx}{x^2+a^2}}$}
+$$\int{\frac{x^3~dx}{x^2+a^2}}=\frac{x^2}{2}-\frac{a^2}{2}\ln(x^2+a^2)$$
+
+<<*>>=
+)clear all
+
+--S 4 of 19
+aa:=integrate(x^3/(x^2+a^2),x)
+--R 
+--R
+--R           2     2    2     2
+--R        - a log(x  + a ) + x
+--R   (1)  ---------------------
+--R                  2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.129~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)}}~dx$}
+$$\int{\frac{dx}{x(x^2+a^2)}}=
+\frac{1}{2a^2}\ln\left(\frac{x^2}{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 5 of 19
+aa:=integrate(1/(x*(x^2+a^2)),x)
+--R 
+--R
+--R               2    2
+--R        - log(x  + a ) + 2log(x)
+--R   (1)  ------------------------
+--R                     2
+--R                   2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.130~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2+a^2)}}~dx$}
+$$\int{\frac{dx}{x^2(x^2+a^2)}}=
+-\frac{1}{a^2x}-\frac{1}{a^3}\tan^{-1}\frac{x}{a}
+$$
+<<*>>=
+)clear all
+
+--S 6 of 19
+aa:=integrate(1/(x^2*(x^2+a^2)),x)
+--R 
+--R
+--R                 x
+--R        - x atan(-) - a
+--R                 a
+--R   (1)  ---------------
+--R               3
+--R              a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.131~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2+a^2)}}~dx$}
+$$\int{\frac{dx}{x^3(x^2+a^2)}}=
+-\frac{1}{2a^2x^2}-\frac{1}{2a^4}\ln\left(\frac{x^2}{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 7 of 19
+aa:=integrate(1/(x^3*(x^2+a^2)),x)
+--R 
+--R
+--R         2     2    2      2          2
+--R        x log(x  + a ) - 2x log(x) - a
+--R   (1)  -------------------------------
+--R                       4 2
+--R                     2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.132~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^2}}~dx$}
+$$\int{\frac{dx}{(x^2+a^2)^2}}=
+\frac{x}{2a^2(x^2+a^2)}+\frac{1}{2a^3}\tan^{-1}\frac{x}{a}
+$$
+<<*>>=
+)clear all
+
+--S 8 of 19
+aa:=integrate(1/((x^2+a^2)^2),x)
+--R 
+--R
+--R          2    2      x
+--R        (x  + a )atan(-) + a x
+--R                      a
+--R   (1)  ----------------------
+--R                3 2     5
+--R              2a x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.133~~~~~$\displaystyle\int{\frac{x~dx}{(x^2+a^2)^2}}~dx$}
+$$\int{\frac{x~dx}{(x^2+a^2)^2}}=
+\frac{-1}{2(x^2+a^2)}
+$$
+<<*>>=
+)clear all
+
+--S 9 of 19
+aa:=integrate(x/((x^2+a^2)^2),x)
+--R 
+--R
+--R              1
+--R   (1)  - ---------
+--R            2     2
+--R          2x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.134~~~~~$\displaystyle\int{\frac{x^2dx}{(x^2+a^2)^2}}~dx$}
+$$\int{\frac{x^2dx}{(x^2+a^2)^2}}=
+\frac{-x}{2(x^2+a^2)}+\frac{1}{2a}\tan^{-1}\frac{x}{a}
+$$
+<<*>>=
+)clear all
+
+--S 10 of 19
+aa:=integrate(x^2/((x^2+a^2)^2),x)
+--R 
+--R
+--R          2    2      x
+--R        (x  + a )atan(-) - a x
+--R                      a
+--R   (1)  ----------------------
+--R                  2     3
+--R              2a x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.135~~~~~$\displaystyle\int{\frac{x^3dx}{(x^2+a^2)^2}}~dx$}
+$$\int{\frac{x^3dx}{(x^2+a^2)^2}}=
+\frac{a^2}{2(x^2+a^2)}+\frac{1}{2}\ln(x^2+a^2)
+$$
+<<*>>=
+)clear all
+
+--S 11 of 19
+aa:=integrate(x^3/((x^2+a^2)^2),x)
+--R 
+--R
+--R          2    2      2    2     2
+--R        (x  + a )log(x  + a ) + a
+--R   (1)  --------------------------
+--R                   2     2
+--R                 2x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.136~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)^2}}~dx$}
+$$\int{\frac{dx}{x(x^2+a^2)^2}}=
+\frac{1}{2a^2(x^2+a^2)}+\frac{1}{2a^4}\ln\left(\frac{x^2}{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 12 of 19
+aa:=integrate(1/(x*(x^2+a^2)^2),x)
+--R 
+--R
+--R            2    2      2    2       2     2           2
+--R        (- x  - a )log(x  + a ) + (2x  + 2a )log(x) + a
+--R   (1)  ------------------------------------------------
+--R                             4 2     6
+--R                           2a x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.137~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2+a^2)^2}}~dx$}
+$$\int{\frac{dx}{x^2(x^2+a^2)^2}}=
+-\frac{1}{a^4x}-\frac{x}{2a^4(x^2+a^2)}-\frac{3}{2a^5}\tan^{-1}\frac{x}{a}
+$$
+<<*>>=
+)clear all
+
+--S 13 of 19
+aa:=integrate(1/((x^2+a^2)^2),x)
+--R 
+--R
+--R          2    2      x
+--R        (x  + a )atan(-) + a x
+--R                      a
+--R   (1)  ----------------------
+--R                3 2     5
+--R              2a x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.138~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2+a^2)^2}}~dx$}
+$$\int{\frac{dx}{x^3(x^2+a^2)^2}}=
+-\frac{1}{2a^4x^2}-\frac{1}{2a^4(x^2+a^2)}-
+\frac{1}{a^6}\ln\left(\frac{x^2}{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 14 of 19
+aa:=integrate(1/(x^3*(x^2+a^2)^2),x)
+--R 
+--R
+--R           4     2 2      2    2         4     2 2            2 2    4
+--R        (2x  + 2a x )log(x  + a ) + (- 4x  - 4a x )log(x) - 2a x  - a
+--R   (1)  --------------------------------------------------------------
+--R                                   6 4     8 2
+--R                                 2a x  + 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.139~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^n}}~dx$}
+$$\int{\frac{dx}{(x^2+a^2)^n}}=
+\frac{x}{2(n-1)a^2(x^2+a^2)^{n-1}}+\frac{2n-3}{(2n-2)a^2}
+\int{\frac{dx}{(x^2+a^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 15 of 19
+aa:=integrate(1/((x^2+a^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++       1
+--I   (1)   |   ----------- d%L
+--R        ++     2     2 n
+--I             (a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.140~~~~~$\displaystyle\int{\frac{x~dx}{(x^2+a^2)^n}}~dx$}
+$$\int{\frac{x~dx}{(x^2+a^2)^n}}=
+\frac{-1}{2(n-1)(x^2+a^2)^{n-1}}
+$$
+<<*>>=
+)clear all
+
+--S 16 of 19
+aa:=integrate(x/((x^2+a^2)^n),x)
+--R 
+--R
+--R                   2    2
+--R                - x  - a
+--R   (1)  ------------------------
+--R                         2    2
+--R                  n log(x  + a )
+--R        (2n - 2)%e
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.141~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)^n}}~dx$}
+$$\int{\frac{dx}{x(x^2+a^2)^n}}=
+\frac{1}{2(n-1)a^2(x^2+a^2)^{n-1}}+\frac{1}{a^2}
+\int{\frac{dx}{x(x^2+a^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 17 of 19
+aa:=integrate(1/(x*(x^2+a^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++         1
+--I   (1)   |   -------------- d%L
+--R        ++        2     2 n
+--I             %L (a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.142~~~~~$\displaystyle\int{\frac{x^mdx}{(x^2+a^2)^n}}~dx$}
+$$\int{\frac{x^mdx}{(x^2+a^2)^n}}=
+\int{\frac{x^{m-2}dx}{(x^2+a^2)^{n-1}}} -
+a^2\int{\frac{x^{m-2}dx}{(x^2+a^2)^n}}
+$$
+<<*>>=
+)clear all
+
+--S 18 of 19
+aa:=integrate(x^m/((x^2+a^2)^n),x)
+--R 
+--R
+--R           x       m
+--I         ++      %L
+--I   (1)   |   ----------- d%L
+--R        ++     2     2 n
+--I             (a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.143~~~~~$\displaystyle\int{\frac{dx}{x^m(x^2+a^2)^n}}~dx$}
+$$\int{\frac{dx}{x^m(x^2+a^2)^n}}=
+\frac{1}{a^2}\int{\frac{dx}{x^m(x^2+a^2)^{n-1}}}-
+\frac{1}{a^2}\int{\frac{dx}{x^{m-2}(x^2+a^2)^n}}
+$$
+<<*>>=
+)clear all
+
+--S 19 of 19
+aa:=integrate(1/(x^m*(x^2+a^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++         1
+--I   (1)   |   -------------- d%L
+--R        ++     m  2     2 n
+--I             %L (a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 p64
+\end{thebibliography}
+\end{document}

\start
Date: Sat, 29 Mar 2008 09:31:45 -0400
From: Raymond Rogers
To: list
Subject: Fedora 8 binary problem

Hi,

 Apparently the binary for fedora 8 has residual references to root.  
"cc1: error: /root/axiom/mnt/fedora8/bin/../h: Permission denied"

I followed the suggested installation and installed in /usr/local/axiom

Attached are two test files:
1) The result of
[rrogers@linux-3 ~]$ set |egrep axiom  >axiom.lst
2) The test file that produces the call to /root/  instead of /usr/local
test.input
The error occurs when a non-superuser does
)read test.input
    I am trying to generate a work around (ln -s) but have failed so 
far; and I was unable to compile the source code.

--------------050102080006080009050509
 name="axiom.lst"
 filename="axiom.lst"

AXIOM=/usr/local/axiom/mnt/fedora8
PATH=/usr/local/axiom/mnt/fedora8/bin:/opt/axiom/mnt/fedora8/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin:/usr/games:/home/rrogers/bin

--------------050102080006080009050509
 name="test.input"
 filename="test.input"

LS0tCi0tLSBUZXN0IHByb2dyYW0gdG8gYW5hbHl6ZSBncm9lYm5lciBmYWlsdXJlcwotLS0g
b24gS0tUIGFuYWx5c2lzCi0tLQotLS0gVHlwZSBjYXN0aW5nCi0tLQooUERGLEMsQ3MsRXFz
KTogRE1QKFt4LHkseix3LHJdLCBQT0xZIEZSQUMgSU5UKQotLS0gCi0tLSBDZW50ZXJlZCBQ
REYgCi0tLQpQREY6PVstcl4yK3heMit5XjIrel4yXTsKLS0tIEZvciBjcm9zcyBwdXBvc2Vz
OiB4PVJiLCB5PVZvLCB6PVZyZWYsdz1WcgotLS0KLS0tIENvbnN0cmFpbnQgCi0tLQpDOj1b
LTIqeisoMip4KzQpKncrKC0yKngtNCkqeT0wXTsKLS0tIFNpbXBsZSBjb25zdHJhaW50CkNz
Oj1bLTIqeisoMip4KzQpKncrKC00KnkpPTBdOwotLS0KLS0tCi0tLSBHcmFkaWVudAoKLS0g
RnVuY3Rpb25zDQotLQotLSBncmFkIHJldHVybnMgdGhlIGxpc3Qgb2Ygb2YgcGFydGlhbCBk
ZXJpdmF0aXZlcwotLSBvZiBmIHdpdGggcmVzcGVjdCB0byB0aGUgbGlzdCBBCgpncmFkKGYs
QSk9PVtEKGYsW2ldKSBmb3IgaSBpbiBBXQotLQotLSBncmFkTiByZXR1cm5zIHRoZSBudW1l
cmF0b3JzIG9mIGdyYWQgdW5kZXIgdGhlIHByZXN1bXB0aW9uDQotLSB0aGF0IG9ubHkgdGhl
IHplcm9zIGFyZSBvZiBpbnRlcmVzdA0KLS0KZ3JhZE4oZixBKT09W251bWVyKEQoZixpKTo6
RlJBQyBQT0xZIEZSQUMgSU5UKSBmb3IgaSBpbiBBXTo6TElTVCBETVAoQSxQT0xZIEZSQUMg
SU5UKQoKCi0tLSAKLS0tCi0tLSB0ZXN0cwotLS0KRXFzOj1hcHBlbmQoQ3MsZ3JhZChQREYs
W3gseSx6XSk9cCpncmFkKENzLHgseSx6KSkKYW5zOj1zb2x2ZShFcXMsW3gseSx6XSkKCgkK
CQoK
--------------050102080006080009050509--

\start
Date: Sat, 29 Mar 2008 11:15:26 -0500
From: Tim Daly
To: Raymond Rogers
Subject: Re: Fedora 8 binary problem

> Apparently the binary for fedora 8 has residual references to root.  
>"cc1: error: /root/axiom/mnt/fedora8/bin/../h: Permission denied"
>
>I followed the suggested installation and installed in /usr/local/axiom
>
>Attached are two test files:
>1) The result of
>[rrogers@linux-3 ~]$ set |egrep axiom  >axiom.lst
>2) The test file that produces the call to /root/  instead of /usr/local
>test.input
>The error occurs when a non-superuser does
>)read test.input
>    I am trying to generate a work around (ln -s) but have failed so 
>far; and I was unable to compile the source code.

Ok. I'll look into it.

\start
Date: Sat, 29 Mar 2008 12:14:30 -0500
From: Tim Daly
To: Raymond Rogers
Subject: Re: Fedora 8 binary problem

I logged into my fedora8 box as root and then did:

# as root:
# Create an installed copy of Axiom in /usr/local
# This is basically a copy operation

mkdir /usr/local/axiom
cp -pr mnt /usr/local/axiom

# To test your setup I create a new user
useradd daly

# Try to run Axiom as daly
su - daly

# as daly:
# make an input file
echo "3+5" >test.input
# set up the environment variables
export AXIOM=/usr/local/axiom/mnt/fedora8
export PATH=$AXIOM/bin:$PATH
axiom 
   (failed to start)

# become root:
su -

# We need to fix the randomize_va_space
echo 0 >/proc/sys/kernel/randomize_va_space
exit

# as daly again,
axiom
)read test

# this worked for me.

When I try to run your example it fails due to an inability to coerce
but I can read the input file.

To debug it try:

strace axiom

and see if you can spot the permission bit that might be failing.
If nothing is obvious, post the strace output and I'll help.

\start
Date: Sun, 30 Mar 2008 04:33:07 -0500
From: Tim Daly
To: Alfredo Portes, Camm Maguire
Subject: Re: Bug in AXserver.spad

My best guess at this point is that the problem happens below the
lisp level at the socket level. 

So if I open the socket and wait for a request from either the
local machine or a remote machine I should get my function called
with a stream that contains the input characters which are the
headers of the request, at minimum.

The local machine requests always prints the request type.

request type: GET

I turned on some debugging and I see one of two failure conditions occur.
Either we get nothing in the stream and only see

request type: 

and nothing else when sent from a remote machine. I modified the
read-char-no-hang loop to print out each character and it gets
nothing from the stream. Thus stream creation is broken in GCL.

Or if the remote request is successful we get a normal request
followed by a series of #xFF characters.  Apparently there is not an
agreement about the EOF character. This causes Axiom to loop looking
for EOF. I inserted code to check for this condition. Thus EOF
checking is broken in GCL.




To make the remote request succeed you simply need to hammer on
the link very fast for a while and the request will get thru.

However, that raises another problem that the XMLHttpRequest objects
can hang. I wrote some javascript code to do a timer pop if I get no
response. Once there is an outstanding XMLHttpRequest that does not
get a response then the connection is permanently hung.



All of this code works perfectly if you browse from the local machine.

\start
Date: Sun, 30 Mar 2008 01:35:58 -0700
From: Alfredo Portes
To: Tim Daly
Subject: Re: Bug in AXserver.spad

Hi Tim,

I found a good and bad solution:

The good is that the following code fixes the issue. There is
no hanging and the pages display properly.

  multiServ(s:SExpression):Void ==
        WriteLine("multiServ begin")$Lisp
        headers:String := ""
        char:String
        -- read in the http headers
        flag:Integer := 1
        length:Integer := 0
        while flag > 0 repeat
          char := STRING(READ_-LINE(s,NILL$Lisp,'eof)$Lisp)$Lisp
          length := LENGTH(char)$Lisp
          if length = 1 then
            flag := 0
          else
            headers := concat [headers,char]
          --WriteLine$Lisp "Header: "headers

The bad, this for some reason breaks the POST requests. The line
containing the command is never reached (last line). Maybe you
can take a look at my really bad code and fix it :-).

>  and nothing else when sent from a remote machine. I modified the
>  read-char-no-hang loop to print out each character and it gets
>  nothing from the stream. Thus stream creation is broken in GCL.

I think you only see the problem if you use:

read-char-no-hang

with

read-char or read-line, you will see that you always get something
from the stream.

>  Or if the remote request is successful we get a normal request
>  followed by a series of #xFF characters.  Apparently there is not an
>  agreement about the EOF character. This causes Axiom to loop looking
>  for EOF. I inserted code to check for this condition. Thus EOF
>  checking is broken in GCL.

You are absolutely right. I couldn't figure out what the end line is.
So by looking
at the output of the last line, it is a string of length one (not sure
what it is). So
I make the loop stop when I see that.

>  To make the remote request succeed you simply need to hammer on
>  the link very fast for a while and the request will get thru.

Yes.. :-) sometimes you dont have to hammer it and just press enter long enough
(you have to be very precise).

>  However, that raises another problem that the XMLHttpRequest objects
>  can hang. I wrote some javascript code to do a timer pop if I get no
>  response. Once there is an outstanding XMLHttpRequest that does not
>  get a response then the connection is permanently hung.

>  All of this code works perfectly if you browse from the local machine.

Yes it does. I still blame the the read-char-no-hang. You can see that
it works if
you use another function. And with the lisp code it works fine. I
guess this is a good
indication that the sockets in GCL work fine.

\start
Date: Mon, 31 Mar 2008 00:08:49 -0600
From: Tim Daly
To: list
Subject: 20080330.01.tpd.patch (CATS integration regression testing)

More files for integration testing. These are an initial checkin of
the raw files. More CATS work needs to be done on each one.

Tim
========================================================================
diff --git a/changelog b/changelog
index c467da5..6b98774 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,14 @@
+20080330 tpd src/input/Makefile add integration regression testing
+20080330 tpd src/input/schaum11.input integrals of sqrt(a^2-x^2)
+20080330 tpd src/input/schaum10.input integrals of sqrt(x^2-a^2)
+20080330 tpd src/input/schaum9.input integrals of sqrt(x^2+a^2)
+20080330 tpd src/input/schaum8.input integrals of a^2-x^2, x^2<a^2
+20080330 tpd src/input/schaum7.input integrals of x^2-a^2, x^2>a^2
+20080330 tpd src/input/schaum6.input make regression testing uniform
+20080330 tpd src/input/schaum5.input make regression testing uniform
+20080330 tpd src/input/schaum4.input make regression testing uniform
+20080330 tpd src/input/schaum3.input make regression testing uniform
+20080330 tpd src/input/schaum2.input make regression testing uniform
 20080328 tpd src/input/Makefile add integration regression testing
 20080328 tpd src/input/schaum6.input integrals of x^2+a^2
 20080328 tpd src/input/schaum5.input integrals of sqrt(ax+b) and sqrt(px+q)
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index d4caed2..a1382e4 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -356,7 +356,8 @@ REGRES= algaggr.regress algbrbf.regress  algfacob.regress alist.regress  \
     realclos.regress  reclos.regress   repa6.regress    robidoux.regress \
     roman.regress     roots.regress    ruleset.regress  rules.regress \
     schaum1.regress   schaum2.regress  schaum3.regress  schaum4.regress \
-    schaum5.regress   schaum6.regress \
+    schaum5.regress   schaum6.regress  schaum7.regress  schaum8.regress \
+    schaum9.regress   schaum10.regress schaum11.regress \
     scherk.regress    scope.regress    seccsc.regress \
     segbind.regress   seg.regress \
     series2.regress   series.regress   sersolve.regress set.regress \
@@ -630,7 +631,9 @@ FILES= ${OUT}/algaggr.input  ${OUT}/algbrbf.input    ${OUT}/algfacob.input \
        ${OUT}/robidoux.input ${OUT}/roman.input      ${OUT}/roots.input \
        ${OUT}/ruleset.input  ${OUT}/rules.input      ${OUT}/schaum1.input \
        ${OUT}/schaum2.input  ${OUT}/schaum3.input    ${OUT}/schaum4.input \
-       ${OUT}/schaum5.input  ${OUT}/schaum6.input \
+       ${OUT}/schaum5.input  ${OUT}/schaum6.input    ${OUT}/schaum7.input \
+       ${OUT}/schaum8.input  ${OUT}/schaum9.input    ${OUT}/schaum10.input \
+       ${OUT}/schaum11.input \
        ${OUT}/saddle.input \
        ${OUT}/scherk.input   ${OUT}/scope.input      ${OUT}/seccsc.input \
        ${OUT}/segbind.input  ${OUT}/seg.input        ${OUT}/series2.input \
@@ -932,6 +935,9 @@ DOCFILES= \
   ${DOC}/schaum1.input.dvi     ${DOC}/schaum2.input.dvi \
   ${DOC}/schaum3.input.dvi     ${DOC}/schaum4.input.dvi \
   ${DOC}/schaum5.input.dvi     ${DOC}/schaum6.input.dvi \
+  ${DOC}/schaum7.input.dvi     ${DOC}/schaum8.input.dvi \
+  ${DOC}/schaum9.input.dvi     ${DOC}/schaum10.input.dvi \
+  ${DOC}/schaum11.input.dvi \
   ${DOC}/s01eaf.input.dvi      ${DOC}/s13aaf.input.dvi     \
   ${DOC}/s13acf.input.dvi      ${DOC}/s13adf.input.dvi     \
   ${DOC}/s14aaf.input.dvi      ${DOC}/s14abf.input.dvi     \
diff --git a/src/input/schaum10.input.pamphlet b/src/input/schaum10.input.pamphlet
new file mode 100644
index 0000000..8582086
--- /dev/null
+++ b/src/input/schaum10.input.pamphlet
@@ -0,0 +1,757 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum10.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.210~~~~~$\displaystyle\int{\frac{dx}{\sqrt{x^2-a^2}}}$}
+$$\int{\frac{1}{\sqrt{x^2-a^2}}}=\ln\left(x+\sqrt{x^2-a^2}\right)$$
+<<*>>=
+)spool schaum10.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 28
+aa:=integrate(1/(sqrt(x^2-a^2)),x)
+--R 
+--R
+--R               +-------+
+--R               | 2    2
+--R   (1)  - log(\|x  - a   - x)
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.xxx~~~~~$\displaystyle\int{\frac{x~dx}{\sqrt{x^2-a^2}}}$}
+$$\int{\frac{x}{\sqrt{x^2-a^2}}}=\sqrt{x^2-a^2}$$
+<<*>>=
+)clear all
+
+--S 2 of 28
+aa:=integrate(x/(sqrt(x^2-a^2)),x)
+--R 
+--R
+--R            +-------+
+--R            | 2    2     2    2
+--R        - x\|x  - a   + x  - a
+--R   (1)  -----------------------
+--R              +-------+
+--R              | 2    2
+--R             \|x  - a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.211~~~~~$\displaystyle
+\int{\frac{x^2~dx}{\sqrt{x^2-a^2}}}$}
+$$\int{\frac{x^2}{\sqrt{x^2-a^2}}}=
+\frac{x\sqrt{x^2-a^2}}{2}+\frac{a^2}{2}\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 3 of 28
+aa:=integrate(x^2/sqrt(x^2-a^2),x)
+--R 
+--R
+--R   (1)
+--R               +-------+                   +-------+
+--R            2  | 2    2      2 2    4      | 2    2
+--R       (- 2a x\|x  - a   + 2a x  - a )log(\|x  - a   - x)
+--R     + 
+--R                     +-------+
+--R            3    2   | 2    2      4     2 2
+--R       (- 2x  + a x)\|x  - a   + 2x  - 2a x
+--R  /
+--R        +-------+
+--R        | 2    2      2     2
+--R     4x\|x  - a   - 4x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.212~~~~~$\displaystyle
+\int{\frac{x^3~dx}{\sqrt{x^2-a^2}}}$}
+$$\int{\frac{x^3}{\sqrt{x^2-a^2}}}=
+\frac{(x^2-a^2)^{3/2}}{3}+a^2\sqrt{x^2-a^2}
+$$
+<<*>>=
+)clear all
+
+--S 4 of 28
+aa:=integrate(x^3/sqrt(x^2-a^2),x)
+--R 
+--R
+--R                               +-------+
+--R             5     2 3     4   | 2    2      6     2 4     4 2     6
+--R        (- 4x  - 5a x  + 6a x)\|x  - a   + 4x  + 3a x  - 9a x  + 2a
+--R   (1)  ------------------------------------------------------------
+--R                                 +-------+
+--R                        2     2  | 2    2       3     2
+--R                    (12x  - 3a )\|x  - a   - 12x  + 9a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.213~~~~~$\displaystyle\int{\frac{dx}{x\sqrt{x^2-a^2}}}$}
+$$\int{\frac{1}{x\sqrt{x^2-a^2}}}=
+\frac{1}{a}\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 5 of 28
+aa:=integrate(1/(x*sqrt(x^2-a^2)),x)
+--R 
+--R
+--R               +-------+
+--R               | 2    2
+--R              \|x  - a   - x
+--R        2atan(--------------)
+--R                     a
+--R   (1)  ---------------------
+--R                  a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.214~~~~~$\displaystyle
+\int{\frac{dx}{x^2\sqrt{x^2-a^2}}}$}
+$$\int{\frac{1}{x^2\sqrt{x^2-a^2}}}=
+\frac{\sqrt{x^2-a^2}}{a^2x}
+$$
+<<*>>=
+)clear all
+
+--S 6 of 28
+aa:=integrate(1/(x^2*sqrt(x^2-a^2)),x)
+--R 
+--R
+--R                  1
+--R   (1)  - ----------------
+--R            +-------+
+--R            | 2    2     2
+--R          x\|x  - a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.215~~~~~$\displaystyle\int{\frac{dx}{x^3\sqrt{x^2-a^2}}}$}
+$$\int{\frac{1}{x^3\sqrt{x^2-a^2}}}=
+-\frac{\sqrt{x^2-a^2}}{2a^2x^2}+\frac{1}{2a^3}
+\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 7 of 28
+aa:=integrate(1/(x^3*sqrt(x^2-a^2)),x)
+--R 
+--R
+--R   (1)
+--R                                          +-------+
+--R            +-------+                     | 2    2
+--R          3 | 2    2      4     2 2      \|x  - a   - x
+--R       (4x \|x  - a   - 4x  + 2a x )atan(--------------)
+--R                                                a
+--R     + 
+--R                      +-------+
+--R              2    3  | 2    2        3     3
+--R       (- 2a x  + a )\|x  - a   + 2a x  - 2a x
+--R  /
+--R           +-------+
+--R       3 3 | 2    2      3 4     5 2
+--R     4a x \|x  - a   - 4a x  + 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.216~~~~~$\displaystyle\int{\sqrt{x^2-a^2}}~dx$}
+$$\int{\sqrt{x^2-a^2}}=
+\frac{x\sqrt{x^2-a^2}}{2}-\frac{a^2}{2}\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 8 of 28
+aa:=integrate(sqrt(x^2-a^2),x)
+--R 
+--R
+--R   (1)
+--R             +-------+                   +-------+
+--R          2  | 2    2      2 2    4      | 2    2
+--R       (2a x\|x  - a   - 2a x  + a )log(\|x  - a   - x)
+--R     + 
+--R                     +-------+
+--R            3    2   | 2    2      4     2 2
+--R       (- 2x  + a x)\|x  - a   + 2x  - 2a x
+--R  /
+--R        +-------+
+--R        | 2    2      2     2
+--R     4x\|x  - a   - 4x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.217~~~~~$\displaystyle\int{x\sqrt{x^2-a^2}}~dx$}
+$$\int{x\sqrt{x^2-a^2}}=
+\frac{(x^2-a^2)^{3/2}}{3}
+$$
+<<*>>=
+)clear all
+
+--S 9 of 28
+aa:=integrate(x*sqrt(x^2-a^2),x)
+--R 
+--R
+--R                               +-------+
+--R             5     2 3     4   | 2    2      6     2 4     4 2    6
+--R        (- 4x  + 7a x  - 3a x)\|x  - a   + 4x  - 9a x  + 6a x  - a
+--R   (1)  -----------------------------------------------------------
+--R                                 +-------+
+--R                        2     2  | 2    2       3     2
+--R                    (12x  - 3a )\|x  - a   - 12x  + 9a x
+--R                                          Type: Union(Expression Integer,...)
+--E
+@
+
+\section{\cite{1}:14.218~~~~~$\displaystyle
+\int{x^2\sqrt{x^2-a^2}}~dx$}
+$$\int{x^2\sqrt{x^2-a^2}}=
+\frac{x(x^2-a^2)^{3/2}}{4}+\frac{a^2x\sqrt{x^2-a^2}}{8}-
+\frac{a^4}{8}\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 10 of 28
+aa:=integrate(x^2*sqrt(x^2-a^2),x)
+--R 
+--R
+--R   (1)
+--R                       +-------+                           +-------+
+--R           4 3     6   | 2    2      4 4     6 2    8      | 2    2
+--R       ((8a x  - 4a x)\|x  - a   - 8a x  + 8a x  - a )log(\|x  - a   - x)
+--R     + 
+--R                                      +-------+
+--R           7      2 5      4 3    6   | 2    2       8      2 6      4 4     6 2
+--R     (- 16x  + 24a x  - 10a x  + a x)\|x  - a   + 16x  - 32a x  + 20a x  - 4a x
+--R  /
+--R                    +-------+
+--R         3      2   | 2    2       4      2 2     4
+--R     (64x  - 32a x)\|x  - a   - 64x  + 64a x  - 8a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.219~~~~~$\displaystyle
+\int{x^3\sqrt{x^2-a^2}}~dx$}
+$$\int{x^3\sqrt{x^2-a^2}}=
+\frac{(x^2-a^2)^{5/2}}{5}+\frac{a^2(x^2-a^2)^{3/2}}{3}
+$$
+<<*>>=
+)clear all
+
+--S 11 of 28
+aa:=integrate(x^3*sqrt(x^2-a^2),x)
+--R 
+--R
+--R   (1)
+--R                                                  +-------+
+--R             9      2 7     4 5      6 3      8   | 2    2       10       2 8
+--R       (- 48x  + 76a x  - 3a x  - 35a x  + 10a x)\|x  - a   + 48x   - 100a x
+--R     + 
+--R          4 6      6 4      8 2     10
+--R       35a x  + 40a x  - 25a x  + 2a
+--R  /
+--R                              +-------+
+--R          4       2 2      4  | 2    2        5       2 3      4
+--R     (240x  - 180a x  + 15a )\|x  - a   - 240x  + 300a x  - 75a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.220~~~~~$\displaystyle
+\int{\frac{\sqrt{x^2-a^2}}{x}}~dx$}
+$$\int{\frac{\sqrt{x^2-a^2}}{x}}=
+\sqrt{x^2-a^2}-a\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 12 of 28
+aa:=integrate(sqrt(x^2-a^2)/x,x)
+--R 
+--R
+--R                                     +-------+
+--R              +-------+              | 2    2           +-------+
+--R              | 2    2              \|x  - a   - x      | 2    2     2    2
+--R        (- 2a\|x  - a   + 2a x)atan(--------------) - x\|x  - a   + x  - a
+--R                                           a
+--R   (1)  -------------------------------------------------------------------
+--R                                    +-------+
+--R                                    | 2    2
+--R                                   \|x  - a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.221~~~~~$\displaystyle
+\int{\frac{\sqrt{x^2-a^2}}{x^2}}~dx$}
+$$\int{\frac{\sqrt{x^2-a^2}}{x^2}}=
+-\frac{\sqrt{x^2-a^2}}{x}+\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 13 of 28
+aa:=integrate(sqrt(x^2-a^2)/x^2,x)
+--R 
+--R
+--R             +-------+           +-------+
+--R             | 2    2     2      | 2    2          2
+--R        (- x\|x  - a   + x )log(\|x  - a   - x) + a
+--R   (1)  --------------------------------------------
+--R                        +-------+
+--R                        | 2    2     2
+--R                      x\|x  - a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.222~~~~~$\displaystyle
+\int{\frac{\sqrt{x^2-a^2}}{x^3}}~dx$}
+$$\int{\frac{\sqrt{x^2-a^2}}{x^3}}=
+-\frac{\sqrt{x^2-a^2}}{2x^2}+\frac{1}{2a}
+\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 14 of 28
+aa:=integrate(sqrt(x^2-a^2)/x^3,x)
+--R 
+--R
+--R   (1)
+--R                                          +-------+
+--R            +-------+                     | 2    2
+--R          3 | 2    2      4     2 2      \|x  - a   - x
+--R       (4x \|x  - a   - 4x  + 2a x )atan(--------------)
+--R                                                a
+--R     + 
+--R                    +-------+
+--R            2    3  | 2    2        3     3
+--R       (2a x  - a )\|x  - a   - 2a x  + 2a x
+--R  /
+--R           +-------+
+--R         3 | 2    2        4     3 2
+--R     4a x \|x  - a   - 4a x  + 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.223~~~~~$\displaystyle\int{\frac{dx}{(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{1}{(x^2-a^2)^{3/2}}}=
+-\frac{x}{a^2\sqrt{x^2-a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 15 of 28
+aa:=integrate(1/(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R                    1
+--R   (1)  - ---------------------
+--R            +-------+
+--R            | 2    2     2    2
+--R          x\|x  - a   - x  + a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.224~~~~~$\displaystyle
+\int{\frac{x~dx}{(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{x}{(x^2-a^2)^{3/2}}}=
+\frac{-1}{\sqrt{x^2-a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 16 of 28
+aa:=integrate(x/(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R             +-------+
+--R             | 2    2
+--R            \|x  - a   - x
+--R   (1)  ---------------------
+--R          +-------+
+--R          | 2    2     2    2
+--R        x\|x  - a   - x  + a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.225~~~~~$\displaystyle
+\int{\frac{x^2dx}{(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{x^2}{(x^2-a^2)^{3/2}}}=
+\frac{-x}{\sqrt{x^2-a^2}}+\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 17 of 28
+aa:=integrate(x^2/(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R             +-------+                +-------+
+--R             | 2    2     2    2      | 2    2          2
+--R        (- x\|x  - a   + x  - a )log(\|x  - a   - x) - a
+--R   (1)  -------------------------------------------------
+--R                        +-------+
+--R                        | 2    2     2    2
+--R                      x\|x  - a   - x  + a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.226~~~~~$\displaystyle
+\int{\frac{x^3dx}{(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{x^3}{(x^2-a^2)^{3/2}}}=
+\sqrt{x^2-a^2}-\frac{a^2}{\sqrt{x^2-a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 18 of 28
+aa:=integrate(x^3/(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R                       +-------+
+--R             3     2   | 2    2      4     2 2     4
+--R        (- 2x  + 4a x)\|x  - a   + 2x  - 5a x  + 2a
+--R   (1)  --------------------------------------------
+--R                         +-------+
+--R                 2    2  | 2    2      3     2
+--R              (2x  - a )\|x  - a   - 2x  + 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.227~~~~~$\displaystyle
+\int{\frac{dx}{x(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{1}{x(x^2-a^2)^{3/2}}}=
+\frac{-1}{a^2\sqrt{x^2-a^2}}-
+\frac{1}{a^3}\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 19 of 28
+aa:=integrate(1/(x*(x^2-a^2)^(3/2)),x)
+--R 
+--R
+--R                                          +-------+
+--R              +-------+                   | 2    2           +-------+
+--R              | 2    2      2     2      \|x  - a   - x      | 2    2
+--R        (- 2x\|x  - a   + 2x  - 2a )atan(--------------) + a\|x  - a   - a x
+--R                                                a
+--R   (1)  --------------------------------------------------------------------
+--R                                  +-------+
+--R                               3  | 2    2     3 2    5
+--R                              a x\|x  - a   - a x  + a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.228~~~~~$\displaystyle
+\int{\frac{dx}{x^2(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{1}{x^2(x^2-a^2)^{3/2}}}=
+-\frac{\sqrt{x^2-a^2}}{a^4x}-\frac{x}{a^4\sqrt{x^2-a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 20 of 28
+aa:=integrate(1/(x^2*(x^2-a^2)^(3/2)),x)
+--R 
+--R
+--R                           1
+--R   (1)  - -----------------------------------
+--R                      +-------+
+--R             3    2   | 2    2      4     2 2
+--R          (2x  - a x)\|x  - a   - 2x  + 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.229~~~~~$\displaystyle
+\int{\frac{dx}{x^3(x^2-a^2)^{3/2}}}$}
+$$\int{\frac{1}{x^3(x^2-a^2)^{3/2}}}=
+\frac{1}{2a^2x^2\sqrt{x^2-a^2}}-
+\frac{3}{2a^4\sqrt{x^2-a^2}}-
+\frac{3}{2a^5}\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 21 of 28
+aa:=integrate(1/(x^3*(x^2-a^2)^(3/2)),x)
+--R 
+--R
+--R   (1)
+--R                                                                  +-------+
+--R                          +-------+                               | 2    2
+--R              5      2 3  | 2    2       6      2 4     4 2      \|x  - a   - x
+--R       ((- 24x  + 18a x )\|x  - a   + 24x  - 30a x  + 6a x )atan(--------------)
+--R                                                                        a
+--R     + 
+--R                             +-------+
+--R             4     3 2    5  | 2    2         5      3 3     5
+--R       (12a x  - 7a x  + a )\|x  - a   - 12a x  + 13a x  - 3a x
+--R  /
+--R                     +-------+
+--R        5 5     7 3  | 2    2      5 6      7 4     9 2
+--R     (8a x  - 6a x )\|x  - a   - 8a x  + 10a x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.230~~~~~$\displaystyle\int{(x^2-a^2)^{3/2}}~dx$}
+$$\int{(x^2-a^2)^{3/2}}=
+\frac{x(x^2-a^2)^{3/2}}{4}-\frac{3a^2x\sqrt{x^2-a^2}}{8}+
+\frac{3}{8}a^4\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 22 of 28
+aa:=integrate((x^2-a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                           +-------+                              +-------+
+--R              4 3      6   | 2    2       4 4      6 2     8      | 2    2
+--R       ((- 24a x  + 12a x)\|x  - a   + 24a x  - 24a x  + 3a )log(\|x  - a   - x)
+--R     + 
+--R                                         +-------+
+--R             7      2 5      4 3     6   | 2    2       8      2 6      4 4
+--R       (- 16x  + 56a x  - 42a x  + 5a x)\|x  - a   + 16x  - 64a x  + 68a x
+--R     + 
+--R            6 2
+--R       - 20a x
+--R  /
+--R                    +-------+
+--R         3      2   | 2    2       4      2 2     4
+--R     (64x  - 32a x)\|x  - a   - 64x  + 64a x  - 8a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.231~~~~~$\displaystyle\int{x(x^2-a^2)^{3/2}}~dx$}
+$$\int{x(x^2-a^2)^{3/2}}=\frac{(x^2-a^2)^{5/2}}{5}$$
+<<*>>=
+)clear all
+
+--S 23 of 28
+aa:=integrate(x*(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                                  +-------+
+--R             9      2 7      4 5      6 3     8   | 2    2       10      2 8
+--R       (- 16x  + 52a x  - 61a x  + 30a x  - 5a x)\|x  - a   + 16x   - 60a x
+--R     + 
+--R          4 6      6 4      8 2    10
+--R       85a x  - 55a x  + 15a x  - a
+--R  /
+--R                           +-------+
+--R         4      2 2     4  | 2    2       5       2 3      4
+--R     (80x  - 60a x  + 5a )\|x  - a   - 80x  + 100a x  - 25a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.232~~~~~$\displaystyle\int{x^2(x^2-a^2)^{3/2}}~dx$}
+$$\int{x^2(x^2-a^2)^{3/2}}=
+\frac{x(x^2-a^2)^{5/2}}{6}+\frac{a^2x(x^2-a^2)^{3/2}}{24}-
+\frac{a^4x\sqrt{x^2-a^2}}{16}+
+\frac{a^6}{16}\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 24 of 28
+aa:=integrate(x^2*(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                        +-------+
+--R                 6 5      8 3      10   | 2    2       6 6       8 4      10 2
+--R           (- 96a x  + 96a x  - 18a  x)\|x  - a   + 96a x  - 144a x  + 54a  x
+--R         + 
+--R               12
+--R           - 3a
+--R      *
+--R              +-------+
+--R              | 2    2
+--R         log(\|x  - a   - x)
+--R     + 
+--R                                                                 +-------+
+--R              11       2 9       4 7       6 5      8 3     10   | 2    2
+--R       (- 256x   + 832a x  - 912a x  + 404a x  - 68a x  + 3a  x)\|x  - a
+--R     + 
+--R           12       2 10        4 8       6 6       8 4      10 2
+--R       256x   - 960a x   + 1296a x  - 772a x  + 198a x  - 18a  x
+--R  /
+--R                                  +-------+
+--R           5        2 3       4   | 2    2         6        2 4       4 2      6
+--R     (1536x  - 1536a x  + 288a x)\|x  - a   - 1536x  + 2304a x  - 864a x  + 48a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.233~~~~~$\displaystyle\int{x^3(x^2-a^2)^{3/2}}~dx$}
+$$\int{x^3(x^2-a^2)^{3/2}}=
+\frac{(x^2-a^2)^{7/2}}{7}+\frac{a^2(x^2-a^2)^{5/2}}{5}
+$$
+<<*>>=
+)clear all
+
+--S 25 of 28
+aa:=integrate(x^3*(x^2-a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                   13        2 11        4 9       6 7       8 5       10 3
+--R             - 320x   + 1072a x   - 1240a x  + 467a x  + 112a x  - 105a  x
+--R           + 
+--R                12
+--R             14a  x
+--R      *
+--R          +-------+
+--R          | 2    2
+--R         \|x  - a
+--R     + 
+--R           14        2 12        4 10       6 8      8 6       10 4      12 2
+--R       320x   - 1232a x   + 1736a x   - 973a x  + 21a x  + 175a  x  - 49a  x
+--R     + 
+--R         14
+--R       2a
+--R  /
+--R                                            +-------+
+--R             6        2 4       4 2      6  | 2    2         7        2 5
+--R       (2240x  - 2800a x  + 840a x  - 35a )\|x  - a   - 2240x  + 3920a x
+--R     + 
+--R              4 3       6
+--R       - 1960a x  + 245a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.234~~~~~$\displaystyle
+\int{\frac{(x^2-a^2)^{3/2}}{x}}~dx$}
+$$\int{\frac{(x^2-a^2)^{3/2}}{x}}=
+\frac{(x^2-a^2)^{3/2}}{3}-a^2\sqrt{x^2-a^2}+
+a^3\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 26 of 28
+aa:=integrate((x^2-a^2)^(3/2)/x,x)
+--R 
+--R
+--R   (1)
+--R                                                        +-------+
+--R                       +-------+                        | 2    2
+--R            3 2     5  | 2    2       3 3      5       \|x  - a   - x
+--R       ((24a x  - 6a )\|x  - a   - 24a x  + 18a x)atan(--------------)
+--R                                                              a
+--R     + 
+--R                                +-------+
+--R            5      2 3      4   | 2    2      6      2 4      4 2     6
+--R       (- 4x  + 19a x  - 12a x)\|x  - a   + 4x  - 21a x  + 21a x  - 4a
+--R  /
+--R                  +-------+
+--R         2     2  | 2    2       3     2
+--R     (12x  - 3a )\|x  - a   - 12x  + 9a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.235~~~~~$\displaystyle
+\int{\frac{(x^2-a^2)^{3/2}}{x^2}}~dx$}
+$$\int{\frac{(x^2-a^2)^{3/2}}{x^2}}=
+-\frac{(x^2-a^2)^{3/2}}{x}+\frac{3x\sqrt{x^2-a^2}}{2}-
+\frac{3}{2}a^2\ln\left(x+\sqrt{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 27 of 28
+aa:=integrate((x^2-a^2)^{3/2}/x^2,x)
+--R 
+--R
+--R   (1)
+--R                        +-------+                       +-------+
+--R            2 3     4   | 2    2       2 4     4 2      | 2    2
+--R       ((12a x  - 3a x)\|x  - a   - 12a x  + 9a x )log(\|x  - a   - x)
+--R     + 
+--R                              +-------+
+--R            5     2 3     4   | 2    2      6     2 4     4 2     6
+--R       (- 4x  + 3a x  + 4a x)\|x  - a   + 4x  - 5a x  - 3a x  + 2a
+--R  /
+--R                  +-------+
+--R        3     2   | 2    2      4     2 2
+--R     (8x  - 2a x)\|x  - a   - 8x  + 6a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.236~~~~~$\displaystyle
+\int{\frac{(x^2-a^2)^{3/2}}{x^3}}~dx$}
+$$\int{\frac{(x^2-a^2)^{3/2}}{x^3}}=
+-\frac{(x^2-a^2)^{3/2}}{2x^2}+\frac{3}{2}\sqrt{x^2-a^2}-
+\frac{3}{2}a\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 28 of 28
+aa:=integrate((x^2-a^2)^(3/2)/x^3,x)
+--R 
+--R
+--R   (1)
+--R                                                             +-------+
+--R                           +-------+                         | 2    2
+--R                4     3 2  | 2    2         5      3 3      \|x  - a   - x
+--R       ((- 24a x  + 6a x )\|x  - a   + 24a x  - 18a x )atan(--------------)
+--R                                                                   a
+--R     + 
+--R                              +-------+
+--R            5     2 3     4   | 2    2      6     2 4     4 2    6
+--R       (- 8x  + 2a x  + 3a x)\|x  - a   + 8x  - 6a x  - 3a x  + a
+--R  /
+--R                   +-------+
+--R        4     2 2  | 2    2      5     2 3
+--R     (8x  - 2a x )\|x  - a   - 8x  + 6a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 pp68-69
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum11.input.pamphlet b/src/input/schaum11.input.pamphlet
new file mode 100644
index 0000000..6cd59a6
--- /dev/null
+++ b/src/input/schaum11.input.pamphlet
@@ -0,0 +1,783 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum11.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.237~~~~~$\displaystyle\int{\frac{dx}{\sqrt{a^2-x^2}}}$}
+$$\int{\frac{1}{\sqrt{a^2-x^2}}}=\ln\left(x+\sqrt{a^2-x^2}\right)$$
+<<*>>=
+)spool schaum11.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 28
+aa:=integrate(1/(sqrt(a^2-x^2)),x)
+--R 
+--R
+--R                 +---------+
+--R                 |   2    2
+--R                \|- x  + a   - a
+--R   (1)  - 2atan(----------------)
+--R                        x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.238~~~~~$\displaystyle\int{\frac{x~dx}{\sqrt{a^2-x^2}}}$}
+$$\int{\frac{x}{\sqrt{a^2-x^2}}}=\sqrt{a^2-x^2}$$
+<<*>>=
+)clear all
+
+--S 2 of 28
+aa:=integrate(x/(sqrt(a^2-x^2)),x)
+--R 
+--R
+--R                2
+--R               x
+--R   (1)  ----------------
+--R         +---------+
+--R         |   2    2
+--R        \|- x  + a   - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.239~~~~~$\displaystyle
+\int{\frac{x^2~dx}{\sqrt{a^2-x^2}}}$}
+$$\int{\frac{x^2}{\sqrt{a^2-x^2}}}=
+\frac{x\sqrt{a^2-x^2}}{2}+\frac{a^2}{2}\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 3 of 28
+aa:=integrate(x^2/sqrt(a^2-x^2),x)
+--R 
+--R
+--R   (1)
+--R                                              +---------+
+--R              +---------+                     |   2    2
+--R            3 |   2    2      2 2     4      \|- x  + a   - a
+--R       (- 4a \|- x  + a   - 2a x  + 4a )atan(----------------)
+--R                                                     x
+--R     + 
+--R                     +---------+
+--R           3     2   |   2    2        3     3
+--R       (- x  + 2a x)\|- x  + a   + 2a x  - 2a x
+--R  /
+--R        +---------+
+--R        |   2    2      2     2
+--R     4a\|- x  + a   + 2x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.240~~~~~$\displaystyle
+\int{\frac{x^3~dx}{\sqrt{a^2-x^2}}}$}
+$$\int{\frac{x^3}{\sqrt{a^2-x^2}}}=
+\frac{(a^2-x^2)^{3/2}}{3}+a^2\sqrt{a^2-x^2}
+$$
+<<*>>=
+)clear all
+
+--S 4 of 28
+aa:=integrate(x^3/sqrt(a^2-x^2),x)
+--R 
+--R
+--R                   +---------+
+--R                 4 |   2    2     6     2 4
+--R             3a x \|- x  + a   + x  - 3a x
+--R   (1)  ---------------------------------------
+--R                     +---------+
+--R           2      2  |   2    2        2      3
+--R        (3x  - 12a )\|- x  + a   - 9a x  + 12a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.241~~~~~$\displaystyle\int{\frac{dx}{x\sqrt{a^2-x^2}}}$}
+$$\int{\frac{1}{x\sqrt{a^2-x^2}}}=
+\frac{1}{a}\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 5 of 28
+aa:=integrate(1/(x*sqrt(a^2-x^2)),x)
+--R 
+--R
+--R             +---------+
+--R             |   2    2
+--R            \|- x  + a   - a
+--R        log(----------------)
+--R                    x
+--R   (1)  ---------------------
+--R                  a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.242~~~~~$\displaystyle
+\int{\frac{dx}{x^2\sqrt{a^2-x^2}}}$}
+$$\int{\frac{1}{x^2\sqrt{a^2-x^2}}}=
+\frac{\sqrt{a^2-x^2}}{a^2x}
+$$
+<<*>>=
+)clear all
+
+--S 6 of 28
+aa:=integrate(1/(x^2*sqrt(a^2-x^2)),x)
+--R 
+--R
+--R          +---------+
+--R          |   2    2     2    2
+--R        a\|- x  + a   + x  - a
+--R   (1)  -----------------------
+--R             +---------+
+--R          2  |   2    2     3
+--R         a x\|- x  + a   - a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.243~~~~~$\displaystyle\int{\frac{dx}{x^3\sqrt{a^2-x^2}}}$}
+$$\int{\frac{1}{x^3\sqrt{a^2-x^2}}}=
+-\frac{\sqrt{a^2-x^2}}{2a^2x^2}+\frac{1}{2a^3}
+\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 7 of 28
+aa:=integrate(1/(x^3*sqrt(a^2-x^2)),x)
+--R 
+--R
+--R   (1)
+--R                                            +---------+
+--R              +---------+                   |   2    2
+--R            2 |   2    2     4     2 2     \|- x  + a   - a
+--R       (2a x \|- x  + a   + x  - 2a x )log(----------------)
+--R                                                   x
+--R     + 
+--R                      +---------+
+--R             2     3  |   2    2      2 2     4
+--R       (- a x  + 2a )\|- x  + a   + 2a x  - 2a
+--R  /
+--R           +---------+
+--R       4 2 |   2    2      3 4     5 2
+--R     4a x \|- x  + a   + 2a x  - 4a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.244~~~~~$\displaystyle\int{\sqrt{a^2-x^2}}~dx$}
+$$\int{\sqrt{a^2-x^2}}=
+\frac{x\sqrt{a^2-x^2}}{2}-\frac{a^2}{2}\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 8 of 28
+aa:=integrate(sqrt(a^2-x^2),x)
+--R 
+--R
+--R   (1)
+--R                                              +---------+
+--R              +---------+                     |   2    2
+--R            3 |   2    2      2 2     4      \|- x  + a   - a
+--R       (- 4a \|- x  + a   - 2a x  + 4a )atan(----------------)
+--R                                                     x
+--R     + 
+--R                   +---------+
+--R         3     2   |   2    2        3     3
+--R       (x  - 2a x)\|- x  + a   - 2a x  + 2a x
+--R  /
+--R        +---------+
+--R        |   2    2      2     2
+--R     4a\|- x  + a   + 2x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.245~~~~~$\displaystyle\int{x\sqrt{a^2-x^2}}~dx$}
+$$\int{x\sqrt{a^2-x^2}}=
+\frac{(a^2-x^2)^{3/2}}{3}
+$$
+<<*>>=
+)clear all
+
+--S 9 of 28
+aa:=integrate(x*sqrt(a^2-x^2),x)
+--R 
+--R
+--R                          +---------+
+--R               4     3 2  |   2    2     6     2 4     4 2
+--R        (- 3a x  + 6a x )\|- x  + a   - x  + 6a x  - 6a x
+--R   (1)  --------------------------------------------------
+--R                           +---------+
+--R                 2      2  |   2    2        2      3
+--R              (3x  - 12a )\|- x  + a   - 9a x  + 12a
+--R                                          Type: Union(Expression Integer,...)
+--E
+@
+
+\section{\cite{1}:14.246~~~~~$\displaystyle
+\int{x^2\sqrt{a^2-x^2}}~dx$}
+$$\int{x^2\sqrt{a^2-x^2}}=
+\frac{x(a^2-x^2)^{3/2}}{4}+\frac{a^2x\sqrt{a^2-x^2}}{8}-
+\frac{a^4}{8}\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 10 of 28
+aa:=integrate(x^2*sqrt(a^2-x^2),x)
+--R 
+--R
+--R   (1)
+--R                           +---------+
+--R               5 2      7  |   2    2      4 4      6 2      8
+--R         ((- 8a x  + 16a )\|- x  + a   - 2a x  + 16a x  - 16a )
+--R      *
+--R               +---------+
+--R               |   2    2
+--R              \|- x  + a   - a
+--R         atan(----------------)
+--R                      x
+--R     + 
+--R                                    +---------+
+--R        7      2 5      4 3     6   |   2    2        7      3 5      5 3     7
+--R     (2x  - 17a x  + 24a x  - 8a x)\|- x  + a   - 8a x  + 28a x  - 28a x  + 8a x
+--R  /
+--R                     +---------+
+--R           2      3  |   2    2      4      2 2      4
+--R     (32a x  - 64a )\|- x  + a   + 8x  - 64a x  + 64a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.247~~~~~$\displaystyle
+\int{x^3\sqrt{a^2-x^2}}~dx$}
+$$\int{x^3\sqrt{a^2-x^2}}=
+\frac{(a^2-x^2)^{5/2}}{5}+\frac{a^2(a^2-x^2)^{3/2}}{3}
+$$
+<<*>>=
+)clear all
+
+--S 11 of 28
+aa:=integrate(x^3*sqrt(a^2-x^2),x)
+--R 
+--R
+--R   (1)
+--R                                +---------+
+--R           8      3 6      5 4  |   2    2      10      2 8      4 6      6 4
+--R   (- 15a x  + 65a x  - 60a x )\|- x  + a   - 3x   + 40a x  - 95a x  + 60a x
+--R   --------------------------------------------------------------------------
+--R                                  +---------+
+--R             4       2 2       4  |   2    2         4       3 2       5
+--R         (15x  - 180a x  + 240a )\|- x  + a   - 75a x  + 300a x  - 240a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.248~~~~~$\displaystyle
+\int{\frac{\sqrt{a^2-x^2}}{x}}~dx$}
+$$\int{\frac{\sqrt{a^2-x^2}}{x}}=
+\sqrt{a^2-x^2}-a\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 12 of 28
+aa:=integrate(sqrt(a^2-x^2)/x,x)
+--R 
+--R
+--R                                 +---------+
+--R           +---------+           |   2    2
+--R           |   2    2     2     \|- x  + a   - a     2
+--R        (a\|- x  + a   - a )log(----------------) - x
+--R                                        x
+--R   (1)  ----------------------------------------------
+--R                        +---------+
+--R                        |   2    2
+--R                       \|- x  + a   - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.249~~~~~$\displaystyle
+\int{\frac{\sqrt{a^2-x^2}}{x^2}}~dx$}
+$$\int{\frac{\sqrt{a^2-x^2}}{x^2}}=
+-\frac{\sqrt{a^2-x^2}}{x}+\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 13 of 28
+aa:=integrate(sqrt(a^2-x^2)/x^2,x)
+--R 
+--R
+--R   (1)
+--R                                +---------+
+--R       +---------+              |   2    2           +---------+
+--R       |   2    2              \|- x  + a   - a      |   2    2     2    2
+--R   (2x\|- x  + a   - 2a x)atan(----------------) + a\|- x  + a   + x  - a
+--R                                       x
+--R   -----------------------------------------------------------------------
+--R                               +---------+
+--R                               |   2    2
+--R                             x\|- x  + a   - a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.250~~~~~$\displaystyle
+\int{\frac{\sqrt{a^2-x^2}}{x^3}}~dx$}
+$$\int{\frac{\sqrt{a^2-x^2}}{x^3}}=
+-\frac{\sqrt{a^2-x^2}}{2x^2}+\frac{1}{2a}
+\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 14 of 28
+aa:=integrate(sqrt(a^2-x^2)/x^3,x)
+--R 
+--R
+--R   (1)
+--R                                              +---------+
+--R                +---------+                   |   2    2
+--R              2 |   2    2     4     2 2     \|- x  + a   - a
+--R       (- 2a x \|- x  + a   - x  + 2a x )log(----------------)
+--R                                                     x
+--R     + 
+--R                      +---------+
+--R             2     3  |   2    2      2 2     4
+--R       (- a x  + 2a )\|- x  + a   + 2a x  - 2a
+--R  /
+--R           +---------+
+--R       2 2 |   2    2        4     3 2
+--R     4a x \|- x  + a   + 2a x  - 4a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.251~~~~~$\displaystyle\int{\frac{dx}{(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{1}{(a^2-x^2)^{3/2}}}=
+-\frac{x}{a^2\sqrt{a^2-x^2}}
+$$
+<<*>>=
+)clear all
+
+--S 15 of 28
+aa:=integrate(1/(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R               +---------+
+--R               |   2    2
+--R           - x\|- x  + a   + a x
+--R   (1)  --------------------------
+--R           +---------+
+--R         3 |   2    2     2 2    4
+--R        a \|- x  + a   + a x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.252~~~~~$\displaystyle
+\int{\frac{x~dx}{(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{x}{(a^2-x^2)^{3/2}}}=
+\frac{-1}{\sqrt{a^2-x^2}}
+$$
+<<*>>=
+)clear all
+
+--S 16 of 28
+aa:=integrate(x/(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R                     2
+--R                    x
+--R   (1)  --------------------------
+--R           +---------+
+--R         2 |   2    2       2    3
+--R        a \|- x  + a   + a x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.253~~~~~$\displaystyle
+\int{\frac{x^2dx}{(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{x^2}{(a^2-x^2)^{3/2}}}=
+\frac{-x}{\sqrt{a^2-x^2}}+\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 17 of 28
+aa:=integrate(x^2/(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                     +---------+
+--R       +---------+                   |   2    2           +---------+
+--R       |   2    2      2     2      \|- x  + a   - a      |   2    2
+--R   (2a\|- x  + a   + 2x  - 2a )atan(----------------) - x\|- x  + a   + a x
+--R                                            x
+--R   ------------------------------------------------------------------------
+--R                              +---------+
+--R                              |   2    2     2    2
+--R                            a\|- x  + a   + x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.254~~~~~$\displaystyle
+\int{\frac{x^3dx}{(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{x^3}{(a^2-x^2)^{3/2}}}=
+\sqrt{a^2-x^2}-\frac{a^2}{\sqrt{a^2-x^2}}
+$$
+<<*>>=
+)clear all
+
+--S 18 of 28
+aa:=integrate(x^3/(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R                            4
+--R                           x
+--R   (1)  - ------------------------------------
+--R                     +---------+
+--R            2     2  |   2    2        2     3
+--R          (x  - 2a )\|- x  + a   - 2a x  + 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.255~~~~~$\displaystyle
+\int{\frac{dx}{x(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{1}{x(a^2-x^2)^{3/2}}}=
+\frac{-1}{a^2\sqrt{a^2-x^2}}-
+\frac{1}{a^3}\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 19 of 28
+aa:=integrate(1/(x*(a^2-x^2)^(3/2)),x)
+--R 
+--R
+--R                                      +---------+
+--R           +---------+                |   2    2
+--R           |   2    2     2    2     \|- x  + a   - a     2
+--R        (a\|- x  + a   + x  - a )log(----------------) + x
+--R                                             x
+--R   (1)  ---------------------------------------------------
+--R                        +---------+
+--R                      4 |   2    2     3 2    5
+--R                     a \|- x  + a   + a x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.256~~~~~$\displaystyle
+\int{\frac{dx}{x^2(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{1}{x^2(a^2-x^2)^{3/2}}}=
+-\frac{\sqrt{a^2-x^2}}{a^4x}-\frac{x}{a^4\sqrt{a^2-x^2}}
+$$
+<<*>>=
+)clear all
+
+--S 20 of 28
+aa:=integrate(1/(x^2*(a^2-x^2)^(3/2)),x)
+--R 
+--R
+--R                      +---------+
+--R             2     3  |   2    2      4     2 2     4
+--R        (4a x  - 2a )\|- x  + a   + 2x  - 5a x  + 2a
+--R   (1)  ---------------------------------------------
+--R                         +---------+
+--R             4 3     6   |   2    2      5 3     7
+--R           (a x  - 2a x)\|- x  + a   - 2a x  + 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.257~~~~~$\displaystyle
+\int{\frac{dx}{x^3(a^2-x^2)^{3/2}}}$}
+$$\int{\frac{1}{x^3(a^2-x^2)^{3/2}}}=
+\frac{1}{2a^2x^2\sqrt{a^2-x^2}}-
+\frac{3}{2a^4\sqrt{a^2-x^2}}-
+\frac{3}{2a^5}\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 21 of 28
+aa:=integrate(1/(x^3*(a^2-x^2)^(3/2)),x)
+--R 
+--R
+--R   (1)
+--R                           +---------+
+--R               4      3 2  |   2    2      6      2 4      4 2
+--R         ((9a x  - 12a x )\|- x  + a   + 3x  - 15a x  + 12a x )
+--R      *
+--R              +---------+
+--R              |   2    2
+--R             \|- x  + a   - a
+--R         log(----------------)
+--R                     x
+--R     + 
+--R                             +---------+
+--R            4     3 2     5  |   2    2      6    2 4     4 2     6
+--R       (3a x  + 5a x  - 4a )\|- x  + a   + 2x  - a x  - 7a x  + 4a
+--R  /
+--R                     +---------+
+--R        6 4     8 2  |   2    2      5 6      7 4     9 2
+--R     (6a x  - 8a x )\|- x  + a   + 2a x  - 10a x  + 8a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.258~~~~~$\displaystyle\int{(a^2-x^2)^{3/2}}~dx$}
+$$\int{(a^2-x^2)^{3/2}}=
+\frac{x(a^2-x^2)^{3/2}}{4}-\frac{3a^2x\sqrt{a^2-x^2}}{8}+
+\frac{3}{8}a^4\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 22 of 28
+aa:=integrate((a^2-x^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                            +---------+
+--R                5 2      7  |   2    2      4 4      6 2      8
+--R         ((- 24a x  + 48a )\|- x  + a   - 6a x  + 48a x  - 48a )
+--R      *
+--R               +---------+
+--R               |   2    2
+--R              \|- x  + a   - a
+--R         atan(----------------)
+--R                      x
+--R     + 
+--R                                         +---------+
+--R            7      2 5      4 3      6   |   2    2        7      3 5      5 3
+--R       (- 2x  + 21a x  - 56a x  + 40a x)\|- x  + a   + 8a x  - 44a x  + 76a x
+--R     + 
+--R            7
+--R       - 40a x
+--R  /
+--R                     +---------+
+--R           2      3  |   2    2      4      2 2      4
+--R     (32a x  - 64a )\|- x  + a   + 8x  - 64a x  + 64a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.259~~~~~$\displaystyle\int{x(a^2-x^2)^{3/2}}~dx$}
+$$\int{x(a^2-x^2)^{3/2}}=\frac{(a^2-x^2)^{5/2}}{5}$$
+<<*>>=
+)clear all
+
+--S 23 of 28
+aa:=integrate(x*(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                          +---------+
+--R            8      3 6      5 4      7 2  |   2    2     10      2 8      4 6
+--R       (5a x  - 30a x  + 60a x  - 40a x )\|- x  + a   + x   - 15a x  + 55a x
+--R     + 
+--R            6 4      8 2
+--R       - 80a x  + 40a x
+--R  /
+--R                           +---------+
+--R        4      2 2      4  |   2    2         4       3 2      5
+--R     (5x  - 60a x  + 80a )\|- x  + a   - 25a x  + 100a x  - 80a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.260~~~~~$\displaystyle\int{x^2(a^2-x^2)^{3/2}}~dx$}
+$$\int{x^2(a^2-x^2)^{3/2}}=
+\frac{x(a^2-x^2)^{5/2}}{6}+\frac{a^2x(a^2-x^2)^{3/2}}{24}-
+\frac{a^4x\sqrt{a^2-x^2}}{16}+
+\frac{a^6}{16}\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 24 of 28
+aa:=integrate(x^2*(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                         +---------+
+--R                 7 4       9 2       11  |   2    2      6 6       8 4
+--R           (- 36a x  + 192a x  - 192a  )\|- x  + a   - 6a x  + 108a x
+--R         + 
+--R                 10 2       12
+--R           - 288a  x  + 192a
+--R      *
+--R               +---------+
+--R               |   2    2
+--R              \|- x  + a   - a
+--R         atan(----------------)
+--R                      x
+--R     + 
+--R                                                                 +---------+
+--R            11       2 9       4 7       6 5       8 3      10   |   2    2
+--R       (- 8x   + 158a x  - 639a x  + 982a x  - 592a x  + 96a  x)\|- x  + a
+--R     + 
+--R            11       3 9        5 7        7 5       9 3      11
+--R       48a x   - 388a x  + 1062a x  - 1266a x  + 640a x  - 96a  x
+--R  /
+--R                                     +---------+
+--R              4        3 2        5  |   2    2       6       2 4        4 2
+--R       (288a x  - 1536a x  + 1536a )\|- x  + a   + 48x  - 864a x  + 2304a x
+--R     + 
+--R              6
+--R       - 1536a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.261~~~~~$\displaystyle\int{x^3(a^2-x^2)^{3/2}}~dx$}
+$$\int{x^3(a^2-x^2)^{3/2}}=
+\frac{(a^2-x^2)^{7/2}}{7}+\frac{a^2(a^2-x^2)^{5/2}}{5}
+$$
+<<*>>=
+)clear all
+
+--S 25 of 28
+aa:=integrate(x^3*(a^2-x^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                                            +---------+
+--R             12       3 10        5 8        7 6       9 4  |   2    2      14
+--R       (35a x   - 336a x   + 1015a x  - 1260a x  + 560a x )\|- x  + a   + 5x
+--R     + 
+--R             2 12       4 10        6 8        8 6       10 4
+--R       - 133a x   + 721a x   - 1575a x  + 1540a x  - 560a  x
+--R  /
+--R                                            +---------+
+--R           6       2 4        4 2        6  |   2    2          6        3 4
+--R       (35x  - 840a x  + 2800a x  - 2240a )\|- x  + a   - 245a x  + 1960a x
+--R     + 
+--R              5 2        7
+--R       - 3920a x  + 2240a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.262~~~~~$\displaystyle
+\int{\frac{(a^2-x^2)^{3/2}}{x}}~dx$}
+$$\int{\frac{(a^2-x^2)^{3/2}}{x}}=
+\frac{(a^2-x^2)^{3/2}}{3}-a^2\sqrt{a^2-x^2}+
+a^3\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 26 of 28
+aa:=integrate((a^2-x^2)^(3/2)/x,x)
+--R 
+--R
+--R   (1)
+--R                                                       +---------+
+--R                       +---------+                     |   2    2
+--R           3 2      5  |   2    2      4 2      6     \|- x  + a   - a
+--R       ((3a x  - 12a )\|- x  + a   - 9a x  + 12a )log(----------------)
+--R                                                              x
+--R     + 
+--R                        +---------+
+--R            4      3 2  |   2    2     6     2 4      4 2
+--R       (3a x  - 12a x )\|- x  + a   + x  - 9a x  + 12a x
+--R  /
+--R                  +---------+
+--R        2      2  |   2    2        2      3
+--R     (3x  - 12a )\|- x  + a   - 9a x  + 12a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.263~~~~~$\displaystyle
+\int{\frac{(a^2-x^2)^{3/2}}{x^2}}~dx$}
+$$\int{\frac{(a^2-x^2)^{3/2}}{x^2}}=
+-\frac{(a^2-x^2)^{3/2}}{x}+\frac{3x\sqrt{a^2-x^2}}{2}-
+\frac{3}{2}a^2\ln\left(x+\sqrt{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 27 of 28
+aa:=integrate((a^2-x^2)^{3/2}/x^2,x)
+--R 
+--R
+--R   (1)
+--R                                                           +---------+
+--R                        +---------+                        |   2    2
+--R           2 3      4   |   2    2       3 3      5       \|- x  + a   - a
+--R       ((6a x  - 24a x)\|- x  + a   - 18a x  + 24a x)atan(----------------)
+--R                                                                  x
+--R     + 
+--R                             +---------+
+--R            4     3 2     5  |   2    2     6     2 4     4 2     6
+--R       (3a x  + 2a x  - 8a )\|- x  + a   + x  - 3a x  - 6a x  + 8a
+--R  /
+--R                  +---------+
+--R        3     2   |   2    2        3     3
+--R     (2x  - 8a x)\|- x  + a   - 6a x  + 8a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.264~~~~~$\displaystyle
+\int{\frac{(a^2-x^2)^{3/2}}{x^3}}~dx$}
+$$\int{\frac{(a^2-x^2)^{3/2}}{x^3}}=
+-\frac{(a^2-x^2)^{3/2}}{2x^2}+\frac{3}{2}\sqrt{a^2-x^2}-
+\frac{3}{2}a\sec^{-1}\left|\frac{x}{a}\right|
+$$
+<<*>>=
+)clear all
+
+--S 28 of 28
+aa:=integrate((a^2-x^2)^(3/2)/x^3,x)
+--R 
+--R
+--R   (1)
+--R                                                             +---------+
+--R                           +---------+                       |   2    2
+--R               4      3 2  |   2    2      2 4      4 2     \|- x  + a   - a
+--R       ((- 3a x  + 12a x )\|- x  + a   + 9a x  - 12a x )log(----------------)
+--R                                                                    x
+--R     + 
+--R                             +---------+
+--R            4     3 2     5  |   2    2      6     2 4     4 2     6
+--R       (4a x  + 3a x  - 4a )\|- x  + a   + 2x  - 3a x  - 5a x  + 4a
+--R  /
+--R                   +---------+
+--R        4     2 2  |   2    2        4     3 2
+--R     (2x  - 8a x )\|- x  + a   - 6a x  + 8a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 pp68-69
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum2.input.pamphlet b/src/input/schaum2.input.pamphlet
index cb8e6db..ba16925 100644
--- a/src/input/schaum2.input.pamphlet
+++ b/src/input/schaum2.input.pamphlet
@@ -8,7 +8,7 @@
 \tableofcontents
 \eject
 \section{\cite{1}:14.84~~~~~$\displaystyle\int{\frac{dx}{\sqrt{ax+b}}}$}
-$$\int{\frac{dx}{\sqrt{ax+b}}}=\frac{2\sqrt{ax+b}}{a}$$
+$$\int{\frac{1}{\sqrt{ax+b}}}=\frac{2\sqrt{ax+b}}{a}$$
 <<*>>=
 )spool schaum2.output
 )set message test on
@@ -49,7 +49,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.85~~~~~$\displaystyle\int{\frac{x~dx}{\sqrt{ax+b}}}$}
-$$\int{\frac{x~dx}{\sqrt{ax+b}}}=\frac{2(ax-2b)}{3a^2}\sqrt{ax+b}$$
+$$\int{\frac{x}{\sqrt{ax+b}}}=\frac{2(ax-2b)}{3a^2}\sqrt{ax+b}$$
 <<*>>=
 )clear all
 
@@ -89,7 +89,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.86~~~~~$\displaystyle\int{\frac{x^2~dx}{\sqrt{ax+b}}}$}
-$$\int{\frac{x~dx}{\sqrt{ax+b}}}=
+$$\int{\frac{x}{\sqrt{ax+b}}}=
 \frac{2(3a^2x^2-4abx+8b^2)}{15a^2}\sqrt{ax+b}$$
 <<*>>=
 )clear all
@@ -130,7 +130,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.87~~~~~$\displaystyle\int{\frac{dx}{x\sqrt{ax+b}}}$}
-$$\int{\frac{dx}{x\sqrt{ax+b}}}=
+$$\int{\frac{1}{x\sqrt{ax+b}}}=
 \left\{
 \begin{array}{l}
 \displaystyle
@@ -380,9 +380,9 @@ Thus the original equation and Spiegel's derivative of the integral are equal.
 So we can conclude that both second answers are correct although they differ
 by a constant of integration.
 
- \section{\cite{1}:14.88~~~~~$\displaystyle\int{\frac{dx}{x^2\sqrt{ax+b}}}$}
-$$\int{\frac{dx}{x^2\sqrt{ax+b}}}=
--\frac{\sqrt{ax+b}}{bx}-\frac{a}{2b}~\int{\frac{dx}{x\sqrt{ax+b}}}$$
+\section{\cite{1}:14.88~~~~~$\displaystyle\int{\frac{dx}{x^2\sqrt{ax+b}}}$}
+$$\int{\frac{1}{x^2\sqrt{ax+b}}}=
+-\frac{\sqrt{ax+b}}{bx}-\frac{a}{2b}~\int{\frac{1}{x\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
@@ -565,7 +565,7 @@ cc22:=bb2-aa.2
 @
 
 \section{\cite{1}:14.89~~~~~$\displaystyle\int{\sqrt{ax+b}~dx}$}
-$$\int{\sqrt{ax+b}~dx}=
+$$\int{\sqrt{ax+b}}=
 \frac{2\sqrt{(ax+b)^3}}{3a}$$
 <<*>>=
 )clear all
@@ -687,7 +687,7 @@ result=nn/sqrt(mm)
 and this reduces to $\sqrt{ax+b}$
 
 \section{\cite{1}:14.90~~~~~$\displaystyle\int{x\sqrt{ax+b}~dx}$}
-$$\int{x\sqrt{ax+b}~dx}=
+$$\int{x\sqrt{ax+b}}=
 \frac{2(3ax-2b)}{15a^2}~\sqrt{(ax+b)^3}$$
 <<*>>=
 )clear all
@@ -792,7 +792,7 @@ t2*sqrt(t2)-sqrt(t2^3)
 @
 
 \section{\cite{1}:14.91~~~~~$\displaystyle\int{x^2\sqrt{ax+b}~dx}$}
-$$\int{x^2\sqrt{ax+b}~dx}=
+$$\int{x^2\sqrt{ax+b}}=
 \frac{2(15a^2x^2-12abx+8b^2)}{105a^2}~\sqrt{(a+bx)^3}$$
 Note: the sqrt term is almost certainly $\sqrt{(ax+b)}$
 <<*>>=
@@ -844,8 +844,8 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.92~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x}~dx}$}
-$$\int{\frac{\sqrt{ax+b}}{x}~dx}=
-2\sqrt{ax+b}+b~\int{\frac{dx}{x\sqrt{ax+b}}}$$
+$$\int{\frac{\sqrt{ax+b}}{x}}=
+2\sqrt{ax+b}+b~\int{\frac{1}{x\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
@@ -977,8 +977,8 @@ cc22:=bb2-aa.2
 @
 
 \section{\cite{1}:14.93~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x^2}~dx}$}
-$$\int{\frac{\sqrt{ax+b}}{x^2}~dx}=
--\frac{\sqrt{ax+b}}{x}+\frac{a}{2}~\int{\frac{dx}{x\sqrt{ax+b}}}$$
+$$\int{\frac{\sqrt{ax+b}}{x^2}}=
+-\frac{\sqrt{ax+b}}{x}+\frac{a}{2}~\int{\frac{1}{x\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
@@ -1101,9 +1101,9 @@ cc22:=bb2-aa.2
 @
 
 \section{\cite{1}:14.94~~~~~$\displaystyle\int{\frac{x^m}{\sqrt{ax+b}}~dx}$}
-$$\int{\frac{x^m}{\sqrt{ax+b}}~dx}=
+$$\int{\frac{x^m}{\sqrt{ax+b}}}=
 \frac{2x^m\sqrt{ax+b}}{(2m+1)a}-\frac{2mb}{(2m+1)a}
-~\int{\frac{x^{m-1}}{\sqrt{ax+b}}~dx}$$
+~\int{\frac{x^{m-1}}{\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
@@ -1121,9 +1121,9 @@ aa:=integrate(x^m/sqrt(a*x+b),x)
 @
 
 \section{\cite{1}:14.95~~~~~$\displaystyle\int{\frac{dx}{x^m\sqrt{ax+b}}}$}
-$$\int{\frac{dx}{x^m\sqrt{ax+b}}}=
+$$\int{\frac{1}{x^m\sqrt{ax+b}}}=
 -\frac{\sqrt{ax+b}}{(m-1)bx^{m-1}}-\frac{(2m-3)a}{(2m-2)b}
-~\int{\frac{dx}{x^{m-1}\sqrt{ax+b}}}$$
+~\int{\frac{1}{x^{m-1}\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
@@ -1141,9 +1141,9 @@ aa:=integrate(1/(x^m*sqrt(a*x+b)),x)
 @
 
 \section{\cite{1}:14.96~~~~~$\displaystyle\int{x^m\sqrt{ax+b}~dx}$}
-$$\int{x^m\sqrt{ax+b}~dx}=
+$$\int{x^m\sqrt{ax+b}}=
 \frac{2x^m}{(2m+3)a}(ax+b)^{3/2}
--\frac{2mb}{(2m+3)a}~\int{x^{m-1}\sqrt{ax+b}~dx}$$
+-\frac{2mb}{(2m+3)a}~\int{x^{m-1}\sqrt{ax+b}}$$
 <<*>>=
 )clear all
 
@@ -1160,9 +1160,9 @@ aa:=integrate(x^m*sqrt(a*x+b),x)
 @
 
 \section{\cite{1}:14.97~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x^m}~dx}$}
-$$\int{\frac{\sqrt{ax+b}}{x^m}~dx}=
+$$\int{\frac{\sqrt{ax+b}}{x^m}}=
 -\frac{\sqrt{ax+b}}{(m-1)x^{m-1}}
-+\frac{a}{2(m-1)}~\int{\frac{dx}{x^{m-1}\sqrt{ax+b}}}$$
++\frac{a}{2(m-1)}~\int{\frac{1}{x^{m-1}\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
@@ -1180,9 +1180,9 @@ aa:=integrate(sqrt(a*x+b)/x^m,x)
 @
 
 \section{\cite{1}:14.98~~~~~$\displaystyle\int{\frac{\sqrt{ax+b}}{x^m}~dx}$}
-$$\int{\frac{\sqrt{ax+b}}{x^m}~dx}=
+$$\int{\frac{\sqrt{ax+b}}{x^m}}=
 \frac{-(ax+b)^{3/2}}{(m-1)bx^{m-1}}
--\frac{(2m-5)a}{(2m-2)b}~\int{\frac{\sqrt{ax+b}}{x^{m-1}}~dx}$$
+-\frac{(2m-5)a}{(2m-2)b}~\int{\frac{\sqrt{ax+b}}{x^{m-1}}}$$
 Note: 14.98 is the same as 14.97
 <<*>>=
 )clear all
@@ -1201,7 +1201,7 @@ aa:=integrate(sqrt(a*x+b)/x^m,x)
 @
 
 \section{\cite{1}:14.99~~~~~$\displaystyle\int{(ax+b)^{m/2}~dx}$}
-$$\int{(ax+b)^{m/2}~dx}=
+$$\int{(ax+b)^{m/2}}=
 \frac{2(ax+b)^{(m+2)/2}}{a(m+2)}$$
 <<*>>=
 )clear all
@@ -1249,7 +1249,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.100~~~~~$\displaystyle\int{x(ax+b)^{m/2}~dx}$}
-$$\int{x(ax+b)^{m/2}~dx}=
+$$\int{x(ax+b)^{m/2}}=
 \frac{2(ax+b)^{(m+4)/2}}{a^2(m+4)}
 -\frac{2b(ax+b)^{(m+2)/2}}{a^2(m+2)}$$
 <<*>>=
@@ -1307,7 +1307,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.101~~~~~$\displaystyle\int{x^2(ax+b)^{m/2}~dx}$}
-$$\int{x^2(ax+b)^{m/2}~dx}=
+$$\int{x^2(ax+b)^{m/2}}=
 \frac{2(ax+b)^{(m+6)/2}}{a^3(m+6)}
 -\frac{4b(ax+b)^{(m+4)/2}}{a^3(m+4)}
 +\frac{2b^2(ax+b)^{(m+2)/2}}{a^3(m+2)}$$
@@ -1386,9 +1386,9 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.102~~~~~$\displaystyle\int{\frac{(ax+b)^{m/2}}{x}~dx}$}
-$$\int{\frac{(ax+b)^{m/2}}{x}~dx}=
+$$\int{\frac{(ax+b)^{m/2}}{x}}=
 \frac{2(ax+b)^{m/2}}{m}
-+b~\int{\frac{(ax+b)^{(m-2)/2}}{x}~dx}$$
++b~\int{\frac{(ax+b)^{(m-2)/2}}{x}}$$
 <<*>>=
 )clear all
 
@@ -1407,9 +1407,9 @@ aa:=integrate((a*x+b)^(m/2)/x,x)
 @
 \section{\cite{1}:14.103~~~~~$\displaystyle
 \int{\frac{(ax+b)^{m/2}}{x^2}~dx}$}
-$$\int{\frac{(ax+b)^{m/2}}{x^2}~dx}=
+$$\int{\frac{(ax+b)^{m/2}}{x^2}}=
 -\frac{(ax+b)^{(m+2)/2}}{bx}
-+\frac{ma}{2b}~\int{\frac{(ax+b)^{m/2}}{x}~dx}$$
++\frac{ma}{2b}~\int{\frac{(ax+b)^{m/2}}{x}}$$
 <<*>>=
 )clear all
 
@@ -1429,9 +1429,9 @@ aa:=integrate((a*x+b)^(m/2)/x^2,x)
 @
 \section{\cite{1}:14.104~~~~~$\displaystyle
 \int{\frac{dx}{x(ax+b)^{m/2}}}$}
-$$\int{\frac{dx}{x(ax+b)^{m/2}}}=
+$$\int{\frac{1}{x(ax+b)^{m/2}}}=
 \frac{2}{(m-2)b(ax+b)^{(m-2)/2}}
-+\frac{1}{b}~\int{\frac{dx}{x(ax+b)^{(m-2)/2}}}$$
++\frac{1}{b}~\int{\frac{1}{x(ax+b)^{(m-2)/2}}}$$
 <<*>>=
 )clear all
 
diff --git a/src/input/schaum3.input.pamphlet b/src/input/schaum3.input.pamphlet
index e273509..e1e030d 100644
--- a/src/input/schaum3.input.pamphlet
+++ b/src/input/schaum3.input.pamphlet
@@ -8,7 +8,7 @@
 \tableofcontents
 \eject
 \section{\cite{1}:14.105~~~~~$\displaystyle\int{\frac{dx}{(ax+b)(px+q)}}$}
-$$\int{\frac{dx}{(ax+b)(px+q)}}=
+$$\int{\frac{1}{(ax+b)(px+q)}}=
 \frac{1}{bp-aq}~\ln\left(\frac{px+q}{ax+b}\right)$$
 <<*>>=
 )spool schaum3.output
@@ -54,7 +54,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.106~~~~~$\displaystyle\int{\frac{x~dx}{(ax+b)(px+q)}}$}
-$$\int{\frac{x~dx}{(ax+b)(px+q)}}=
+$$\int{\frac{x}{(ax+b)(px+q)}}=
 \frac{1}{bp-aq}\left\{\frac{b}{a}~\ln(ax+b)-\frac{q}{p}~\ln(px+q)\right\}$$
 <<*>>=
 )clear all
@@ -93,7 +93,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.107~~~~~$\displaystyle\int{\frac{dx}{(ax+b)^2(px+q)}}$}
-$$\int{\frac{dx}{(ax+b)^2(px+q)}}=
+$$\int{\frac{1}{(ax+b)^2(px+q)}}=
 \frac{1}{bp-aq}
 \left\{\frac{1}{ax+b}+
 \frac{p}{bp-aq}~\ln\left(\frac{px+q}{ax+b}\right)\right\}$$
@@ -141,7 +141,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.108~~~~~$\displaystyle\int{\frac{x~dx}{(ax+b)^2(px+q)}}$}
-$$\int{\frac{x~dx}{(ax+b)^2(px+q)}}=
+$$\int{\frac{x}{(ax+b)^2(px+q)}}=
 \frac{1}{bp-aq}
 \left\{\frac{q}{bp-aq}
 ~\ln\left(\frac{ax+b}{px+q}\right)-\frac{b}{a(ax+b)}\right\}$$
@@ -192,7 +192,7 @@ cc:=aa-bb
 
 \section{\cite{1}:14.109~~~~~$\displaystyle
 \int{\frac{x^2~dx}{(ax+b)^2(px+q)}}$}
-$$\int{\frac{x^2~dx}{(ax+b)^2(px+q)}}=$$
+$$\int{\frac{x^2}{(ax+b)^2(px+q)}}=$$
 $$\frac{b^2}{(bp-aq)a^2(ax+b)}+\frac{1}{(bp-aq)^2}
 \left\{\frac{q^2}{p}~\ln(px+q)+\frac{b(bp-2aq)}{a^2}~\ln(ax+b)\right\}$$
 <<*>>=
@@ -243,10 +243,10 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.110~~~~~$\displaystyle\int{\frac{dx}{(ax+b)^m(px+q)^n}}$}
-$$\int{\frac{dx}{(ax+b)^m(px+q)^n}}=$$
+$$\int{\frac{1}{(ax+b)^m(px+q)^n}}=$$
 $$\frac{-1}{(n-1)(bp-aq)}
 \left\{\frac{1}{(ax+b)^{m-1}(px+q)^{n-1}}+
-a(m+n-2)~\int{\frac{dx}{(ax+b)^m(px+q)^{n-1}}}\right\}$$
+a(m+n-2)~\int{\frac{1}{(ax+b)^m(px+q)^{n-1}}}\right\}$$
 <<*>>=
 )clear all
 
@@ -331,7 +331,7 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.111~~~~~$\displaystyle\int{\frac{ax+b}{px+q}~dx}$}
-$$\int{\frac{ax+b}{px+q}~dx}=\frac{ax}{p}+\frac{bp-aq}{p^2}~\ln(px+q)$$
+$$\int{\frac{ax+b}{px+q}}=\frac{ax}{p}+\frac{bp-aq}{p^2}~\ln(px+q)$$
 <<*>>=
 )clear all
 
@@ -369,15 +369,15 @@ cc:=aa-bb
 @
 
 \section{\cite{1}:14.112~~~~~$\displaystyle\int{\frac{(ax+b)^m}{(px+q)^n}~dx}$}
-$$\int{\frac{(ax+b)^m}{(px+q)^n}~dx}=\left\{
+$$\int{\frac{(ax+b)^m}{(px+q)^n}}=\left\{
 \begin{array}{c}
 \frac{-1}{(n-1)(bp-aq)}
 \left\{\frac{(ax+b)^{m+1}}{(px+q)^{n-1}}+(n-m-2)a
-\int{\frac{(ax+b)^m}{(px+q)^{n-1}}}~dx\right\}\\
+\int{\frac{(ax+b)^m}{(px+q)^{n-1}}}\right\}\\
 \frac{-1}{(n-m-1)p}+\left\{\frac{(ax+b)^m}{(px+q)^{n-1}}+m(bp-aq)
-\int{\frac{(ax+b)^{m-1}}{(px+q)^n}}~dx\right\}\\
+\int{\frac{(ax+b)^{m-1}}{(px+q)^n}}\right\}\\
 \frac{-1}{(n-1)p}\left\{\frac{(ax+b)^m}{(px+q)^{n-1}}-ma
-\int{\frac{(ax+b)^{m-1}}{(px+q)^{n-1}}}~dx\right\}
+\int{\frac{(ax+b)^{m-1}}{(px+q)^{n-1}}}\right\}
 \end{array}
 \right.$$
 <<*>>=
diff --git a/src/input/schaum4.input.pamphlet b/src/input/schaum4.input.pamphlet
index b57e857..efd9edc 100644
--- a/src/input/schaum4.input.pamphlet
+++ b/src/input/schaum4.input.pamphlet
@@ -30,8 +30,8 @@ aa:=integrate((p*x+q)/sqrt(a*x+b),x)
 @
 
 \section{\cite{1}:14.114~~~~~$\displaystyle
-\int{\frac{dx}{(px+q)\sqrt{ax+b}}}~dx$}
-$$\int{\frac{dx}{(px+q)\sqrt{ax+b}}}=
+\int{\frac{dx}{(px+q)\sqrt{ax+b}}}$}
+$$\int{\frac{1}{(px+q)\sqrt{ax+b}}}=
 \left\{
 \begin{array}{l}
 \frac{1}{\sqrt{bp-aq}\sqrt{p}}\ln\left(
@@ -117,7 +117,7 @@ aa:=integrate(sqrt(a*x+b)/(p*x+q),x)
 \section{\cite{1}:14.116~~~~~$\displaystyle\int{(px+b)^n\sqrt{ax+b}}~dx$}
 $$\int{(px+b)^n\sqrt{ax+b}}=
 \frac{2(px+q)^{n+1}\sqrt{ax+b}}{(2n+3)p}+\frac{bp-aq}{(2n+3)p}
-\int{\frac{(px+q)^n}{\sqrt{ax+b}}}~dx$$
+\int{\frac{(px+q)^n}{\sqrt{ax+b}}}$$
 
 <<*>>=
 )clear all
@@ -136,10 +136,10 @@ aa:=integrate((p*x+q)^n*sqrt(a*x+b),x)
 
 \section{\cite{1}:14.117~~~~~$\displaystyle
 \int{\frac{dx}{(px+b)^n\sqrt{ax+b}}}$}
-$$\int{\frac{dx}{(px+b)^n\sqrt{ax+b}}}=
+$$\int{\frac{1}{(px+b)^n\sqrt{ax+b}}}=
 \frac{\sqrt{ax+b}}{(n-1)(aq-bp)(px+q)^{n-1}}+
 \frac{(2n-3)a}{2(n-1)(aq-bp)}
-\int{\frac{dx}{(px+q)^{n-1}\sqrt{ax+b}}}$$
+\int{\frac{1}{(px+q)^{n-1}\sqrt{ax+b}}}$$
 
 <<*>>=
 )clear all
@@ -183,7 +183,7 @@ aa:=integrate((p*x+q)^n/sqrt(a*x+b),x)
 \int{\frac{\sqrt{ax+b}}{(px+q)^n}}~dx$}
 $$\int{\frac{\sqrt{ax+b}}{(px+q)^n}}=
 \frac{-\sqrt{ax+b}}{(n-1)p(px+q)^{n-1}}+
-\frac{a}{2(n-1)p}\int{\frac{dx}{(px+q)^{n-1}\sqrt{ax+b}}}$$
+\frac{a}{2(n-1)p}\int{\frac{1}{(px+q)^{n-1}\sqrt{ax+b}}}$$
 <<*>>=
 )clear all
 
diff --git a/src/input/schaum5.input.pamphlet b/src/input/schaum5.input.pamphlet
index a784b92..f8bccc8 100644
--- a/src/input/schaum5.input.pamphlet
+++ b/src/input/schaum5.input.pamphlet
@@ -9,7 +9,7 @@
 \eject
 \section{\cite{1}:14.120~~~~~$\displaystyle
 \int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}$}
-$$\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}=
+$$\int{\frac{1}{\sqrt{(ax+b)(px+q)}}}=
 \left\{
 \begin{array}{l}
 \frac{2}{\sqrt{ap}}\ln\left(\sqrt{a(px+q)}+\sqrt{p(ax+b)}\right)\\
@@ -57,9 +57,9 @@ aa:=integrate(1/sqrt((a*x+b)*(p*x+q)),x)
 
 \section{\cite{1}:14.121~~~~~$\displaystyle
 \int{\frac{x~dx}{\sqrt{(ax+b)(px+q)}}}$}
-$$\int{\frac{x~dx}{\sqrt{(ax+b)(px+q)}}}=
+$$\int{\frac{x}{\sqrt{(ax+b)(px+q)}}}=
 \frac{\sqrt{(ax+b)(px+q)}}{ap}-\frac{bp+aq}{2ap}
-\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}
+\int{\frac{1}{\sqrt{(ax+b)(px+q)}}}
 $$
 <<*>>=
 )clear all
@@ -138,7 +138,7 @@ aa:=integrate(x/sqrt((a*x+b)*(p*x+q)),x)
 \section{\cite{1}:14.122~~~~~$\displaystyle\int{\sqrt{(ax+b)(px+q)}}~dx$}
 $$\int{\sqrt{(ax+b)(px+q)}}=
 \frac{2apx+bp+aq}{4ap}\sqrt{(ax+b)(px+q)}-
-\frac{(bp-aq)^2}{8ap}\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}
+\frac{(bp-aq)^2}{8ap}\int{\frac{1}{\sqrt{(ax+b)(px+q)}}}
 $$
 <<*>>=
 )clear all
@@ -295,7 +295,7 @@ aa:=integrate(sqrt((a*x+b)*(p*x+q)),x)
 \section{\cite{1}:14.123~~~~~$\displaystyle\int{\sqrt{\frac{px+q}{ax+b}}}~dx$}
 $$\int{\sqrt{\frac{px+q}{ax+b}}}=
 \frac{\sqrt{(ax+b)(px+q)}}{a}+\frac{aq-bp}{2a}
-\int{\frac{dx}{\sqrt{(ax+b)(px+q)}}}
+\int{\frac{1}{\sqrt{(ax+b)(px+q)}}}
 $$
 <<*>>=
 )clear all
@@ -336,7 +336,7 @@ aa:=integrate(sqrt((p*x+q)/(a*x+b)),x)
 
 \section{\cite{1}:14.124~~~~~$\displaystyle
 \int{\frac{dx}{(px+q)\sqrt{(ax+b)(px+q)}}}~dx$}
-$$\int{\frac{dx}{(px+q)\sqrt{(ax+b)(px+q)}}}=
+$$\int{\frac{1}{(px+q)\sqrt{(ax+b)(px+q)}}}=
 \frac{2\sqrt{ax+b}}{(aq-bp)\sqrt{px+q}}
 $$
 <<*>>=
diff --git a/src/input/schaum6.input.pamphlet b/src/input/schaum6.input.pamphlet
index 1a4b430..9a08dc6 100644
--- a/src/input/schaum6.input.pamphlet
+++ b/src/input/schaum6.input.pamphlet
@@ -8,7 +8,7 @@
 \tableofcontents
 \eject
 \section{\cite{1}:14.125~~~~~$\displaystyle\int{\frac{dx}{x^2+a^2}}$}
-$$\int{\frac{dx}{x^2+a^2}}=\frac{1}{a}\tan^{-1}\frac{x}{a}$$
+$$\int{\frac{1}{x^2+a^2}}=\frac{1}{a}\tan^{-1}\frac{x}{a}$$
 <<*>>=
 )spool schaum6.output
 )set message test on
@@ -29,7 +29,7 @@ aa:=integrate(1/(x^2+a^2),x)
 @
 
 \section{\cite{1}:14.126~~~~~$\displaystyle\int{\frac{x~dx}{x^2+a^2}}$}
-$$\int{\frac{x~dx}{x^2+a^2}}=\frac{1}{2}\ln(x^2+a^2)$$
+$$\int{\frac{x}{x^2+a^2}}=\frac{1}{2}\ln(x^2+a^2)$$
 <<*>>=
 )clear all
 
@@ -46,7 +46,7 @@ aa:=integrate(x/(x^2+a^2),x)
 @
 
 \section{\cite{1}:14.127~~~~~$\displaystyle\int{\frac{x^2~dx}{x^2+a^2}}$}
-$$\int{\frac{x^2~dx}{x^2+a^2}}=x-a\tan^{-1}\frac{x}{a}$$
+$$\int{\frac{x^2}{x^2+a^2}}=x-a\tan^{-1}\frac{x}{a}$$
 <<*>>=
 )clear all
 
@@ -62,7 +62,7 @@ aa:=integrate(x^2/(x^2+a^2),x)
 @
 
 \section{\cite{1}:14.128~~~~~$\displaystyle\int{\frac{x^3~dx}{x^2+a^2}}$}
-$$\int{\frac{x^3~dx}{x^2+a^2}}=\frac{x^2}{2}-\frac{a^2}{2}\ln(x^2+a^2)$$
+$$\int{\frac{x^3}{x^2+a^2}}=\frac{x^2}{2}-\frac{a^2}{2}\ln(x^2+a^2)$$
 
 <<*>>=
 )clear all
@@ -79,8 +79,8 @@ aa:=integrate(x^3/(x^2+a^2),x)
 --E 
 @
 
-\section{\cite{1}:14.129~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)}}~dx$}
-$$\int{\frac{dx}{x(x^2+a^2)}}=
+\section{\cite{1}:14.129~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)}}$}
+$$\int{\frac{1}{x(x^2+a^2)}}=
 \frac{1}{2a^2}\ln\left(\frac{x^2}{x^2+a^2}\right)
 $$
 <<*>>=
@@ -99,8 +99,8 @@ aa:=integrate(1/(x*(x^2+a^2)),x)
 --E 
 @
 
-\section{\cite{1}:14.130~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2+a^2)}}~dx$}
-$$\int{\frac{dx}{x^2(x^2+a^2)}}=
+\section{\cite{1}:14.130~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2+a^2)}}$}
+$$\int{\frac{1}{x^2(x^2+a^2)}}=
 -\frac{1}{a^2x}-\frac{1}{a^3}\tan^{-1}\frac{x}{a}
 $$
 <<*>>=
@@ -120,8 +120,8 @@ aa:=integrate(1/(x^2*(x^2+a^2)),x)
 --E 
 @
 
-\section{\cite{1}:14.131~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2+a^2)}}~dx$}
-$$\int{\frac{dx}{x^3(x^2+a^2)}}=
+\section{\cite{1}:14.131~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2+a^2)}}$}
+$$\int{\frac{1}{x^3(x^2+a^2)}}=
 -\frac{1}{2a^2x^2}-\frac{1}{2a^4}\ln\left(\frac{x^2}{x^2+a^2}\right)
 $$
 <<*>>=
@@ -140,8 +140,8 @@ aa:=integrate(1/(x^3*(x^2+a^2)),x)
 --E 
 @
 
-\section{\cite{1}:14.132~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^2}}~dx$}
-$$\int{\frac{dx}{(x^2+a^2)^2}}=
+\section{\cite{1}:14.132~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^2}}$}
+$$\int{\frac{1}{(x^2+a^2)^2}}=
 \frac{x}{2a^2(x^2+a^2)}+\frac{1}{2a^3}\tan^{-1}\frac{x}{a}
 $$
 <<*>>=
@@ -161,8 +161,8 @@ aa:=integrate(1/((x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.133~~~~~$\displaystyle\int{\frac{x~dx}{(x^2+a^2)^2}}~dx$}
-$$\int{\frac{x~dx}{(x^2+a^2)^2}}=
+\section{\cite{1}:14.133~~~~~$\displaystyle\int{\frac{x~dx}{(x^2+a^2)^2}}$}
+$$\int{\frac{x}{(x^2+a^2)^2}}=
 \frac{-1}{2(x^2+a^2)}
 $$
 <<*>>=
@@ -180,8 +180,8 @@ aa:=integrate(x/((x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.134~~~~~$\displaystyle\int{\frac{x^2dx}{(x^2+a^2)^2}}~dx$}
-$$\int{\frac{x^2dx}{(x^2+a^2)^2}}=
+\section{\cite{1}:14.134~~~~~$\displaystyle\int{\frac{x^2dx}{(x^2+a^2)^2}}$}
+$$\int{\frac{x^2}{(x^2+a^2)^2}}=
 \frac{-x}{2(x^2+a^2)}+\frac{1}{2a}\tan^{-1}\frac{x}{a}
 $$
 <<*>>=
@@ -201,8 +201,8 @@ aa:=integrate(x^2/((x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.135~~~~~$\displaystyle\int{\frac{x^3dx}{(x^2+a^2)^2}}~dx$}
-$$\int{\frac{x^3dx}{(x^2+a^2)^2}}=
+\section{\cite{1}:14.135~~~~~$\displaystyle\int{\frac{x^3dx}{(x^2+a^2)^2}}$}
+$$\int{\frac{x^3}{(x^2+a^2)^2}}=
 \frac{a^2}{2(x^2+a^2)}+\frac{1}{2}\ln(x^2+a^2)
 $$
 <<*>>=
@@ -221,8 +221,8 @@ aa:=integrate(x^3/((x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.136~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)^2}}~dx$}
-$$\int{\frac{dx}{x(x^2+a^2)^2}}=
+\section{\cite{1}:14.136~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)^2}}$}
+$$\int{\frac{1}{x(x^2+a^2)^2}}=
 \frac{1}{2a^2(x^2+a^2)}+\frac{1}{2a^4}\ln\left(\frac{x^2}{x^2+a^2}\right)
 $$
 <<*>>=
@@ -241,8 +241,8 @@ aa:=integrate(1/(x*(x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.137~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2+a^2)^2}}~dx$}
-$$\int{\frac{dx}{x^2(x^2+a^2)^2}}=
+\section{\cite{1}:14.137~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2+a^2)^2}}$}
+$$\int{\frac{1}{x^2(x^2+a^2)^2}}=
 -\frac{1}{a^4x}-\frac{x}{2a^4(x^2+a^2)}-\frac{3}{2a^5}\tan^{-1}\frac{x}{a}
 $$
 <<*>>=
@@ -262,8 +262,8 @@ aa:=integrate(1/((x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.138~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2+a^2)^2}}~dx$}
-$$\int{\frac{dx}{x^3(x^2+a^2)^2}}=
+\section{\cite{1}:14.138~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2+a^2)^2}}$}
+$$\int{\frac{1}{x^3(x^2+a^2)^2}}=
 -\frac{1}{2a^4x^2}-\frac{1}{2a^4(x^2+a^2)}-
 \frac{1}{a^6}\ln\left(\frac{x^2}{x^2+a^2}\right)
 $$
@@ -283,10 +283,10 @@ aa:=integrate(1/(x^3*(x^2+a^2)^2),x)
 --E 
 @
 
-\section{\cite{1}:14.139~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^n}}~dx$}
-$$\int{\frac{dx}{(x^2+a^2)^n}}=
+\section{\cite{1}:14.139~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^n}}$}
+$$\int{\frac{1}{(x^2+a^2)^n}}=
 \frac{x}{2(n-1)a^2(x^2+a^2)^{n-1}}+\frac{2n-3}{(2n-2)a^2}
-\int{\frac{dx}{(x^2+a^2)^{n-1}}}
+\int{\frac{1}{(x^2+a^2)^{n-1}}}
 $$
 <<*>>=
 )clear all
@@ -304,8 +304,8 @@ aa:=integrate(1/((x^2+a^2)^n),x)
 --E 
 @
 
-\section{\cite{1}:14.140~~~~~$\displaystyle\int{\frac{x~dx}{(x^2+a^2)^n}}~dx$}
-$$\int{\frac{x~dx}{(x^2+a^2)^n}}=
+\section{\cite{1}:14.140~~~~~$\displaystyle\int{\frac{x~dx}{(x^2+a^2)^n}}$}
+$$\int{\frac{x}{(x^2+a^2)^n}}=
 \frac{-1}{2(n-1)(x^2+a^2)^{n-1}}
 $$
 <<*>>=
@@ -325,10 +325,10 @@ aa:=integrate(x/((x^2+a^2)^n),x)
 --E 
 @
 
-\section{\cite{1}:14.141~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)^n}}~dx$}
-$$\int{\frac{dx}{x(x^2+a^2)^n}}=
+\section{\cite{1}:14.141~~~~~$\displaystyle\int{\frac{dx}{x(x^2+a^2)^n}}$}
+$$\int{\frac{1}{x(x^2+a^2)^n}}=
 \frac{1}{2(n-1)a^2(x^2+a^2)^{n-1}}+\frac{1}{a^2}
-\int{\frac{dx}{x(x^2+a^2)^{n-1}}}
+\int{\frac{1}{x(x^2+a^2)^{n-1}}}
 $$
 <<*>>=
 )clear all
@@ -346,10 +346,10 @@ aa:=integrate(1/(x*(x^2+a^2)^n),x)
 --E 
 @
 
-\section{\cite{1}:14.142~~~~~$\displaystyle\int{\frac{x^mdx}{(x^2+a^2)^n}}~dx$}
-$$\int{\frac{x^mdx}{(x^2+a^2)^n}}=
-\int{\frac{x^{m-2}dx}{(x^2+a^2)^{n-1}}} -
-a^2\int{\frac{x^{m-2}dx}{(x^2+a^2)^n}}
+\section{\cite{1}:14.142~~~~~$\displaystyle\int{\frac{x^mdx}{(x^2+a^2)^n}}$}
+$$\int{\frac{x^m}{(x^2+a^2)^n}}=
+\int{\frac{x^{m-2}}{(x^2+a^2)^{n-1}}} -
+a^2\int{\frac{x^{m-2}}{(x^2+a^2)^n}}
 $$
 <<*>>=
 )clear all
@@ -367,10 +367,10 @@ aa:=integrate(x^m/((x^2+a^2)^n),x)
 --E 
 @
 
-\section{\cite{1}:14.143~~~~~$\displaystyle\int{\frac{dx}{x^m(x^2+a^2)^n}}~dx$}
-$$\int{\frac{dx}{x^m(x^2+a^2)^n}}=
-\frac{1}{a^2}\int{\frac{dx}{x^m(x^2+a^2)^{n-1}}}-
-\frac{1}{a^2}\int{\frac{dx}{x^{m-2}(x^2+a^2)^n}}
+\section{\cite{1}:14.143~~~~~$\displaystyle\int{\frac{dx}{x^m(x^2+a^2)^n}}$}
+$$\int{\frac{1}{x^m(x^2+a^2)^n}}=
+\frac{1}{a^2}\int{\frac{1}{x^m(x^2+a^2)^{n-1}}}-
+\frac{1}{a^2}\int{\frac{1}{x^{m-2}(x^2+a^2)^n}}
 $$
 <<*>>=
 )clear all
diff --git a/src/input/schaum7.input.pamphlet b/src/input/schaum7.input.pamphlet
new file mode 100644
index 0000000..9226da0
--- /dev/null
+++ b/src/input/schaum7.input.pamphlet
@@ -0,0 +1,395 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum7.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.144~~~~~$\displaystyle\int{\frac{dx}{x^2-a^2}}$}
+$$\int{\frac{1}{x^2-a^2}}=\frac{1}{2a}\ln\left(\frac{x-a}{x+a}\right)$$
+$$\int{\frac{1}{x^2-a^2}}=-\frac{1}{a}\coth^{-1}\frac{x}{a}$$
+<<*>>=
+)spool schaum7.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 19
+aa:=integrate(1/(x^2-a^2),x)
+--R 
+--R
+--R        - log(x + a) + log(x - a)
+--R   (1)  -------------------------
+--R                    2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.145~~~~~$\displaystyle\int{\frac{x~dx}{x^2-a^2}}$}
+$$\int{\frac{x}{x^2-a^2}}=\frac{1}{2}\ln(x^2-a^2)$$
+<<*>>=
+)clear all
+
+--S 2 of 19
+aa:=integrate(x/(x^2-a^2),x)
+--R 
+--R
+--R             2    2
+--R        log(x  - a )
+--R   (1)  ------------
+--R              2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.146~~~~~$\displaystyle\int{\frac{x^2~dx}{x^2-a^2}}$}
+$$\int{\frac{x^2}{x^2-a^2}}=x+\frac{a}{2}\ln\left(\frac{x-a}{x+a}\right)$$
+<<*>>=
+)clear all
+
+--S 3 of 19
+aa:=integrate(x^2/(x^2-a^2),x)
+--R 
+--R
+--R        - a log(x + a) + a log(x - a) + 2x
+--R   (1)  ----------------------------------
+--R                         2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.147~~~~~$\displaystyle\int{\frac{x^3~dx}{x^2-a^2}}$}
+$$\int{\frac{x^3}{x^2-a^2}}=\frac{x^2}{2}+\frac{a^2}{2}\ln(x^2-a^2)$$
+
+<<*>>=
+)clear all
+
+--S 4 of 19
+aa:=integrate(x^3/(x^2-a^2),x)
+--R 
+--R
+--R         2     2    2     2
+--R        a log(x  - a ) + x
+--R   (1)  -------------------
+--R                 2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.148~~~~~$\displaystyle\int{\frac{dx}{x(x^2-a^2)}}$}
+$$\int{\frac{1}{x(x^2-a^2)}}=
+\frac{1}{2a^2}\ln\left(\frac{x^2-a^2}{x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 5 of 19
+aa:=integrate(1/(x*(x^2-a^2)),x)
+--R 
+--R
+--R             2    2
+--R        log(x  - a ) - 2log(x)
+--R   (1)  ----------------------
+--R                    2
+--R                  2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.149~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2-a^2)}}$}
+$$\int{\frac{1}{x^2(x^2-a^2)}}=
+\frac{1}{a^2x}+\frac{1}{2a^3}\ln\left(\frac{x-a}{x+a}\right)
+$$
+<<*>>=
+)clear all
+
+--S 6 of 19
+aa:=integrate(1/(x^2*(x^2-a^2)),x)
+--R 
+--R
+--R        - x log(x + a) + x log(x - a) + 2a
+--R   (1)  ----------------------------------
+--R                         3
+--R                       2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.150~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2-a^2)}}$}
+$$\int{\frac{1}{x^3(x^2-a^2)}}=
+\frac{1}{2a^2x^2}-\frac{1}{2a^4}\ln\left(\frac{x^2}{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 7 of 19
+aa:=integrate(1/(x^3*(x^2-a^2)),x)
+--R 
+--R
+--R         2     2    2      2          2
+--R        x log(x  - a ) - 2x log(x) + a
+--R   (1)  -------------------------------
+--R                       4 2
+--R                     2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.151~~~~~$\displaystyle\int{\frac{dx}{(x^2-a^2)^2}}$}
+$$\int{\frac{1}{(x^2-a^2)^2}}=
+\frac{-x}{2a^2(x^2-a^2)}-\frac{1}{4a^3}\ln\left(\frac{x-a}{x+a}\right)
+$$
+<<*>>=
+)clear all
+
+--S 8 of 19
+aa:=integrate(1/((x^2-a^2)^2),x)
+--R 
+--R
+--R          2    2                  2    2
+--R        (x  - a )log(x + a) + (- x  + a )log(x - a) - 2a x
+--R   (1)  --------------------------------------------------
+--R                              3 2     5
+--R                            4a x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.152~~~~~$\displaystyle\int{\frac{x~dx}{(x^2-a^2)^2}}$}
+$$\int{\frac{x}{(x^2-a^2)^2}}=
+\frac{-1}{2(x^2-a^2)}
+$$
+<<*>>=
+)clear all
+
+--S 9 of 19
+aa:=integrate(x/((x^2-a^2)^2),x)
+--R 
+--R
+--R              1
+--R   (1)  - ---------
+--R            2     2
+--R          2x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.153~~~~~$\displaystyle\int{\frac{x^2dx}{(x^2-a^2)^2}}$}
+$$\int{\frac{x^2}{(x^2-a^2)^2}}=
+\frac{-x}{2(x^2-a^2)}+\frac{1}{4a}\ln\left(\frac{x-a}{x+a}\right)
+$$
+<<*>>=
+)clear all
+
+--S 10 of 19
+aa:=integrate(x^2/((x^2-a^2)^2),x)
+--R 
+--R
+--R            2    2                2    2
+--R        (- x  + a )log(x + a) + (x  - a )log(x - a) - 2a x
+--R   (1)  --------------------------------------------------
+--R                                2     3
+--R                            4a x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.154~~~~~$\displaystyle\int{\frac{x^3dx}{(x^2-a^2)^2}}$}
+$$\int{\frac{x^3}{(x^2-a^2)^2}}=
+\frac{-a^2}{2(x^2-a^2)}+\frac{1}{2}\ln(x^2-a^2)
+$$
+<<*>>=
+)clear all
+
+--S 11 of 19
+aa:=integrate(x^3/((x^2-a^2)^2),x)
+--R 
+--R
+--R          2    2      2    2     2
+--R        (x  - a )log(x  - a ) - a
+--R   (1)  --------------------------
+--R                   2     2
+--R                 2x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.155~~~~~$\displaystyle\int{\frac{dx}{x(x^2-a^2)^2}}$}
+$$\int{\frac{1}{x(x^2-a^2)^2}}=
+\frac{-1}{2a^2(x^2-a^2)}+\frac{1}{2a^4}\ln\left(\frac{x^2}{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 12 of 19
+aa:=integrate(1/(x*(x^2-a^2)^2),x)
+--R 
+--R
+--R            2    2      2    2       2     2           2
+--R        (- x  + a )log(x  - a ) + (2x  - 2a )log(x) - a
+--R   (1)  ------------------------------------------------
+--R                             4 2     6
+--R                           2a x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.156~~~~~$\displaystyle\int{\frac{dx}{x^2(x^2-a^2)^2}}$}
+$$\int{\frac{1}{x^2(x^2-a^2)^2}}=
+-\frac{1}{a^4x}-\frac{x}{2a^4(x^2-a^2)}-
+\frac{3}{4a^5}\ln\left(\frac{x-a}{x+a}\right)
+$$
+<<*>>=
+)clear all
+
+--S 13 of 19
+aa:=integrate(1/((x^2-a^2)^2),x)
+--R 
+--R
+--R          2    2                  2    2
+--R        (x  - a )log(x + a) + (- x  + a )log(x - a) - 2a x
+--R   (1)  --------------------------------------------------
+--R                              3 2     5
+--R                            4a x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.157~~~~~$\displaystyle\int{\frac{dx}{x^3(x^2-a^2)^2}}$}
+$$\int{\frac{1}{x^3(x^2-a^2)^2}}=
+-\frac{1}{2a^4x^2}-\frac{1}{2a^4(x^2-a^2)}+
+\frac{1}{a^6}\ln\left(\frac{x^2}{x^2-a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 14 of 19
+aa:=integrate(1/(x^3*(x^2-a^2)^2),x)
+--R 
+--R
+--R             4     2 2      2    2       4     2 2            2 2    4
+--R        (- 2x  + 2a x )log(x  - a ) + (4x  - 4a x )log(x) - 2a x  + a
+--R   (1)  --------------------------------------------------------------
+--R                                   6 4     8 2
+--R                                 2a x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.158~~~~~$\displaystyle\int{\frac{dx}{(x^2-a^2)^n}}$}
+$$\int{\frac{1}{(x^2-a^2)^n}}=
+\frac{-x}{2(n-1)a^2(x^2-a^2)^{n-1}}-
+\frac{2n-3}{(2n-2)a^2}\int{\frac{1}{(x^2-a^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 15 of 19
+aa:=integrate(1/((x^2-a^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++        1
+--I   (1)   |   ------------- d%L
+--R        ++       2     2 n
+--I             (- a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.159~~~~~$\displaystyle\int{\frac{x~dx}{(x^2-a^2)^n}}$}
+$$\int{\frac{x}{(x^2-a^2)^n}}=
+\frac{-1}{2(n-1)(x^2-a^2)^{n-1}}
+$$
+<<*>>=
+)clear all
+
+--S 16 of 19
+aa:=integrate(x/((x^2-a^2)^n),x)
+--R 
+--R
+--R                   2    2
+--R                - x  + a
+--R   (1)  ------------------------
+--R                         2    2
+--R                  n log(x  - a )
+--R        (2n - 2)%e
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.160~~~~~$\displaystyle\int{\frac{dx}{x(x^2-a^2)^n}}$}
+$$\int{\frac{1}{x(x^2-a^2)^n}}=
+\frac{-1}{2(n-1)a^2(x^2-a^2)^{n-1}}-
+\frac{1}{a^2}\int{\frac{1}{x(x^2-a^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 17 of 19
+aa:=integrate(1/(x*(x^2-a^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++          1
+--I   (1)   |   ---------------- d%L
+--R        ++          2     2 n
+--I             %L (- a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.161~~~~~$\displaystyle\int{\frac{x^mdx}{(x^2-a^2)^n}}$}
+$$\int{\frac{x^m}{(x^2-a^2)^n}}=
+\int{\frac{x^{m-2}}{(x^2-a^2)^{n-1}}}+
+a^2\int\frac{x^{m-2}}{(x^2-a^2)^n}
+$$
+<<*>>=
+)clear all
+
+--S 18 of 19
+aa:=integrate(x^m/((x^2-a^2)^n),x)
+--R 
+--R
+--R           x        m
+--I         ++       %L
+--I   (1)   |   ------------- d%L
+--R        ++       2     2 n
+--I             (- a  + %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.162~~~~~$\displaystyle\int{\frac{dx}{x^m(x^2-a^2)^n}}$}
+$$\int{\frac{1}{x^m(x^2-a^2)^n}}=
+\frac{1}{a^2}\int{\frac{1}{x^{m-2}(x^2-a^2)^n}}-
+\frac{1}{a^2}\int{\frac{1}{x^m(x^2-a^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 19 of 19
+aa:=integrate(1/(x^m*(x^2-a^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++          1
+--I   (1)   |   ---------------- d%L
+--R        ++       2     2 n  m
+--I             (- a  + %L ) %L
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 p65
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum8.input.pamphlet b/src/input/schaum8.input.pamphlet
new file mode 100644
index 0000000..a5c0c7e
--- /dev/null
+++ b/src/input/schaum8.input.pamphlet
@@ -0,0 +1,395 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum8.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.163~~~~~$\displaystyle\int{\frac{dx}{a^2-x^2}}$}
+$$\int{\frac{1}{a^2-x^2}}=\frac{1}{2a}\ln\left(\frac{a-x}{a+x}\right)$$
+$$\int{\frac{1}{a^2-x^2}}=-\frac{1}{a}\coth^{-1}\frac{x}{a}$$
+<<*>>=
+)spool schaum8.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 19
+aa:=integrate(1/(a^2-x^2),x)
+--R 
+--R
+--R        log(x + a) - log(x - a)
+--R   (1)  -----------------------
+--R                   2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.164~~~~~$\displaystyle\int{\frac{x~dx}{a^2-x^2}}$}
+$$\int{\frac{x}{a^2-x^2}}=-\frac{1}{2}\ln(a^2-x^2)$$
+<<*>>=
+)clear all
+
+--S 2 of 19
+aa:=integrate(x/(a^2-x^2),x)
+--R 
+--R
+--R               2    2
+--R          log(x  - a )
+--R   (1)  - ------------
+--R                2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.165~~~~~$\displaystyle\int{\frac{x^2~dx}{a^2-x^2}}$}
+$$\int{\frac{x^2}{a^2-x^2}}=-x+\frac{a}{2}\ln\left(\frac{a+x}{a-x}\right)$$
+<<*>>=
+)clear all
+
+--S 3 of 19
+aa:=integrate(x^2/(a^2-x^2),x)
+--R 
+--R
+--R        a log(x + a) - a log(x - a) - 2x
+--R   (1)  --------------------------------
+--R                        2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.166~~~~~$\displaystyle\int{\frac{x^3~dx}{a^2-x^2}}$}
+$$\int{\frac{x^3}{a^2-x^2}}=-\frac{x^2}{2}-\frac{a^2}{2}\ln(a^2-x^2)$$
+
+<<*>>=
+)clear all
+
+--S 4 of 19
+aa:=integrate(x^3/(a^2-x^2),x)
+--R 
+--R
+--R           2     2    2     2
+--R        - a log(x  - a ) - x
+--R   (1)  ---------------------
+--R                  2
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.167~~~~~$\displaystyle\int{\frac{dx}{x(a^2-x^2)}}$}
+$$\int{\frac{1}{x(a^2-x^2)}}=
+\frac{1}{2a^2}\ln\left(\frac{x^2}{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 5 of 19
+aa:=integrate(1/(x*(a^2-x^2)),x)
+--R 
+--R
+--R               2    2
+--R        - log(x  - a ) + 2log(x)
+--R   (1)  ------------------------
+--R                     2
+--R                   2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.168~~~~~$\displaystyle\int{\frac{dx}{x^2(a^2-x^2)}}$}
+$$\int{\frac{1}{x^2(a^2-x^2)}}=
+\frac{1}{a^2x}+\frac{1}{2a^3}\ln\left(\frac{a+x}{a-x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 6 of 19
+aa:=integrate(1/(x^2*(a^2-x^2)),x)
+--R 
+--R
+--R        x log(x + a) - x log(x - a) - 2a
+--R   (1)  --------------------------------
+--R                        3
+--R                      2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.169~~~~~$\displaystyle\int{\frac{dx}{x^3(a^2-x^2)}}$}
+$$\int{\frac{1}{x^3(a^2-x^2)}}=
+-\frac{1}{2a^2x^2}+\frac{1}{2a^4}\ln\left(\frac{x^2}{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 7 of 19
+aa:=integrate(1/(x^3*(a^2-x^2)),x)
+--R 
+--R
+--R           2     2    2      2          2
+--R        - x log(x  - a ) + 2x log(x) - a
+--R   (1)  ---------------------------------
+--R                        4 2
+--R                      2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.170~~~~~$\displaystyle\int{\frac{dx}{(a^2-x^2)^2}}$}
+$$\int{\frac{1}{(a^2-x^2)^2}}=
+\frac{x}{2a^2(a^2-x^2)}+\frac{1}{4a^3}\ln\left(\frac{a+x}{a-x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 8 of 19
+aa:=integrate(1/((a^2-x^2)^2),x)
+--R 
+--R
+--R          2    2                  2    2
+--R        (x  - a )log(x + a) + (- x  + a )log(x - a) - 2a x
+--R   (1)  --------------------------------------------------
+--R                              3 2     5
+--R                            4a x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.171~~~~~$\displaystyle\int{\frac{x~dx}{(a^2-x^2)^2}}$}
+$$\int{\frac{x}{(a^2-x^2)^2}}=
+\frac{1}{2(a^2-x^2)}
+$$
+<<*>>=
+)clear all
+
+--S 9 of 19
+aa:=integrate(x/((a^2-x^2)^2),x)
+--R 
+--R
+--R              1
+--R   (1)  - ---------
+--R            2     2
+--R          2x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.172~~~~~$\displaystyle\int{\frac{x^2dx}{(a^2-x^2)^2}}$}
+$$\int{\frac{x^2}{(a^2-x^2)^2}}=
+\frac{x}{2(a^2-x^2)}-\frac{1}{4a}\ln\left(\frac{a+x}{a-x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 10 of 19
+aa:=integrate(x^2/((a^2-x^2)^2),x)
+--R 
+--R
+--R            2    2                2    2
+--R        (- x  + a )log(x + a) + (x  - a )log(x - a) - 2a x
+--R   (1)  --------------------------------------------------
+--R                                2     3
+--R                            4a x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.173~~~~~$\displaystyle\int{\frac{x^3dx}{(a^2-x^2)^2}}$}
+$$\int{\frac{x^3}{(a^2-x^2)^2}}=
+\frac{a^2}{2(a^2-x^2)}+\frac{1}{2}\ln(a^2-x^2)
+$$
+<<*>>=
+)clear all
+
+--S 11 of 19
+aa:=integrate(x^3/((a^2-x^2)^2),x)
+--R 
+--R
+--R          2    2      2    2     2
+--R        (x  - a )log(x  - a ) - a
+--R   (1)  --------------------------
+--R                   2     2
+--R                 2x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.174~~~~~$\displaystyle\int{\frac{dx}{x(a^2-x^2)^2}}$}
+$$\int{\frac{1}{x(a^2-x^2)^2}}=
+\frac{1}{2a^2(a^2-x^2)}+\frac{1}{2a^4}\ln\left(\frac{x^2}{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 12 of 19
+aa:=integrate(1/(x*(a^2-x^2)^2),x)
+--R 
+--R
+--R            2    2      2    2       2     2           2
+--R        (- x  + a )log(x  - a ) + (2x  - 2a )log(x) - a
+--R   (1)  ------------------------------------------------
+--R                             4 2     6
+--R                           2a x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.175~~~~~$\displaystyle\int{\frac{dx}{x^2(a^2-x^2)^2}}$}
+$$\int{\frac{1}{x^2(a^2-x^2)^2}}=
+-\frac{1}{a^4x}+\frac{x}{2a^4(a^2-x^2)}+
+\frac{3}{4a^5}\ln\left(\frac{a+x}{a-x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 13 of 19
+aa:=integrate(1/((a^2-x^2)^2),x)
+--R 
+--R
+--R          2    2                  2    2
+--R        (x  - a )log(x + a) + (- x  + a )log(x - a) - 2a x
+--R   (1)  --------------------------------------------------
+--R                              3 2     5
+--R                            4a x  - 4a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.176~~~~~$\displaystyle\int{\frac{dx}{x^3(a^2-x^2)^2}}$}
+$$\int{\frac{1}{x^3(a^2-x^2)^2}}=
+\frac{1}{2a^4x^2}+\frac{1}{2a^4(a^2-x^2)}+
+\frac{1}{a^6}\ln\left(\frac{x^2}{a^2-x^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 14 of 19
+aa:=integrate(1/(x^3*(a^2-x^2)^2),x)
+--R 
+--R
+--R             4     2 2      2    2       4     2 2            2 2    4
+--R        (- 2x  + 2a x )log(x  - a ) + (4x  - 4a x )log(x) - 2a x  + a
+--R   (1)  --------------------------------------------------------------
+--R                                   6 4     8 2
+--R                                 2a x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.177~~~~~$\displaystyle\int{\frac{dx}{(a^2-x^2)^n}}$}
+$$\int{\frac{1}{(a^2-x^2)^n}}=
+\frac{x}{2(n-1)a^2(a^2-x^2)^{n-1}}+
+\frac{2n-3}{(2n-2)a^2}\int{\frac{1}{(a^2-x^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 15 of 19
+aa:=integrate(1/((a^2-x^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++       1
+--I   (1)   |   ----------- d%L
+--R        ++     2     2 n
+--I             (a  - %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.178~~~~~$\displaystyle\int{\frac{x~dx}{(a^2-x^2)^n}}$}
+$$\int{\frac{x}{(a^2-x^2)^n}}=
+\frac{1}{2(n-1)(a^2-x^2)^{n-1}}
+$$
+<<*>>=
+)clear all
+
+--S 16 of 19
+aa:=integrate(x/((a^2-x^2)^n),x)
+--R 
+--R
+--R                    2    2
+--R                 - x  + a
+--R   (1)  --------------------------
+--R                           2    2
+--R                  n log(- x  + a )
+--R        (2n - 2)%e
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.179~~~~~$\displaystyle\int{\frac{dx}{x(a^2-x^2)^n}}$}
+$$\int{\frac{1}{x(a^2-x^2)^n}}=
+\frac{1}{2(n-1)a^2(a^2-x^2)^{n-1}}+
+\frac{1}{a^2}\int{\frac{1}{x(a^2-x^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 17 of 19
+aa:=integrate(1/(x*(a^2-x^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++         1
+--I   (1)   |   -------------- d%L
+--R        ++        2     2 n
+--I             %L (a  - %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.180~~~~~$\displaystyle\int{\frac{x^mdx}{(a^2-x^2)^n}}$}
+$$\int{\frac{x^m}{(a^2-x^2)^n}}=
+a^2\int\frac{x^{m-2}}{(a^2-x^2)^n}-
+\int{\frac{x^{m-2}}{(a^2-x^2)^{n-1}}}
+$$
+<<*>>=
+)clear all
+
+--S 18 of 19
+aa:=integrate(x^m/((a^2-x^2)^n),x)
+--R 
+--R
+--R           x       m
+--I         ++      %L
+--I   (1)   |   ----------- d%L
+--R        ++     2     2 n
+--I             (a  - %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.181~~~~~$\displaystyle\int{\frac{dx}{x^m(a^2-x^2)^n}}$}
+$$\int{\frac{1}{x^m(a^2-x^2)^n}}=
+\frac{1}{a^2}\int{\frac{1}{x^m(a^2-x^2)^{n-1}}}+
+\frac{1}{a^2}\int{\frac{1}{x^{m-2}(a^2-x^2)^n}}
+$$
+<<*>>=
+)clear all
+
+--S 19 of 19
+aa:=integrate(1/(x^m*(a^2-x^2)^n),x)
+--R 
+--R
+--R           x
+--R         ++         1
+--I   (1)   |   -------------- d%L
+--R        ++     m  2     2 n
+--I             %L (a  - %L )
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 p66
+\end{thebibliography}
+\end{document}
diff --git a/src/input/schaum9.input.pamphlet b/src/input/schaum9.input.pamphlet
new file mode 100644
index 0000000..6610811
--- /dev/null
+++ b/src/input/schaum9.input.pamphlet
@@ -0,0 +1,776 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/input schaum9.input}
+\author{Timothy Daly}
+\maketitle
+\eject
+\tableofcontents
+\eject
+\section{\cite{1}:14.182~~~~~$\displaystyle\int{\frac{dx}{\sqrt{x^2+a^2}}}$}
+$$\int{\frac{1}{\sqrt{x^2+a^2}}}=\ln\left(x+\sqrt{x^2+a^2}\right)$$
+$$\int{\frac{1}{\sqrt{x^2+a^2}}}=\sinh^{-1}\frac{x}{a}$$
+<<*>>=
+)spool schaum9.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 28
+aa:=integrate(1/(sqrt(x^2+a^2)),x)
+--R 
+--R
+--R               +-------+
+--R               | 2    2
+--R   (1)  - log(\|x  + a   - x)
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.183~~~~~$\displaystyle\int{\frac{x~dx}{\sqrt{x^2+a^2}}}$}
+$$\int{\frac{x}{\sqrt{x^2+a^2}}}=\sqrt{x^2+a^2}$$
+<<*>>=
+)clear all
+
+--S 2 of 28
+aa:=integrate(x/(sqrt(x^2+a^2)),x)
+--R 
+--R
+--R            +-------+
+--R            | 2    2     2    2
+--R        - x\|x  + a   + x  + a
+--R   (1)  -----------------------
+--R              +-------+
+--R              | 2    2
+--R             \|x  + a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.184~~~~~$\displaystyle
+\int{\frac{x^2~dx}{\sqrt{x^2+a^2}}}$}
+$$\int{\frac{x^2}{\sqrt{x^2+a^2}}}=
+\frac{x\sqrt{x^2+a^2}}{2}-\frac{a^2}{2}\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 3 of 28
+aa:=integrate(x^2/sqrt(x^2+a^2),x)
+--R 
+--R
+--R   (1)
+--R             +-------+                   +-------+
+--R          2  | 2    2      2 2    4      | 2    2
+--R       (2a x\|x  + a   - 2a x  - a )log(\|x  + a   - x)
+--R     + 
+--R                     +-------+
+--R            3    2   | 2    2      4     2 2
+--R       (- 2x  - a x)\|x  + a   + 2x  + 2a x
+--R  /
+--R        +-------+
+--R        | 2    2      2     2
+--R     4x\|x  + a   - 4x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.185~~~~~$\displaystyle
+\int{\frac{x^3~dx}{\sqrt{x^2+a^2}}}$}
+$$\int{\frac{x^3}{\sqrt{x^2+a^2}}}=
+\frac{(x^2+a^2)^{3/2}}{3}-a^2\sqrt{x^2+a^2}
+$$
+<<*>>=
+)clear all
+
+--S 4 of 28
+aa:=integrate(x^3/sqrt(x^2+a^2),x)
+--R 
+--R
+--R                               +-------+
+--R             5     2 3     4   | 2    2      6     2 4     4 2     6
+--R        (- 4x  + 5a x  + 6a x)\|x  + a   + 4x  - 3a x  - 9a x  - 2a
+--R   (1)  ------------------------------------------------------------
+--R                                 +-------+
+--R                        2     2  | 2    2       3     2
+--R                    (12x  + 3a )\|x  + a   - 12x  - 9a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.186~~~~~$\displaystyle\int{\frac{dx}{x\sqrt{x^2+a^2}}}$}
+$$\int{\frac{1}{x\sqrt{x^2+a^2}}}=
+-\frac{1}{a}\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 5 of 28
+aa:=integrate(1/(x*sqrt(x^2+a^2)),x)
+--R 
+--R
+--R               +-------+                 +-------+
+--R               | 2    2                  | 2    2
+--R        - log(\|x  + a   - x + a) + log(\|x  + a   - x - a)
+--R   (1)  ---------------------------------------------------
+--R                                 a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.187~~~~~$\displaystyle
+\int{\frac{dx}{x^2\sqrt{x^2+a^2}}}$}
+$$\int{\frac{1}{x^2\sqrt{x^2+a^2}}}=
+-\frac{\sqrt{x^2+a^2}}{a^2x}
+$$
+<<*>>=
+)clear all
+
+--S 6 of 28
+aa:=integrate(1/(x^2*sqrt(x^2+a^2)),x)
+--R 
+--R
+--R                  1
+--R   (1)  - ----------------
+--R            +-------+
+--R            | 2    2     2
+--R          x\|x  + a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.188~~~~~$\displaystyle\int{\frac{dx}{x^3\sqrt{x^2+a^2}}}$}
+$$\int{\frac{1}{x^3\sqrt{x^2+a^2}}}=
+-\frac{\sqrt{x^2+a^2}}{2a^2x^2}+\frac{1}{2a^3}
+\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 7 of 28
+aa:=integrate(1/(x^3*sqrt(x^2+a^2)),x)
+--R 
+--R
+--R   (1)
+--R            +-------+                   +-------+
+--R          3 | 2    2      4    2 2      | 2    2
+--R       (2x \|x  + a   - 2x  - a x )log(\|x  + a   - x + a)
+--R     + 
+--R              +-------+                   +-------+
+--R            3 | 2    2      4    2 2      | 2    2
+--R       (- 2x \|x  + a   + 2x  + a x )log(\|x  + a   - x - a)
+--R     + 
+--R                    +-------+
+--R            2    3  | 2    2        3     3
+--R       (2a x  + a )\|x  + a   - 2a x  - 2a x
+--R  /
+--R           +-------+
+--R       3 3 | 2    2      3 4     5 2
+--R     4a x \|x  + a   - 4a x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.189~~~~~$\displaystyle\int{\sqrt{x^2+a^2}}~dx$}
+$$\int{\sqrt{x^2+a^2}}=
+\frac{x\sqrt{x^2+a^2}}{2}+\frac{a^2}{2}\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 8 of 28
+aa:=integrate(sqrt(x^2+a^2),x)
+--R 
+--R
+--R   (1)
+--R               +-------+                   +-------+
+--R            2  | 2    2      2 2    4      | 2    2
+--R       (- 2a x\|x  + a   + 2a x  + a )log(\|x  + a   - x)
+--R     + 
+--R                     +-------+
+--R            3    2   | 2    2      4     2 2
+--R       (- 2x  - a x)\|x  + a   + 2x  + 2a x
+--R  /
+--R        +-------+
+--R        | 2    2      2     2
+--R     4x\|x  + a   - 4x  - 2a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.190~~~~~$\displaystyle\int{x\sqrt{x^2+a^2}}~dx$}
+$$\int{x\sqrt{x^2+a^2}}=
+\frac{(x^2+a^2)^{3/2}}{3}
+$$
+<<*>>=
+)clear all
+
+--S 9 of 28
+aa:=integrate(x*sqrt(x^2+a^2),x)
+--R 
+--R
+--R                               +-------+
+--R             5     2 3     4   | 2    2      6     2 4     4 2    6
+--R        (- 4x  - 7a x  - 3a x)\|x  + a   + 4x  + 9a x  + 6a x  + a
+--R   (1)  -----------------------------------------------------------
+--R                                 +-------+
+--R                        2     2  | 2    2       3     2
+--R                    (12x  + 3a )\|x  + a   - 12x  - 9a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.191~~~~~$\displaystyle
+\int{x^2\sqrt{x^2+a^2}}~dx$}
+$$\int{x^2\sqrt{x^2+a^2}}=
+\frac{x(x^2+a^2)^{3/2}}{4}-\frac{a^2x\sqrt{x^2+a^2}}{8}-
+\frac{a^4}{8}\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 10 of 28
+aa:=integrate(x^2*sqrt(x^2+a^2),x)
+--R 
+--R
+--R   (1)
+--R                       +-------+                           +-------+
+--R           4 3     6   | 2    2      4 4     6 2    8      | 2    2
+--R       ((8a x  + 4a x)\|x  + a   - 8a x  - 8a x  - a )log(\|x  + a   - x)
+--R     + 
+--R                                      +-------+
+--R           7      2 5      4 3    6   | 2    2       8      2 6      4 4     6 2
+--R     (- 16x  - 24a x  - 10a x  - a x)\|x  + a   + 16x  + 32a x  + 20a x  + 4a x
+--R  /
+--R                    +-------+
+--R         3      2   | 2    2       4      2 2     4
+--R     (64x  + 32a x)\|x  + a   - 64x  - 64a x  - 8a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.192~~~~~$\displaystyle
+\int{x^3\sqrt{x^2+a^2}}~dx$}
+$$\int{x^3\sqrt{x^2+a^2}}=
+\frac{(x^2+a^2)^{5/2}}{5}-\frac{a^2(x^2+a^2)^{3/2}}{3}
+$$
+<<*>>=
+)clear all
+
+--S 11 of 28
+aa:=integrate(x^3*sqrt(x^2+a^2),x)
+--R 
+--R
+--R   (1)
+--R                                                  +-------+
+--R             9      2 7     4 5      6 3      8   | 2    2       10       2 8
+--R       (- 48x  - 76a x  - 3a x  + 35a x  + 10a x)\|x  + a   + 48x   + 100a x
+--R     + 
+--R          4 6      6 4      8 2     10
+--R       35a x  - 40a x  - 25a x  - 2a
+--R  /
+--R                              +-------+
+--R          4       2 2      4  | 2    2        5       2 3      4
+--R     (240x  + 180a x  + 15a )\|x  + a   - 240x  - 300a x  - 75a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.193~~~~~$\displaystyle
+\int{\frac{\sqrt{x^2+a^2}}{x}}~dx$}
+$$\int{\frac{\sqrt{x^2+a^2}}{x}}=
+\sqrt{x^2+a^2}-a\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 12 of 28
+aa:=integrate(sqrt(x^2+a^2)/x,x)
+--R 
+--R
+--R   (1)
+--R            +-------+            +-------+
+--R            | 2    2             | 2    2
+--R       (- a\|x  + a   + a x)log(\|x  + a   - x + a)
+--R     + 
+--R          +-------+            +-------+              +-------+
+--R          | 2    2             | 2    2               | 2    2     2    2
+--R       (a\|x  + a   - a x)log(\|x  + a   - x - a) - x\|x  + a   + x  + a
+--R  /
+--R      +-------+
+--R      | 2    2
+--R     \|x  + a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.194~~~~~$\displaystyle
+\int{\frac{\sqrt{x^2+a^2}}{x^2}}~dx$}
+$$\int{\frac{\sqrt{x^2+a^2}}{x^2}}=
+-\frac{\sqrt{x^2+a^2}}{x}+\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 13 of 28
+aa:=integrate(sqrt(x^2+a^2)/x^2,x)
+--R 
+--R
+--R             +-------+           +-------+
+--R             | 2    2     2      | 2    2          2
+--R        (- x\|x  + a   + x )log(\|x  + a   - x) - a
+--R   (1)  --------------------------------------------
+--R                        +-------+
+--R                        | 2    2     2
+--R                      x\|x  + a   - x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.195~~~~~$\displaystyle
+\int{\frac{\sqrt{x^2+a^2}}{x^3}}~dx$}
+$$\int{\frac{\sqrt{x^2+a^2}}{x^3}}=
+-\frac{\sqrt{x^2+a^2}}{2x^2}-\frac{1}{2a}
+\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 14 of 28
+aa:=integrate(sqrt(x^2+a^2)/x^3,x)
+--R 
+--R
+--R   (1)
+--R              +-------+                   +-------+
+--R            3 | 2    2      4    2 2      | 2    2
+--R       (- 2x \|x  + a   + 2x  + a x )log(\|x  + a   - x + a)
+--R     + 
+--R            +-------+                   +-------+
+--R          3 | 2    2      4    2 2      | 2    2
+--R       (2x \|x  + a   - 2x  - a x )log(\|x  + a   - x - a)
+--R     + 
+--R                    +-------+
+--R            2    3  | 2    2        3     3
+--R       (2a x  + a )\|x  + a   - 2a x  - 2a x
+--R  /
+--R           +-------+
+--R         3 | 2    2        4     3 2
+--R     4a x \|x  + a   - 4a x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.196~~~~~$\displaystyle\int{\frac{dx}{(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{1}{(x^2+a^2)^{3/2}}}=
+\frac{x}{a^2\sqrt{x^2+a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 15 of 28
+aa:=integrate(1/(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R                    1
+--R   (1)  - ---------------------
+--R            +-------+
+--R            | 2    2     2    2
+--R          x\|x  + a   - x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.197~~~~~$\displaystyle
+\int{\frac{x~dx}{(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{x}{(x^2+a^2)^{3/2}}}=
+\frac{-1}{\sqrt{x^2+a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 16 of 28
+aa:=integrate(x/(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R             +-------+
+--R             | 2    2
+--R            \|x  + a   - x
+--R   (1)  ---------------------
+--R          +-------+
+--R          | 2    2     2    2
+--R        x\|x  + a   - x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.198~~~~~$\displaystyle
+\int{\frac{x^2dx}{(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{x^2}{(x^2+a^2)^{3/2}}}=
+\frac{-x}{\sqrt{x^2+a^2}}+\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 17 of 28
+aa:=integrate(x^2/(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R             +-------+                +-------+
+--R             | 2    2     2    2      | 2    2          2
+--R        (- x\|x  + a   + x  + a )log(\|x  + a   - x) + a
+--R   (1)  -------------------------------------------------
+--R                        +-------+
+--R                        | 2    2     2    2
+--R                      x\|x  + a   - x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.199~~~~~$\displaystyle
+\int{\frac{x^3dx}{(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{x^3}{(x^2+a^2)^{3/2}}}=
+\sqrt{x^2+a^2}+\frac{a^2}{\sqrt{x^2+a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 18 of 28
+aa:=integrate(x^3/(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R                       +-------+
+--R             3     2   | 2    2      4     2 2     4
+--R        (- 2x  - 4a x)\|x  + a   + 2x  + 5a x  + 2a
+--R   (1)  --------------------------------------------
+--R                         +-------+
+--R                 2    2  | 2    2      3     2
+--R              (2x  + a )\|x  + a   - 2x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.200~~~~~$\displaystyle
+\int{\frac{dx}{x(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{1}{x(x^2+a^2)^{3/2}}}=
+\frac{1}{a^2\sqrt{x^2+a^2}}-
+\frac{1}{a^3}\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 19 of 28
+aa:=integrate(1/(x*(x^2+a^2)^(3/2)),x)
+--R 
+--R
+--R   (1)
+--R            +-------+                +-------+
+--R            | 2    2     2    2      | 2    2
+--R       (- x\|x  + a   + x  + a )log(\|x  + a   - x + a)
+--R     + 
+--R          +-------+                +-------+              +-------+
+--R          | 2    2     2    2      | 2    2               | 2    2
+--R       (x\|x  + a   - x  - a )log(\|x  + a   - x - a) - a\|x  + a   + a x
+--R  /
+--R         +-------+
+--R      3  | 2    2     3 2    5
+--R     a x\|x  + a   - a x  - a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.201~~~~~$\displaystyle
+\int{\frac{dx}{x^2(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{1}{x^2(x^2+a^2)^{3/2}}}=
+-\frac{\sqrt{x^2+a^2}}{a^4x}-\frac{x}{a^4\sqrt{x^2+a^2}}
+$$
+<<*>>=
+)clear all
+
+--S 20 of 28
+aa:=integrate(1/(x^2*(x^2+a^2)^(3/2)),x)
+--R 
+--R
+--R                           1
+--R   (1)  - -----------------------------------
+--R                      +-------+
+--R             3    2   | 2    2      4     2 2
+--R          (2x  + a x)\|x  + a   - 2x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.202~~~~~$\displaystyle
+\int{\frac{dx}{x^3(x^2+a^2)^{3/2}}}$}
+$$\int{\frac{1}{x^3(x^2+a^2)^{3/2}}}=
+\frac{-1}{2a^2x^2\sqrt{x^2+a^2}}-
+\frac{3}{2a^4\sqrt{x^2+a^2}}+
+\frac{3}{2a^5}\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 21 of 28
+aa:=integrate(1/(x^3*(x^2+a^2)^(3/2)),x)
+--R 
+--R
+--R   (1)
+--R                       +-------+                              +-------+
+--R            5     2 3  | 2    2       6      2 4     4 2      | 2    2
+--R       ((12x  + 9a x )\|x  + a   - 12x  - 15a x  - 3a x )log(\|x  + a   - x + a)
+--R     + 
+--R                           +-------+
+--R                5     2 3  | 2    2       6      2 4     4 2
+--R         ((- 12x  - 9a x )\|x  + a   + 12x  + 15a x  + 3a x )
+--R      *
+--R              +-------+
+--R              | 2    2
+--R         log(\|x  + a   - x - a)
+--R     + 
+--R                             +-------+
+--R             4     3 2    5  | 2    2         5      3 3     5
+--R       (12a x  + 7a x  + a )\|x  + a   - 12a x  - 13a x  - 3a x
+--R  /
+--R                     +-------+
+--R        5 5     7 3  | 2    2      5 6      7 4     9 2
+--R     (8a x  + 6a x )\|x  + a   - 8a x  - 10a x  - 2a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.203~~~~~$\displaystyle\int{(x^2+a^2)^{3/2}}~dx$}
+$$\int{(x^2+a^2)^{3/2}}=
+\frac{x(x^2+a^2)^{3/2}}{4}+\frac{3a^2x\sqrt{x^2+a^2}}{8}+
+\frac{3}{8}a^4\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 22 of 28
+aa:=integrate((x^2+a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                           +-------+                              +-------+
+--R              4 3      6   | 2    2       4 4      6 2     8      | 2    2
+--R       ((- 24a x  - 12a x)\|x  + a   + 24a x  + 24a x  + 3a )log(\|x  + a   - x)
+--R     + 
+--R                                         +-------+
+--R             7      2 5      4 3     6   | 2    2       8      2 6      4 4
+--R       (- 16x  - 56a x  - 42a x  - 5a x)\|x  + a   + 16x  + 64a x  + 68a x
+--R     + 
+--R          6 2
+--R       20a x
+--R  /
+--R                    +-------+
+--R         3      2   | 2    2       4      2 2     4
+--R     (64x  + 32a x)\|x  + a   - 64x  - 64a x  - 8a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.204~~~~~$\displaystyle\int{x(x^2+a^2)^{3/2}}~dx$}
+$$\int{x(x^2+a^2)^{3/2}}=\frac{(x^2+a^2)^{5/2}}{5}$$
+<<*>>=
+)clear all
+
+--S 23 of 28
+aa:=integrate(x*(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                                  +-------+
+--R             9      2 7      4 5      6 3     8   | 2    2       10      2 8
+--R       (- 16x  - 52a x  - 61a x  - 30a x  - 5a x)\|x  + a   + 16x   + 60a x
+--R     + 
+--R          4 6      6 4      8 2    10
+--R       85a x  + 55a x  + 15a x  + a
+--R  /
+--R                           +-------+
+--R         4      2 2     4  | 2    2       5       2 3      4
+--R     (80x  + 60a x  + 5a )\|x  + a   - 80x  - 100a x  - 25a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.205~~~~~$\displaystyle\int{x^2(x^2+a^2)^{3/2}}~dx$}
+$$\int{x^2(x^2+a^2)^{3/2}}=
+\frac{x(x^2+a^2)^{5/2}}{6}-\frac{a^2x(x^2+a^2)^{3/2}}{24}-
+\frac{a^4x\sqrt{x^2+a^2}}{16}-
+\frac{a^6}{16}\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 24 of 28
+aa:=integrate(x^2*(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                                      +-------+
+--R               6 5      8 3      10   | 2    2       6 6       8 4      10 2
+--R           (96a x  + 96a x  + 18a  x)\|x  + a   - 96a x  - 144a x  - 54a  x
+--R         + 
+--R               12
+--R           - 3a
+--R      *
+--R              +-------+
+--R              | 2    2
+--R         log(\|x  + a   - x)
+--R     + 
+--R                                                                 +-------+
+--R              11       2 9       4 7       6 5      8 3     10   | 2    2
+--R       (- 256x   - 832a x  - 912a x  - 404a x  - 68a x  - 3a  x)\|x  + a
+--R     + 
+--R           12       2 10        4 8       6 6       8 4      10 2
+--R       256x   + 960a x   + 1296a x  + 772a x  + 198a x  + 18a  x
+--R  /
+--R                                  +-------+
+--R           5        2 3       4   | 2    2         6        2 4       4 2      6
+--R     (1536x  + 1536a x  + 288a x)\|x  + a   - 1536x  - 2304a x  - 864a x  - 48a
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.206~~~~~$\displaystyle\int{x^3(x^2+a^2)^{3/2}}~dx$}
+$$\int{x^3(x^2+a^2)^{3/2}}=
+\frac{(x^2+a^2)^{7/2}}{7}-\frac{a^2(x^2+a^2)^{5/2}}{5}
+$$
+<<*>>=
+)clear all
+
+--S 25 of 28
+aa:=integrate(x^3*(x^2+a^2)^(3/2),x)
+--R 
+--R
+--R   (1)
+--R                   13        2 11        4 9       6 7       8 5       10 3
+--R             - 320x   - 1072a x   - 1240a x  - 467a x  + 112a x  + 105a  x
+--R           + 
+--R                12
+--R             14a  x
+--R      *
+--R          +-------+
+--R          | 2    2
+--R         \|x  + a
+--R     + 
+--R           14        2 12        4 10       6 8      8 6       10 4      12 2
+--R       320x   + 1232a x   + 1736a x   + 973a x  + 21a x  - 175a  x  - 49a  x
+--R     + 
+--R           14
+--R       - 2a
+--R  /
+--R                                            +-------+
+--R             6        2 4       4 2      6  | 2    2         7        2 5
+--R       (2240x  + 2800a x  + 840a x  + 35a )\|x  + a   - 2240x  - 3920a x
+--R     + 
+--R              4 3       6
+--R       - 1960a x  - 245a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.207~~~~~$\displaystyle
+\int{\frac{(x^2+a^2)^{3/2}}{x}}~dx$}
+$$\int{\frac{(x^2+a^2)^{3/2}}{x}}=
+\frac{(x^2+a^2)^{3/2}}{3}+a^2\sqrt{x^2+a^2}-
+a^3\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 26 of 28
+aa:=integrate((x^2+a^2)^(3/2)/x,x)
+--R 
+--R
+--R   (1)
+--R                         +-------+                      +-------+
+--R              3 2     5  | 2    2       3 3     5       | 2    2
+--R       ((- 12a x  - 3a )\|x  + a   + 12a x  + 9a x)log(\|x  + a   - x + a)
+--R     + 
+--R                       +-------+                      +-------+
+--R            3 2     5  | 2    2       3 3     5       | 2    2
+--R       ((12a x  + 3a )\|x  + a   - 12a x  - 9a x)log(\|x  + a   - x - a)
+--R     + 
+--R                                +-------+
+--R            5      2 3      4   | 2    2      6      2 4      4 2     6
+--R       (- 4x  - 19a x  - 12a x)\|x  + a   + 4x  + 21a x  + 21a x  + 4a
+--R  /
+--R                  +-------+
+--R         2     2  | 2    2       3     2
+--R     (12x  + 3a )\|x  + a   - 12x  - 9a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.208~~~~~$\displaystyle
+\int{\frac{(x^2+a^2)^{3/2}}{x^2}}~dx$}
+$$\int{\frac{(x^2+a^2)^{3/2}}{x^2}}=
+-\frac{(x^2+a^2)^{3/2}}{x}+\frac{3x\sqrt{x^2+a^2}}{2}+
+\frac{3}{2}a^2\ln\left(x+\sqrt{x^2+a^2}\right)
+$$
+<<*>>=
+)clear all
+
+--S 27 of 28
+aa:=integrate((x^2+a^2)^{3/2}/x^2,x)
+--R 
+--R
+--R   (1)
+--R                          +-------+                       +-------+
+--R              2 3     4   | 2    2       2 4     4 2      | 2    2
+--R       ((- 12a x  - 3a x)\|x  + a   + 12a x  + 9a x )log(\|x  + a   - x)
+--R     + 
+--R                              +-------+
+--R            5     2 3     4   | 2    2      6     2 4     4 2     6
+--R       (- 4x  - 3a x  + 4a x)\|x  + a   + 4x  + 5a x  - 3a x  - 2a
+--R  /
+--R                  +-------+
+--R        3     2   | 2    2      4     2 2
+--R     (8x  + 2a x)\|x  + a   - 8x  - 6a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+@
+
+\section{\cite{1}:14.209~~~~~$\displaystyle
+\int{\frac{(x^2+a^2)^{3/2}}{x^3}}~dx$}
+$$\int{\frac{(x^2+a^2)^{3/2}}{x^3}}=
+-\frac{(x^2+a^2)^{3/2}}{2x^2}+\frac{3}{2}\sqrt{x^2+a^2}-
+\frac{3}{2}a\ln\left(\frac{a+\sqrt{x^2+a^2}}{x}\right)
+$$
+<<*>>=
+)clear all
+
+--S 28 of 28
+aa:=integrate((x^2+a^2)^(3/2)/x^3,x)
+--R 
+--R
+--R   (1)
+--R                           +-------+                       +-------+
+--R                4     3 2  | 2    2         5     3 3      | 2    2
+--R       ((- 12a x  - 3a x )\|x  + a   + 12a x  + 9a x )log(\|x  + a   - x + a)
+--R     + 
+--R                         +-------+                       +-------+
+--R              4     3 2  | 2    2         5     3 3      | 2    2
+--R       ((12a x  + 3a x )\|x  + a   - 12a x  - 9a x )log(\|x  + a   - x - a)
+--R     + 
+--R                              +-------+
+--R            5     2 3     4   | 2    2      6     2 4     4 2    6
+--R       (- 8x  - 2a x  + 3a x)\|x  + a   + 8x  + 6a x  - 3a x  - a
+--R  /
+--R                   +-------+
+--R        4     2 2  | 2    2      5     2 3
+--R     (8x  + 2a x )\|x  + a   - 8x  - 6a x
+--R                                          Type: Union(Expression Integer,...)
+--E 
+
+)spool
+)lisp (bye)
+@
+
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} Spiegel, Murray R.
+{\sl Mathematical Handbook of Formulas and Tables}\\
+Schaum's Outline Series McGraw-Hill 1968 p67-68
+\end{thebibliography}
+\end{document}



