\start
Date: Fri, 04 Mar 2005 01:58:34 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#112 Returned type of compiled function] 

??changed:
-
This following shows that functions in Axiom have types and a domain for functions may be associated with an identifier.

\begin{axiom}
dom:=(INT->INT)
f:dom
f x == x-1
\end{axiom}

However, when the function is compiled, the returned type displayed may not agree with its declared type or even its apparent compiled type and depends on the input!

\begin{axiom}
f 3
f(-3)
\end{axiom}

This has nothing to do with the declaration of <code>f</code>.

\begin{axiom}
f(x:INT):INT==x-1
f(3)
f(-3)
\end{axiom}

Not even:

\begin{axiom}
f(x:INT):INT==(x-1)::INT
f(3)
f(-3)
\end{axiom}
Or even:

\begin{axiom}
g(x:INT):NNI == 2^(sign(x)*x)::NNI
g 3
\end{axiom}

The following deliberate "error" shows the Interpreter always assumes <code>3</code> is of type <code>PositiveInteger</code>.

\begin{axiom}
f 3
f -3
\end{axiom}


Compare the type returned below for <code>g 1</code>, the retraction to <code>PositiveInteger</code> is not done.

\begin{axiom}
g(x:INT): FRAC INT == 1/x
g 1
\end{axiom}

The difference may perhaps be due to the fact that the data structure of <code>FRAC INT</code> is very different from <code>INT</code>, whereas the data structure of <code>INT</code> is identical to that of <code>PI</code>. So the explanation that the reason <code>1/1</code> is not retracted because <code>retract</code> is not always possible is not the full story.

\start
Date: Fri, 04 Mar 2005 02:52:09 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#114 Maps on Function crash ] Save button not	working

This problem does not occur on the NAG version.

\begin{axiom}
dom:=(INT->INT)
g(f:dom):dom== x+->(f(x))^2
p(x:INT):INT == x-1
\end{axiom}

The next line crashes Axiom. (Here the crash is indicated by not showing the result for <code>q</code> which should be something like <code>theMap(LAMBDA_ibs3ze_708.174)</code> (from NAG version)

\begin{axiom}
q:= g p
\end{axiom}

Below is the transcript for the NAG version:

<pre>
G82322 (1) -> dom:= (INT->INT)

   (1)  (Integer -> Integer)
                                                                 Type: Domain
G82322 (2) -> g(f:dom):dom== x+->(f(x))^2
   Function declaration g : (Integer -> Integer) -> (Integer -> Integer
      ) has been added to workspace.
                                                                   Type: Void
G82322 (3) -> p(x:INT):INT==x-1
   Function declaration p : Integer -> Integer has been added to 
      workspace.
                                                                   Type: Void
G82322 (4) -> q:= g p
   Compiling function p with type Integer -> Integer 
   Compiling function g with type (Integer -> Integer) -> (Integer -> 
      Integer) 
</pre>
<code>+++ |*1;g;1;G82322| redefined</code>
<pre>
   (4)  theMap(LAMBDA_ibs3ze_708,174)
                                                   Type: (Integer -> Integer)
G82322 (5) -> q 3

   (5)  4
                                                        Type: PositiveInteger
</pre>

\start
Date: Fri, 04 Mar 2005 02:47:37 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#114 Maps on Function crash] 

This problem does not occur on the NAG version.

\begin{axiom}
dom:=(INT->INT)
g(f:dom):dom== x+->(f(x))^2
p(x:INT):INT == x-1
\end{axiom}

The next line crashes Axiom. (Here the crash is indicated by not showing the result for <code>q</code> which should be something like <code>theMap(LAMBDA_ibs3ze_708.174</code>) (from NAG version)

\begin{axiom}
q:= g p
\end{axiom}

Below is the transcript for the NAG version:

<pre>
G82322 (1) -> dom:= (INT->INT)

   (1)  (Integer -> Integer)
                                                                 Type: Domain
G82322 (2) -> g(f:dom):dom== x+->(f(x))^2
   Function declaration g : (Integer -> Integer) -> (Integer -> Integer
      ) has been added to workspace.
                                                                   Type: Void
G82322 (3) -> p(x:INT):INT==x-1
   Function declaration p : Integer -> Integer has been added to 
      workspace.
                                                                   Type: Void
G82322 (4) -> q:= g p
   Compiling function p with type Integer -> Integer 
   Compiling function g with type (Integer -> Integer) -> (Integer -> 
      Integer) 
</pre>
<code>+++ |*1;g;1;G82322| redefined</code>
<pre>
   (4)  theMap(LAMBDA_ibs3ze_708,174)
                                                   Type: (Integer -> Integer)
G82322 (5) -> q 3

   (5)  4
                                                        Type: PositiveInteger
</pre>

\start
Date: Fri, 04 Mar 2005 05:18:31 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#114 Map on Functions crash] Here is one way that works

We can avoid the use of an anonymous function and use
function composition to define the functional 'g' as follows:
\begin{axiom}
)clear all
dom ==> INT -> INT

g(f:dom):dom ==
  function(x^2,sq,x)
  sq * f

p(x:INT):INT == x-1

q := g p

q 3
\end{axiom}

\start
Date: Fri, 04 Mar 2005 06:57:30 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Maxima] 

\begin{axiom}
)abbrev package TEST1 Test1
++ Description: various Currying operations.
Test1(A:SetCategory):_
  MPcat == MPdef where
    B   ==>  Integer
 
    MPcat ==  with
        g:(A->B) -> (A ->B)
    MPdef == add
 
        MappingPackageInternalHacks3(A, B, B)
 
        fab:  A -> B
        sq: B -> B

        sq(x)== (x*x)$B
        g(fab) == comp(sq,fab,#1)
\end{axiom}

\begin{axiom}
p(x:INT):INT == x-1
p 4
\end{axiom}


\begin{axiom}
q := g p
q 4
\end{axiom}

\start
Date: Fri, 04 Mar 2005 13:30:43 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#96 no text before Axiom command in comment] Bug fixed

I modified the regular expressions that scripts ReplaceInlineAxiom.py and
ReplaceInlineReduce.py use to search for commands embedded in the text.
The previous version used a negative look-behind for the ! escape character
in combination the start of string ^ character. This test failed if there
was no character preceeding the first !\begin{axiom} or !\begin{reduce}.
I simply removed the start of line requirement. As a result \\begin it
is also now possible to indent equations properly in structured text.

* See SandBox for an example of the use of such indentation.

* Comments that start with commands should now also work.

* Let me know if this causes any unexpected behaviour.

* I am monitoring SandBox and a few other pages to see
  what sort of problems new users have when then experiment
  with entering commands. I think/hope that the web site is
  getting a little easier to understand for the novice.

\start
Date: Fri, 04 Mar 2005 14:54:49 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [FunctionalMapping] 

++added:
This simple package defines an function g which operates on some
function with domain from set and co-domain from Ring and returns
the "square" of that function.

Test1(A:SetCategory,B:Ring):_
    with  g:(A->B) -> (A ->B) == add
        MappingPackage3(A, B, B)
        -- which provides the operator * for functional composition
        sq(x:B):B == (x*x)$B
        -- then all we need is multiplication from some Ring
        g(f:A->B) == sq*f

++added:
The call to 'MapplingPackage3' to construct a functional composition
of the right signature seems quite novel to me. I learned this from
reading MappingPackage3 in 'source/algebra/mappkg.spad'

Here we apply g to a function over the Ring Integer

??changed:
-p(x:INT):INT == x-1
-p 4
pINT(x:INT):INT == x-1
qINT := g pINT
qINT 5

??changed:
-
This own is over the Ring Float

??changed:
-q := g p
-q 4
pFLOAT(x:FLOAT):FLOAT == x-1
qFLOAT := g pFLOAT
qFLOAT(5.1)

\start
Date: Fri, 4 Mar 2005 22:45:33 +0200
From: Vladimir Bondarenko
To: list
Subject: [Q] Windows next version executable ?

Hi *,

Right away I am much busy with Maple/MuPAD/Mathematica but I plan
to resume further AXIOM automated testing as soon as I could do.
This said about the overload, I already miss AXIOM... and AXIOM
developers ;)

It was very useful and helpful to have a ready-to-use Windows
executable. (By the way, there is a very user-friendly feature
in AXIOM by November 30, 2004, you can set the cursor at the
prompt and click with the right button, and see the buffer
pasted. It was lost in the next 2 releases, what a pity!)

I was wondering is it possible to have the Windows executable
available for the most recent release?

Thanks in advance for the comments!

\start
Date: Fri, 04 Mar 2005 15:26:48 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [FunctionalMapping] 

And over the Ring of 2x2 matrices of rational numbers
\begin{axiom}
MAT:=SquareMatrix(2,Fraction Integer)
pMAT(x:MAT):MAT == x-1
qMAT := g pMAT
s:=matrix [[1/2,2/3],[3/4,1]]
qMAT s
\end{axiom}

\start
Date: Fri, 4 Mar 2005 17:25:26 -0500
From: Tim Daly
To: Vladimir Bondarenko
Subject: Re: [Q] Windows next version executable ?

Vladimer,

The algebra, except for a few bug fixes, is unchanged so the windows
port is waiting for other parts since the browser and the graphics do
not yet work.  I'm working on a port of these important pieces. 
Portable GUI programs are challenging so the work is going rather 
more slowly than I'd like but progress is happening here.

We also need a working port on several other platforms, such as the
MAC, where Axiom does not yet run. Pierre and Chuck have made some
strides in this area.

\start
Date: Fri, 04 Mar 2005 17:14:19 -0600
From: MathAction (billpage)
To: MathAction
Subject: [#115 color highlighting of Axiom compiler output] (new) 

I have made some simple changes to improve how the output of
the SPAD compiler is displayed on MathAction. Axiom commands
and SPAD code are still highlighted in lightgreen. But the
messages generated by compiler are now showed with a lightgray
background. Like this:
\begin{axiom}
)abbrev package SVT1 SymbolVariableTest1
SymbolVariableTest1(): Spec == Imp where
  Spec ==  with 
    symVar1:() -> Boolean
  Imp == add
    symVar1()==
      y: Variable(y) := y
      x: Variable(y) := y
      t: Boolean := (x = y)
\end{axiom}

I think this makes the page easier to read. Since the compiler
is quite verbose, without this color coding it was sometimes
hard to distinguish the input SPAD code from the compiler
output.

The FunctionalMapping page contains another example.

\start
Date: Fri, 4 Mar 2005 21:15:02 -0500 
From: Bill Page
To: Vladimir Bondarenko
Subject: RE: [Q] Windows next version executable ?

On Friday, March 04, 2005 3:46 PM Vladimir Bondarenko wrote:

> ...
> (By the way, there is a very user-friendly feature in
> AXIOM by November 30, 2004, you can set the cursor at the
> prompt and click with the right button, and see the buffer
> pasted. It was lost in the next 2 releases, what a pity!)

So far as I know, nothing intentional changed in the Windows
version of Axiom since it's first release that would affect
how the cursor and right button work.

In fact, (at least under Windows XP) these features are
controlled by Properties associated with the Windows shortcut
that is used to start Axiom. If you start from an icon on
the desktop, you can point at the icon with the mouse, right-
click, and then click Properties and then Options. Check the
box that says 'Quick Edit mode'.

If you start from the Start menu, you can also right-click
and choose Properties on the Axiom menu item.

If you already have the Axiom window open, you can also
change this setting by right-clicking on the top bar, click
Properties and put a checkmark beside 'Quck Edit mode'.
Windows will ask you if you want to make the changes permenant.

If there was in diference between the different versions
of Axiom for Windows, it might be due to the installer
program making random changes to these settings. But it was
not by design. It might also depend on the defaults for
your particular system and/or the specific version of Windows
that you are using.

> I was wondering is it possible to have the Windows
> executable available for the most recent release?

Version 0.1.4 on http://page.axiom-developer.org/zope/mathaction
is up to date with the February linux version except for the
missing graphics and hypertex functionality (still missing :(

\start
Date: Fri, 04 Mar 2005 21:58:50 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#116 Hyperdoc links and spad files] (new) 

I was not able to find, under hyperdoc, certain spad files because their names were changed. Example: DIRPROD.spad used to be vector.spad and MAPHACK3.spad used to be mappkg.spad. Both files are still in their original names. New users will not be able to figure out the change in names. Unfortunately, browsing in Hyperdoc did not find DIRPROD or Mapping* (this is Fedora FC2, Feb 2005 version compiled). Please fix this (be careful that any change in file names will affect compiling of other spad files). 

Perhaps the change in file names is unintentional, by a systemwide assumption that the source file of a constructor xxx is xxx.spad (where xxx is the abbreviation). This is not true of course because one spad file can implement many constructors.

\start
Date: Fri, 04 Mar 2005 23:37:43 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#117 Inheritance of Monoid Structure in Direct Product] 


Does any one know why the direct product D of two (or more) copies of a monoid R is not implemented as a monoid in Axiom?
The scalar multiplication is implemented coordinatewise, the identity element is defined, but the monoid product between elements of D is not, and the domain is not declared as a monoid. On the other hand, if R is a ring, then the direct product is a ring. See <code>vector.spad</code>.

\begin{axiom}
NNI has Monoid
NNI2:= DirectProduct(2,NNI)
NNI2 has Monoid
a:NNI2:=directProduct([3,5])
3*a
b:NNI2:= 1
1*a
b*a
c:NNI2:=directProduct([1,1])
c*a
d:NNI2:=directProduct([1,2])
d*a
DirectProduct(2, INT) has Ring
\end{axiom}

Note how <I>smart</I> the Interpreter is to recognize that <code>c</code> is really a scalar.

\start
Date: Fri, 04 Mar 2005 23:51:56 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#114 Map on Functions crash] anonymous function

Thanks to both contributions and guides to use composition. However,
this is a bug still since the original code works under the NAG
version. We should figure out why the open source version breaks
down. Afterall, anonymous functions are convenience that the system
should be able to handle by assigning intermediate variables
automatically.

\start
Date: Sat, 5 Mar 2005 14:07:27 -0500
From: Tim Daly
To: Camm Maguire
Subject: run-process

Camm,

It appears that run-process is commented out in the linux version.
Any idea why? I need this function because I'm using run-process
to start the new lisp-based browser.

\start
Date: Mon, 07 Mar 2005 09:00:53 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#118 Quaternion restriction] (new) 

I've been checking quaternion support in Axiom. And I've found out
that it is a bit too restricted. More exactly it seems to be aimed on
Hammiltonian quaternions only:

\begin{axiom}
q := quatern(0,1,0,0)
q**2
\end{axiom}

This is fine over the reals. But only there. On any field with bigger
group of square classes (e.g. rationals, algebraic rationals,...) we
have far more quaternion algebras.

Namely for any two suare clases $a$, $b$ there exist a quaternion
algebra with $i^2 = a$ and $j^2 = b$. Is there a way to declare such a
quaternions in Axiom?

\start
Date: Mon, 7 Mar 2005 16:45:12 +0100
From: Frederic Lehobey
To: list
Subject: [Off topic] Conference announcement (call for contributions)

Dear Axiom developers,

Two years ago, Tim came to France to give at a free software
conference a lecture on the next 30 years for Axiom:
http://2003.rencontresmondiales.org/program/view_topic.php?topic_id=5

So much has been achieved for Axiom since then!

I am involved this year in the organisation of the same topic Tim
attended (libre software for scientific research) in this conference
(see below).  As Axiom is now feature full and compiling on Windows,
do not you think it would be worth giving there (in Dijon, this year)
an other lecture.

  (By the way if you know other free software that would be relevant
for the call for contributions, feel free to send it to them.)

Thanks,
Frederic Lehobey

-----------------------------------------------------------------------
Call for contributions to libre software for scientific research topic
of libre software meeting 2005 (in Dijon, France, July 5th to 9th).
-----------------------------------------------------------------------
The Libre Software Meeting is a yearly free software event that takes
place in France since 2000 (originating from Bordeaux, this event is
driven by volunteers from the free software community).  The LSM 2005
takes place this year in Dijon, from July 5th to 9th:

  http://www.rencontresmondiales.org/

The language of the lectures of almost all technical sessions is
English while some of the non-technical sessions open to a wider
and local public may be in French (check on the web site).

This message is a call for contributions for the "libre
software for scientific research" session of the LSM.
http://www.rencontresmondiales.org/sections/conference/recherche_science

The goal of this topic is to highlight free software that is currently
used in scientific research or that, by its quality, deserves a wider
adoption.  The targeted audience are researchers willing to share
their experience with respect to scientific free software and
developers of these projects.  We will provide much attention to
interdisciplinary projects.

There is no programme committee (it is not a scientific conference)
and selection process is expected to remain as lightweight as
possible.  If you want to help in organising the event, you are
welcome.

Talks, in English, are expected to last around 45 minutes.  Printable
version of the lecture are not mandatory but would be very
appreciated.

If you are considering coming and preparing a talk, please send us an
email at lehobey@free.fr before the end of March 2005.

Feel free to send this mail wherever or to whom you fill it is
relevant (but beware of spamming people).

Please consider the opportunity of the libre software meeting (and its
infrastructure) to a have a gathering of the developers of the
free software for scientific research you are involved with.  We can
help you in such a matter.

Best regards,
Dr Frederic Lehobey
(RMLL 2005 volunteer for libre software for scientific research topic)

\start
Date: Mon, 07 Mar 2005 10:34:01 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#118 Quaternion restriction] 

>From the description of quatern on in section
*9.64 Quaternion*, page 734 of the
"Axiom Book":http://page.axiom-developer.org/zope/Plone/refs/books/axiom-book2.pdf#751
I think that what you want is not possible with this domain.
But since the quaternions can be thought of as a Clifford algebra,
please refer to section
*9.10.2 The Quaternion Numbers as a Clifford Algebra*,
page 483 of 
"the Book":http://page.axiom-developer.org/zope/Plone/refs/books/axiom-book2.pdf#500.
For example
\begin{axiom}
K := Fraction Polynomial Integer
m := matrix [ [a,0],[0,b] ]
H := CliffordAlgebra(2, K, quadraticForm m)
i: H := e(1)
j: H := e(2)
k: H := i * j
i^2
j^2
k^2
\end{axiom}

\start
Date: Mon, 07 Mar 2005 11:01:59 -0600
From: MathAction (anonimo)
To: MathAction
Subject: [#113 Compile fail on Suse 9.2] OK

<<GCLOPTS>>=
GCLOPTS="--enable-vssize=65536*2 --enable-locbfd --disable-dynsysbfd --disable-statsysbfd --enable-maxpage=128*1024"
@

compile is OK on Suse 9.2

Thanks
Domenico

\start
Date: Mon, 07 Mar 2005 13:44:35 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [AxiomProblems] Problem with coefficients


[[I had a typo in the previous case]]
I feel there is a problem with 'coefficients' operator for MultivariatePolynomial domain. Let's examine a simple case:
\begin{axiom}
Dg :=  [p3 - 3*p2 + 3*p1 - p0,3*p2 - 6*p1 + 3*p0,3*p1 - 3*p0,p0]
\end{axiom}
Now calculate coefficients in two ways:
\begin{axiom}
map(coefficients, Dg::List MPOLY([p0,p1,p2,p3],?))
\end{axiom}
and
\begin{axiom}
map(coefficients, Dg::List MPOLY([p3,p2,p1,p0],?))
\end{axiom}
As you see the list are all reversed, but... they were not padded with zeros. While in my opinion they should be - we have a given order of variables, and alone 1 in the last list suggests that this is a coefficient of p3 while it isn't. It is a coefficient of p0.

\start
Date: Mon, 07 Mar 2005 13:41:47 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [AxiomProblems] Problem with coefficients

I feel there is a problem with 'coefficients' operator for MultivariatePolynomial domain. Let's examine a simple case:
\begin{axiom}
Dg :=  [p3 - 3p2 + 3p1 - p0,3p2 - 6p1 + 3p0,3p1 - 3p0,p0]
\end{axiom}
Now calculate coefficients in two ways:
\begin{axiom}
map(coefficients, Dg::List MPOLY([p0,p1,p2,p3],?))
\end{axiom}
and
\begin{axiom}
map(coefficients, Dg::List MPOLY([p3,p2,p1,p0],?))
\end{axiom}
As you see the list are all reversed, but... they were not padded with zeros. While in my opinion they should be - we have a given order of variables, and alone 1 in the last list suggests that this is a coefficient of p3 while it isn't. It is a coefficient of p0.

\start
Date: Mon, 07 Mar 2005 13:52:00 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [AxiomProblems] List to matrix?

Now my second question (extending the second one). Assume that I have a 'List', like the one before:
\begin{axiom}
[[- 1,3,- 3,1],[3,- 6,3],[- 3,3],[1]]
\end{axiom}
(which is calculated from some earlier expressions). How can I convert it into a 'SquareMatrix'. Namely I want to have a matrix like:
\begin{axiom}
A := matrix[[- 1,3,- 3,1],[3,- 6,3,0],[- 3,3,0,0],[1,0,0,0]]
\end{axiom}
so that I can do
\begin{axiom}
vp := vector[p0,p1,p2,p3]
\end{axiom}
and
\begin{axiom}
vp * A
\end{axiom}

\start
Date: Mon, 07 Mar 2005 16:16:28 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomProblems] Pattern Matching

Vladimir,

> easiest way to see, if the output has sin(z)

Perhaps you will recall my previous reply to this question:
http://lists.gnu.org/archive/html/axiom-developer/2005-02/msg00096.html
For example:
\begin{axiom}
test:=D(sin(z)^2, z)
member?(sin(z),kernels(test)
\end{axiom}

\start
Date: Mon, 7 Mar 2005 14:23:21 -0800 (PST)
From: Pablo De Napoli
To: list
Subject: problems compiling axiom from CVS

Hi,

First let me say that it is great that Axiom has been released as free software.
It seems to be a great peace of software.

I've tried to build axiom from CVS, but I've got the following errors:

In file included from sfasl.c:40:
sfaslbfd.c: In function `fasload':
sfaslbfd.c:266: error: structure has no member named `_raw_size'
sfaslbfd.c:291: error: structure has no member named `_raw_size'
sfaslbfd.c:356: error: structure has no member named `_raw_size'
make[4]: *** [sfasl.o] Error 1
make[3]: *** [unixport/saved_pre_gcl] Error 2
/bin/sh: line 1: unixport/saved_gcl: No such file or directory
make[2]: *** [gcldir] Error 127
make[1]: *** [lspdir] Error 2
make: *** [all] Error 2

This messages actually occur when compiling gcl-2.6.5, not axiom itself.
I'm using Gentoo Linux (kernel 2.6.10, glibc 2.3.4)

My question is: wouldn't it be possible to use my gcl compiler from the
system instead of building another one?
(since I've succesfully built gcl-2.6.6 on my system)

best regards,
Pablo De Nápoli
		
\start
Date: 07 Mar 2005 18:31:08 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: run-process

Greetings!

Tim Daly writes:

> Camm,
> 
> It appears that run-process is commented out in the linux version.
> Any idea why? I need this function because I'm using run-process
> to start the new lisp-based browser.
> 

There is no good reason apart from history.  Here is a patch, just
applied against CVS, reenabling and cleaning a few things up:

=============================================================================
Index: h/linux.h
===================================================================
RCS file: /cvsroot/gcl/gcl/h/linux.h,v
retrieving revision 1.11
diff -u -r1.11 linux.h
--- h/linux.h	3 May 2004 21:36:44 -0000	1.11
+++ h/linux.h	7 Mar 2005 23:24:18 -0000
@@ -93,7 +93,7 @@
     result = (current_mask & sigmask(m) ? signal_mask(m) : 0) \
       | (current_mask & sigmask(n) ? signal_mask(n) : 0);
 
-#undef RUN_PROCESS
+#define RUN_PROCESS
 
 #define	IEEEFLOAT
        
Index: h/protoize.h
===================================================================
RCS file: /cvsroot/gcl/gcl/h/protoize.h,v
retrieving revision 1.47
diff -u -r1.47 protoize.h
--- h/protoize.h	27 Nov 2004 22:19:35 -0000	1.47
+++ h/protoize.h	7 Mar 2005 23:24:18 -0000
@@ -600,6 +600,9 @@
 gcl_init_symbol_function(void);
 
 void
+gcl_init_socket_function(void);
+
+void
 gcl_init_hash(void);
 
 void
Index: o/run_process.c
===================================================================
RCS file: /cvsroot/gcl/gcl/o/run_process.c,v
retrieving revision 1.9
diff -u -r1.9 run_process.c
--- o/run_process.c	14 Sep 2003 02:43:08 -0000	1.9
+++ o/run_process.c	7 Mar 2005 23:24:21 -0000
@@ -16,12 +16,15 @@
 
 */
 
-
+#include <string.h>
 
 #define IN_RUN_PROCESS
 #include "include.h"
 #ifdef RUN_PROCESS
 
+void setup_stream_buffer(object);
+object make_two_way_stream(object, object);
+
 #ifdef __MINGW32__
 
 #include<windows.h>
@@ -29,7 +32,6 @@
 #define PIPE_BUFFER_SIZE 2048
 
 void DisplayError ( char *pszAPI );
-void setup_stream_buffer ( object x );
 void PrepAndLaunchRedirectedChild ( HANDLE hChildStdOut,
     HANDLE hChildStdIn,
     HANDLE hChildStdErr,
@@ -462,7 +464,6 @@
   int sockets_in[2];
   int sockets_out[2];
   FILE *fp1, *fp2;
-  int pid;
   object stream_in, stream_out, stream;
 
   if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets_in) < 0)
@@ -473,11 +474,12 @@
   fp2 = fdopen(sockets_out[0], "w");
 
 #ifdef OVM_IO
+  {int pid;
   pid = getpid();
   ioctl(sockets_in[0], SIOCSPGRP, (char *)&pid);
   if( fcntl(sockets_in[0], F_SETFL, FASYNC | FNDELAY) == -1)
     perror("Couldn't control socket");
-
+  }
 #endif
 
 
@@ -502,7 +504,7 @@
  * with "C" type streams.
  */
 
-
+void
 spawn_process_with_streams(istream, ostream, pname, argv)
 object istream;
 object ostream;
@@ -531,12 +533,10 @@
 	}
     }
 
-
-
-  
 }
     
       
+void
 run_process(filename, argv)
 char *filename;
 char **argv;
@@ -550,6 +550,7 @@
   vs_top = vs_base + 2;
 }
     
+void
 siLrun_process()
 {
   int i;
camm@intech19:/fix/t1/camm/debian/gcl/gclcvs-2.7.0$ dch "Reenable run-process"
camm@intech19:/fix/t1/camm/debian/gcl/gclcvs-2.7.0$ cvs -z9 -q ci -m "Reenable run-process" debian/changelog h/linux.h h/protoize.h o/run_process.c
cvs commit: Up-to-date check failed for `h/protoize.h'
cvs [commit aborted]: correct above errors first!
camm@intech19:/fix/t1/camm/debian/gcl/gclcvs-2.7.0$ mv h/protoize.h h/protoize.h.try
camm@intech19:/fix/t1/camm/debian/gcl/gclcvs-2.7.0$ cvs -z9 -q update  h/protoize.h
cvs update: warning: h/protoize.h was lost
U h/protoize.h
camm@intech19:/fix/t1/camm/debian/gcl/gclcvs-2.7.0$ diff -u h/protoize.h.try h/protoize.h
--- h/protoize.h.try	2005-03-07 23:16:59.000000000 +0000
+++ h/protoize.h	2005-03-07 23:28:24.000000000 +0000
@@ -20,7 +20,7 @@
 /* alloc.c:1000:OF */ extern void gcl_init_alloc_function (void); /* () */
 /* alloc.c:1126:OF */ extern void free (void *ptr); /* (ptr) void *ptr; */
 /* array.c:57:OF */ extern void Laref (void); /* () */
-/* array.c:126:OF */ extern object fLsvref (object x, ufixnum i); /* (x, i) object x; unsigned int i; */
+/* array.c:126:OF */ extern object fLsvref (object x, fixnum i); /* (x, i) object x; unsigned int i; */
 /* array.c:142:OF */ extern object fLrow_major_aref (object x,fixnum i); /* (x, i) object x; int i; */
 /* array.c:190:OF */ extern object fSaset1 (object x,fixnum i, object val); /* (x, i, val) object x; int i; object val; */
 /* array.c:262:OF */ extern void siLaset (void); /* () */
@@ -543,6 +543,7 @@
 
 
 /*  readline.d */
+extern int readline_on;
 void
 gcl_init_readline_function(void);
 
@@ -600,9 +601,6 @@
 gcl_init_symbol_function(void);
 
 void
-gcl_init_socket_function(void);
-
-void
 gcl_init_hash(void);
 
 void
=============================================================================

Please let me know if you want me to errata this, or if it is
important enough for another point release on 2.6.

\start
Date: Mon, 7 Mar 2005 19:34:30 -0500
From: Tim Daly
To: Pablo De Napoli
Subject: Re: problems compiling axiom from CVS

Pablo,

Try the following:

cd ~/axiom      <== or whereever you have the axiom sources
export AXIOM=`pwd`/mnt/linux
export PATH=$AXIOM/bin:$PATH
make clean

edit Makefile.pamphlet
look for \subsubsection{The [[GCLOPTS]] configure variable}
modify the lines that read:

<<GCLOPTS>>=
GCLOPTS="--enable-vssize=65536*2 --enable-statsysbfd --enable-maxpage=128*1024"
@

to read:

<<GCLOPTS>>=
GCLOPTS="--enable-vssize=65536*2 --enable-locbfd --disable-dynsysbfd --disable-statsysbfd --enable-maxpage=128*1024"
@

save the file.

make           <=== takes a while
axiom

Please let me know if you succeed or fail.

Tim Daly

\start
Date: Mon, 7 Mar 2005 19:30:04 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: run-process

Camm,

I'm about to upgrade to 2.6.6 and I remember there is a release tag
I need to supply. What is the release tag?

Tim

\start
Date: Tue, 8 Mar 2005 11:18:16 +1000
From: Mike Thomas
To: Camm Maguire
Subject: RE: [Gcl-devel] Re: run-process

Hi Camm.

| Please let me know if you want me to errata this, or if it is
| important enough for another point release on 2.6.

Before we attempt a point release based on run-process() it would be nice to
find some definitive cross-platform tests which cover the functionality
required by Axiom.

When I implemented that function for Windows I used pipes whereas the Unix
code uses a socket pair.  There are no AF_UNIX sockets (AF_INET is OK) or
socket pairs per se on Windows.

Cheers

Mike Thomas.

\start
Date: Tue, 8 Mar 2005 11:18:25 +1000
From: Mike Thomas
To: Tim Daly, Camm Maguire
Subject: Re: run-process

| I'm about to upgrade to 2.6.6 and I remember there is a release tag
| I need to supply. What is the release tag?

Version_2_6_6

\start
Date: Mon, 07 Mar 2005 21:24:10 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomProblems] Problem with coefficients

According to the Axiom book function 'coefficients' does not
include zeros in the list. Furthermore it does not say explicitly
in what order the coefficients themselves are listed. Remember
that there are also terms of degree higher than 1. In fact the
two multivariate polynomials that you used above are formally
identical
\begin{axiom}
Dg :=  [p3 - 3*p2 + 3*p1 - p0,3*p2 - 6*p1 + 3*p0,3*p1 - 3*p0,p0]
(Dg::List MPOLY([p0,p1,p2,p3],?)=Dg::List MPOLY([p3,p2,p1,p0],?))::Boolean
\end{axiom}

For you example problem, to produce a list of coefficients of
the terms of degree 1, including the zeros and in a specific
order, use the function 'coefficient' like this:
\begin{axiom}
[[coefficient(p,x,1) for x in [p0,p1,p2,p3]] for p in Dg]
\end{axiom}

And of course you can use this to produce a matrix.
\begin{axiom}
matrix %
\end{axiom}

\start
Date: 07 Mar 2005 23:09:07 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: run-process

Greetings!  Do you mean

CVS_RSH=ssh cvs -z9 -q -d:ext:anoncvs@subversions.gnu.org:/cvsroot/gcl \
  co -d gcl-2.6.6 -r Version_2_6_6 gcl

?

Take care,

Tim Daly writes:

> Camm,
> 
> I'm about to upgrade to 2.6.6 and I remember there is a release tag
> I need to supply. What is the release tag?

\start
Date: Mon, 7 Mar 2005 23:51:25 -0500
From: Tim Daly
To: Camm Maguire
Subject: re: run-process

Got it. thanks.

\start
Date: Wed, 09 Mar 2005 20:27:22 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] (new) 

Only one of these answers is correct:
\begin{axiom}
eq1:=%pi/2-asin(n/2)=asin(n)
s:=solve(eq1,n)
-- repeating is ok
s:=solve(eq1,n)
subst(eq1,s.1)::Equation Complex Float
subst(eq1,s.2)::Equation Complex Float
\end{axiom}

We should expect the same result from:
\begin{axiom}
)clear all
eq1:=%pi/2-asin(n/2)=asin(n)
s:=solve(eq1,n)
-- repeating is not ok!
s:=solve(eq1,n)
subst(eq1,s.1)::Equation Complex Float
subst(eq1,s.2)::Equation Complex Float
subst(eq1,s.3)::Equation Complex Float
subst(eq1,s.4)::Equation Complex Float
\end{axiom}

But now there are 4 results for the same equation!

\start
Date: Wed, 09 Mar 2005 21:57:14 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Axiom Language] 

++added:
Overloading and Dependent Types

  Many Axiom operations have the same name but different
types and these types can be dependent on other types.
For example
\begin{axiom}
)display operation differentiate
\end{axiom}

We can see how the interpreter resolves the type::

  [14] (D,D1) -> D from D if D has PDRING D1 and D1 has SETCAT

in the following example
\begin{axiom}
)set message bottomup on
differentiate(sin(x),x)
\end{axiom}

Notice that
\begin{axiom}
EXPR INT has PDRING SYMBOL
SYMBOL has SETCAT
\end{axiom}

\start
Date: Wed, 09 Mar 2005 23:14:52 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] Why Complex Float?

Why do I need to use Complex Float in order to evaluate the
numeric value of these expression? Just Float will not work
\begin{axiom}
subst(eq1,s.2)::Equation Float
\end{axiom}

\start
Date: Wed, 09 Mar 2005 23:18:57 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] Why Complex Float?

??changed:
-subst(eq1,s.2)::Equation Float
asin(1/2)::Float
asin(1/2)::Complex Float

\start
Date: Thu, 10 Mar 2005 07:16:25 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] Why Complex Float?

++added:

<pre>From: wyscc, Thur, 10 Mar 2005 08:16:00</pre>

Of course you don't, from a mathematical view point, and the problem is apparently the Interpreter needs help. If you put the argument into <code>Float</code> or the expression into <code>Expression Float</code>, Axiom will oblige.
\begin{axiom}
asin(1/2::Float)
asin(1/2)::Expression Float
\end{axiom}
But in fact, even coercion to <code>Complex Float</code> won't always work.
\begin{axiom}
asin(%i/2)
asin(%i/2)::Complex Float
\end{axiom}
There is no modemap from <code>Expression Integer</code> to <code>Complex Float</code> (Use hyperdoc <code>Browse, Selectable</code> to search, with wild character in the name field).  This is reasonable since it is not possible in general to evaluate numerically a symbolic expression. I believe the Interpreter actually tries this:
\begin{axiom}
asin(1/2)$Float
asin(1/2)$(Complex Float)
\end{axiom}
which succeed in both cases because <code>asin</code> has modemaps in those domains. Exactly why it was able to change a  non-existing coercion in one case but not the other is unclear, but this seems to be because the Interpreter code is not as categorical as the compiler code and these ``smart'' coercions may be done case by case. But even this reasoning has problem:

\begin{axiom}
asin(%i/2::Complex Float)  -- easiest
asin(%i/2)::Expression Complex Float::Complex Float -- harder
asin(%i/2)$(Complex Float)  -- doesn't work
\end{axiom}

\start
Date: Thu, 10 Mar 2005 08:07:45 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] 

??changed:
-subst(eq1,s.1)::Equation Complex Float
-subst(eq1,s.2)::Equation Complex Float
subst(eq1,s.1)::Equation Expression Float
subst(eq1,s.2)::Equation Expression Float

??changed:
-subst(eq1,s.1)::Equation Complex Float
-subst(eq1,s.2)::Equation Complex Float
-subst(eq1,s.3)::Equation Complex Float
-subst(eq1,s.4)::Equation Complex Float
subst(eq1,s.1)::Equation Expression Float
subst(eq1,s.2)::Equation Expression Float
subst(eq1,s.3)::Equation Expression Float
subst(eq1,s.4)::Equation Expression Float

\start
Date: Thu, 10 Mar 2005 09:50:32 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] Ah, so subtle are the Axiom types!

William,

Thank you for the explanation. Now I "get it". The kind of
coercion that I really wanted to do was like this::

  sin(1)::Expression Float

This is taking something from Expression Integer to Expression Float
which always works even for:
\begin{axiom}
  sin(x)::Expression Float
\end{axiom}

But when x converts to Float then the whole expression can be
displayed like Float (even though it remains Expression Float!).
In the coercion we are just changing the 'ground type' of the
Expression. In fact it can be converted to Float by the function
'ground'.
\begin{axiom}
ground(sin(1)::Expression Float)
\end{axiom}

Or just
\begin{axiom}
sin(1)::Expression Float::Float
\end{axiom}

Perhaps a function 'groundIfCan' would be nice :)

But in general the interpreter should not be expected know
that such a chain of coercions is possible. Right

Neat and very general. Its the same for all trig, exp, log,
etc. functions.

So now I also agree that the coercion to Complex Float does
**not** make sense. Notice that the following error messages
should be the same:
\begin{axiom}
log(10.0 q)::Float
log(10.0 q)::Complex Integer
log(10.0 q)::Complex Float
\end{axiom}

But the Complex Float domain is doing something extra.

If this is because of the interpreter then I think it is
trying too hard and as a result it makes it difficult to
explain this behaviour to the novice user. In this case I
would prefer the interpretation to be more *categorical*
and consistent so that we can explain this subtly from the
very beginning.

\start
Date: Thu, 10 Mar 2005 09:53:42 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] Ah, so subtle are the Axiom types!


??changed:
-log(10.0 q)::Float
-log(10.0 q)::Complex Integer
-log(10.0 q)::Complex Float
log(10.0*q)::Float
log(10.0*q)::Complex Integer
log(10.0*q)::Complex Float

\start
Date: Thu, 10 Mar 2005 12:35:35 -0600
From: MathAction (anonyme)
To: MathAction
Subject: [#120 optimize the compilation with proclamation] (nouveau) 

Change the name of code.lsp
(cf. Camm Maguire)

\start
Date: Thu, 10 Mar 2005 16:15:58 -0600
From: MathAction (Camm Maguire)
To: MathAction
Subject: [#75 algebra creates the file code.lsp, this needs to be renamed before compile]

Greetings!  I think I have a patch for Debian which does this if
anyone is interested.

Take care,

\start
Date: Thu, 10 Mar 2005 17:14:01 -0600
From: MathAction (root)
To: MathAction
Subject: [#75 algebra creates the file code.lsp, this needs to be renamed before compile]

Camm, Bill,

Why does code.lsp need to be renamed?

\start
Date: Thu, 10 Mar 2005 18:56:23 -0500
From: Tim Daly
To: Bill Page, Camm Maguire
Subject: Re: [#75 algebra creates the file code.lsp, this needs to be renamed before compile]

never mind. i found the bug report. --t

\start
Date: Thu, 10 Mar 2005 23:05:11 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#121 bogus 'property change' comments] (new) 

Some very aggressive search engines (spiders) seem to be following
form action="xxxx" references in pages as well as the usual href
links. As a result probes by such greedy theives can cause
unexpected changes to wiki web pages. One such example recently
has been the triggering of the 'Change' button on the Issue pages.
The script 'changeIssueProperties' should be more careful not to
record any change if the 'Change' action is triggered with no
actually changes.

\start
Date: Thu, 10 Mar 2005 23:09:26 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#121 bogus 'property change' comments] patch for ZWiki/plugins/Tracker.py

<pre>
diff -au test/Products/ZWiki/plugins/Tracker.py main/Products/ZWiki/plugins/Tracker.py
--- test/Products/ZWiki/plugins/Tracker.py      2004-11-17 14:57:59.000000000 -0600
+++ main/Products/ZWiki/plugins/Tracker.py      2005-03-10 22:55:09.000000000 -0600
@@ -296,10 +296,11 @@
             if status != self.status:
                 comment += "Status: %s => %s \n" % (self.status,status)
                 self.manage_changeProperties(status=status)
-        log = log or 'property change'
-        self.comment(text=comment, subject_heading=log, REQUEST=REQUEST)
-        self.setLastEditor(REQUEST)
-        self.reindex_object()
+        if log or (comment != ''):
+            log = log or 'property change'
+            self.comment(text=comment, subject_heading=log, REQUEST=REQUEST)
+            self.setLastEditor(REQUEST)
+            self.reindex_object()
         if REQUEST: REQUEST.RESPONSE.redirect(self.page_url())

     def category_index(self):
</pre>

\start
Date: Thu, 10 Mar 2005 23:43:22 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [#119 solve returns wrong answers and multiple	answers to same trig problem] 

??changed:
-
<pre>From: wyscc, Fri, 11 Mar 2005 00:37:00</pre>

>Perhaps a function 'groundIfCan' would be nice :)

The origin implementation of <code>ground</code> in <code>Expression</code> is from <code>FunctionSpace</code> (according to Hyperdoc) and may give an error if the argument is not from the ground domain. There is a function <code>ground?</code> which does the test. A more common (and indeed more general) function is <code>retractIfCan</code>, which would give "failed" if the retraction cannot be done. There are 8 modemaps for <code>retractIfCan</code> in <code>Expression Float</code> and you can retract to <code>Algebraic Number, Float, Fraction Integer, Fraction Polynomial Float, Integer, Kernel Expression Float, Polynomial Float</code> and <code>Symbol</code>.  As far as MathAction goes, I would prefer "failed" rather than an error, because an error stops the running of the rest of Axiom script block.

>Cannot compute the numerical value of a non-constant expression

>But the Complex Float domain is doing something extra.

The issues here are two: The first two errors are modemap problems. The last one is an anticipated error message from algebra code. I suspect that the Interpreter did not try to find <code>numeric</code> in the first instance (it should), did not find any modemap from <code>POLY FLOAT -> COMPLEX INT</code> (there are none, which makes sense), but found <code>complexNumeric</code> in the last. In the first one, <code>numeric.o</code> is not loaded because the Interpreter somehow is not instructed to look for <code>numeric</code>. Even after <code>numeric.o</code> is loaded, the situation is the same: the Interpreter stops after locating <code>log: EXPR FLOAT ->EXPR FLOAT</code>. In the last case, the Interpreter loads <code> numeric.o</code> if it is not there. So it would seem that it is a dependency problem during compiling (which presumably provides the database to the Interpreter).

\begin{axiom}
numeric(log(10.0*q))
\end{axiom}

So this treatment agrees with:

\begin{axiom}
complexNumeric(log(10.0*q))
\end{axiom}

which has the same output as <code>log(10.0*q)::Complex Float</code>

By the way, I think this discussion (the second half, involving conversion to <code>Float</code>) should be separated into a new page. Perhaps under a title like "Numerical Type Conversion".

I still have no clue why after a <code>)clear all</code>, the second <code>solve</code> behave the way it did. I have verified that it occurs fairly consistently, even in the NAG version. (It occurred even if I had never run the first <code>eq1, solve, solve</code> before the <code>)clear all</code> if I was working in some session already. But it occurred consistently if I started with a new Axiom window and followed the script.)

\start
Date: 11 Mar 2005 08:50:40 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: [#75 algebra creates the file code.lsp, this needs to be renamed before compile]

Greetings!  Not sure about the rationale behind the bug report, but on
5 of the Debian platforms, gcl cannot (yet) natively relocate object
files, and the build has to proceed through compiler::link.  In such a
case, the init function must be uniquely named for each module, as the
final link is via ld.

Take care,

Tim Daly writes:

> Camm, Bill,
> 
> Why does code.lsp need to be renamed?
> 

\start
Date: Sat, 12 Mar 2005 08:25:31 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [DefiniteIntegration] Another problem with integrate

Consider the following piecewise function:
\begin{axiom}
f(x | (x >=0) and (x <=1) ) == 1
f(x | (x<0) or (x > 1)) == 0
\end{axiom}
It is obvious that $\int_{-1}^2 f(t) dt= 1$, while Axiom claims otherwise:
\begin{axiom}
integrate(f(t), t=-1..2)
\end{axiom}
What's worse, it doesn't say that it cannot calsulate it, but it simply gives an incorrect result! Haven't I first tested it with such a simple example I wouldn't even know, the results are wrong. Any clue how to serve Axiom such function, so that it integrates them correctly? Is this a bug in Axiom or I'm doing something wrong? TIA

\start
Date: Sat, 12 Mar 2005 09:40:10 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#122 Handling of power series] (new) 

It seems that the interpreter handles strangely the power series:

a:= series sin(x);
)di type %
Type of value of %: UnivariatePuiseuxSeries(Expression Integer,x,0)
a=a;
)di type %
Type of value of %: Equation Any


If I coerce it...
a:=a::UnivariatePuiseuxSeries(Expression Integer,x,0);
a=a;
)di type %
Type of value of %: Equation UnivariatePuiseuxSeries(Expression Integer,x,0)

------------------------------------------------
Fatal bug:

a:= series sin(x);
a*1.0;
>> System error:
Caught fatal error [memory may be damaged]

protected-symbol-warn called with (NIL)

>From trace:
It seems that the interpreter doesn't coerce one args
in Expression (Float):

1<enter valueArgsEqual? : (|UnivariatePuiseuxSeries| (|Expression| (|Integer|)) |x| ((0 . 0) 0 . 1))\(|UnivariatePuiseuxSeries| (|Expression| (|Float|)) |x| ((0 . 0) 0 . 1))

...

And here:

1<enter algEqual : ((0 . 0) 0 . 1)\((0 0 . 0) 0 1 . 0)\(|Expression| (|Float|))
1<enter compiledLookupCheck : =\((|Boolean|) $ $)\#<vector 08eccc78>
1>exit compiledLookupCheck : (#<compiled-function |EXPR;=;2$B;21|> . #<vector 08eccc78>)

after SPADCALL (it's not traced) "=" in EXPR trigger the bug.

algEqual : ((0 . 0) 0 . 1)\((0 0 . 0) 0 1 . 0)\(|Expression| (|Float|))
           ^^^^^^^^^^^^^^^
I think above is not of type EXPR FLOAT.

Cheers.
Error message:  >> System error:
Caught fatal error [memory may be damaged]

\start
Date: Sat, 12 Mar 2005 09:41:41 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#122 Handling of power series] 

a:= series sin(x);
)di type %
Type of value of %: UnivariatePuiseuxSeries

\start
Date: Sat, 12 Mar 2005 17:39:13 +0200
From: Vladimir Bondarenko
To: list
Subject: An idea for Free and Open Source Axiom ? (Search Facility)

Hi *,

Nice to see that Free and Open Source Axiom picks up speed!

Just an idea. I visited http://page.axiom-developer.org/ many times,
and this came to my mind already several times. What about adding a
Search facility at the entry page?

I have no double that the Axiom site will be visited in the near
future by a even more folks, and each time I remember with pleasant
feeling www.wolfram.com  by Wolfram Research, Inc and www.sciface.com
by SciFace GmbH, where you can put a search string instantly at the
entry page which is, in my opinion, of real convenience.

Any comments?

\start
Date: Sat, 12 Mar 2005 17:24:14 +0100
From: Martin Rubey
To: Vladimir Bondarenko
Subject: Re: Re[2]: An idea for Free and Open Source Axiom ?

Vladimir Bondarenko writes:
 > 
 > MR> The search facility is at the top right corner of every page.
 > 
 > Yep. As you can see from my message I mean the entry page itself
 > where the Search is absent.

Oops, you are quite right. On the other hand, I believe that new users should
directly be forwarded to MathAction. I think that
http://page.axiom-developer.org/ is very confusing.

Martin

\start
Date: Sat, 12 Mar 2005 18:24:45 +0200
From: Vladimir Bondarenko
To: list
Subject: Re[2]: An idea for Free and Open Source Axiom ?

MR> Vladimir Bondarenko writes:

MR>  > Just an idea. I visited http://page.axiom-developer.org/ many times, and
MR>  > this came to my mind already several times. What about adding a Search
MR>  > facility at the entry page?

MR> The search facility is at the top right corner of every page.

Yep. As you can see from my message I mean the entry page itself
where the Search is absent.

\start
Date: Sat, 12 Mar 2005 17:06:54 +0100
From: Martin Rubey
To: Vladimir Bondarenko
Subject: Re: An idea for Free and Open Source Axiom ? 

Vladimir Bondarenko writes:

 > Just an idea. I visited http://page.axiom-developer.org/ many times, and
 > this came to my mind already several times. What about adding a Search
 > facility at the entry page?

The search facility is at the top right corner of every page.

\start
Date: Sat, 12 Mar 2005 23:51:19 -0500
From: Bill Page
To: Martin Rubey, Vladimir Bondarenko
Subject: RE: An idea for Free and Open Source Axiom ?

On Saturday, March 12, 2005 11:24 AM Martin Rubey wrote:
> 
> Vladimir Bondarenko writes:
>> 
>> Martin Rubey wrote:
>>> The search facility is at the top right corner of every
>>> page.
>> 
>> Yep. As you can see from my message I mean the entry page
>> itself where the Search is absent.
> 
> Oops, you are quite right. On the other hand, I believe
> that new users should directly be forwarded to MathAction.
> I think that http://page.axiom-developer.org/ is very
> confusing.
> 

I am not sure what you found confusing about
http://page.axiom-developer.org :) It was mainly just a
convenience for me but I agree that it is no longer relevant.
That page used to be the original non-wiki index page that
pointed to the both the Axiom Portal and the MathAction
websites (and a few other useful things) while they were
both under development.

I have just edited a few pages on MathAction (as you will
have noticed) to make sure that they include all of the
links that were on the original page. And then I modified
the axiom-developer.org webserver configuration so that
the following urls all internally re-direct to MathAction

  http://axiom-developer.org
  http://www.axiom-developer.org
  http://axiom.axiom-developer.org
  http://page.axiom-developer.org

All of these urls at one time or other pointed to something
new and Axiom-related but which are now entirely replaced
by MathAction.

Note also that the Savannah and Sourceforge Axiom developer
websites also refer to MathAction site as the "Project Home
Page".

So I think now we finally have the everything consolidated
in one place. And this should be easier - especially for
new users.  If anyone notices anything missing that used
to be on one of the other websites, please let me know.

\start
Date: Sun, 13 Mar 2005 21:19:53 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#123 Compile modified spad file] Yes it is possible

You have not provided enough information to know what you
might be doing wrong, but it is certainly possible. For
example in Axiom for Windows version 0.1.4 (see AxiomDownload)
you can do the following::

  )cd "C:/Program files/axiom/mnt/windows/src/algebra"
  )sys copy fraction.spad my_fraction.spad
  )edit my_fraction.spad
    ... make the change to domain Fraction, etc.
  )compile my_fraction.spad

All of the categories and domains defined in the modified
file my_fraction.spad, including the domain Fraction will
be re-compiled. But watch for error message and re-edit
and compile the file again if you make a mistake.

You will be able to access the modified domains and
categories later in this same Axiom session. If you exit
Axiom and then want to use the new version of the domain
Fraction in a new session without re-compiling it, you
can use the following commands::

  )cd "C:/Program files/axiom/mnt/windows/src/algebra"
  )library FRAC

If you are using the linux version of Axiom, the procedure
is similar (only the file names and the copy command change).

If this does not work, please provide more details about
exactly what you are doing.

\start
Date: Sun, 13 Mar 2005 22:36:19 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#123 Compile modified spad file] you must edit the file fraction.spad.pamphlet

If you are re-building all of axiom using 'make', then you must
change only to the *.pamphlet files. All the other files are
generated from these files. You will find the algebra pamphlet
files in 'axiom--main--1\src\algebra'.

Pamphlet files contain both the spad program code and its
documentation (i.e. in literate programming style). If you
intend to submit patches for inclusion in a new release
of Axiom, please add some documentation about the change you
are making. And if possible, expand the existing documentation
(if any) where it is missing or incorrect.

\start
Date: Mon, 14 Mar 2005 10:26:24 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#123 Compile modified spad file] code.lsp is not regenerated in int/algebra/FRAC.NRLIB

Sorry I work on pamphlet file.
In 'int' directory, the file FRAC.spad is correctly generated but not compiled.
For example add:
  print("I am here"::OutputForm)$Lisp
somewhere in domain fraction (file: fraction.spad.pamphlet)

\start
Date: Mon, 14 Mar 2005 12:49:15 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#123 Compile modified spad file] version of Axiom source

What version of Axiom source are you using? Did you get the
most recent source from the February CVS or prior? Or did you
get it from arch (tla)? If from arch, what is patch level?

If you delete int/algebra/FRAC.NRLIB/code.lsp and then re-run
Axiom 'make' is the domain properly compiled?

\start
Date: Mon, 14 Mar 2005 15:30:36 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#123 Compile modified spad file] February 2005 sources

If I delete int/algebra/FRAC.NRLIB/code.lsp the domain is not recompiled.
<pre>
If I remove code.o, here is the output:
<br>
generic 1 -- making /usr/local/axiom/mnt/linux/algebra/FRAC.o from /usr/local/axiom/int/algebra/FRAC.NRLIB
cp: can't evaluate `/usr/local/axiom/int/algebra/FRAC.NRLIB/code.o': No file or directory of this type
</pre>

\start
Date: Mon, 14 Mar 2005 16:18:17 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [AxiomProblems] Yet another problem with piecewise functions

Consider the following function, given in recursive manner:
\begin{axiom}
N0(t|(t<0) or (t>1))==0
N0(t|(t>=0) and (t<=1))==1
N(t,i,0)==N0(t-i)
N(t,i,p|p>0)==(t-i)/p*N(t,i,p-1)+(i+1-t)/p*N(t,i+1,p-1)
\end{axiom}
This is a way to create (uniform) bsplines. Now try to differentiate $N$
\begin{axiom}
D(N(t,0,3),t)
\end{axiom}
Yack!!! This is obviously wrong!!! $t\mapsto N(t,0,3)$ is $C^2$ continuous!

\start
Date: Mon, 14 Mar 2005 16:38:41 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomProblems] Seems correct to me

This seems correct to me since
\begin{axiom}
N(t,0,3)
\end{axiom}

is constant.

\start
Date: Mon, 14 Mar 2005 20:22:44 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [build Axiom] 

++added:
Source code 

  As of February 2005 the current release is Axiom 3 beta.

A snapshot of the current Axiom source tree is available at
http://savannah.nongnu.org/cvs-backup/axiom-sources.tar.gz
on the Savannah developer web site. This tarball is updated every night.

You can also download the source tree from CVS. To download the
code, do::

  'export CVS_RSH="ssh"'
  'cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/axiom co axiom'

The !SSHv2 public key fingerprints for the machine hosting the cvs trees are::

  'RSA: 1024 80:5a:b0:0c:ec:93:66:29:49:7e:04:2b:fd:ba:2c:d5'
  'DSA: 1024 4d:c8:dc:9a:99:96:ae:cc:ce:d3:2b:b0:a3:a4:95:a5'

To compile the code, have a look at the README and the FAQ files in the main
directory. If you have trouble compiling, search the
"archives":http://mail.nongnu.org/archive/html/axiom-developer of the
"axiom-developer":http://mail.nongnu.org/mailman/listinfo/axiom-developer
mailing list, or ask there.

Developers

  Savannah is still the authoritative source for a working axiom system.

For those who want to get the lastest set of mistakes you can visit
http://arch.axiom-developer.org 

This will take you to a page that describes how to get the latest
version of the code.

Note that I change code on an almost-daily basis, at least in some
branch and that the code is almost certainly broken and may not even
compile.

The point of this archive is to open up the development of axiom, to
make it possible for others to collaborate effectively and make the
development transparent. Since only the fully tested endpoints ever
get put on savannah it appears that nothing is changing between
observed endpoints. While I realize that the universe works this way
at a fundamental level and such changes are not observable this is
not the case with Axiom.

If you're willing to jointly work on developing some new feature we
can create a branch where we can work together. Once it works
we can merge the changes back to the main line and eventually back
to savannah.

\start
Date: Tue, 15 Mar 2005 02:47:19 -0600
From: MathAction (anonimowy)
To: MathAction
Subject: [AxiomProblems] No, it's not

The function is not constant. If Axiom claims it's $\equiv 0$ then it also evaluates it wrongly. See this:
\begin{axiom}
for x in -5..15 repeat output N(x/10,0,3)
\end{axiom}
Drawing the plot (unfortunately not available here). Would show it even more clearly.

\start
Date: Tue, 15 Mar 2005 02:54:42 -0600
From: MathAction (anonimowy)
To: MathAction
Subject: [AxiomProblems] No, it's not

++added:
N0(t|(t<0) or (t>1))==0;
N0(t|(t>=0) and (t<=1))==1;
N(t,i,0)==N0(t-i);
N(t,i,p|p>0)==(t-i)/p*N(t,i,p-1)+(i+1-t)/p*N(t,i+1,p-1);

\start
Date: Tue, 15 Mar 2005 04:03:40 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomProblems] (t>0)$POLY INT

But in 'D(N(t,0,3),t)' you are not calling the function N
with numeric parameters. In 'N(t,0,3)' the type of t is
'Variable t'. Ultimately 'N(t,0,3)=0' because of your funtion
definition 'N0(t|(t<0) or (t>1))==0'. This is '0' because
't>1' is 'true' when 't' is of type 'Variable t'. You can
see why if you use the option ')set message bottomup on' to
see the mode map selection
\begin{axiom}
)set message bottomup on
t>1
\end{axiom}
So Axiom interprets both 't' and '1' as being of type 'POLY INT'
and the function '>' is defined by the lexical ordering of the
polynomials.

I will grant that this result is counter-intuitive, but I think
that once you understand why Axiom gives this result then you
will be in a good position to understand the rest of Axiom's
type system!

\start
Date: Tue, 15 Mar 2005 04:42:42 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [ExampleSolution1] (new) 

Here is one way to write the function N0 so that it returns
a fully symbolic result. The key point is to provide Axiom
with more specific type information.
\begin{axiom}
N0 : Union(Variable t, Expression Integer, Integer) ->
  Union(Expression Integer,Integer)
N0(t) ==
  if t case Integer then
    if (t<0) or (t>1) then
      return 0
    if (t>=0) and (t<=1) then
      return 1
  operator('N0)(t)
\end{axiom}
Test the function
\begin{axiom}
N0(t)
N0(-1)
N0(0)
N0(1)
N0(2)
\end{axiom}
Now we can define the function N
\begin{axiom}
N : (Union(Variable t,Expression Integer,Integer), Integer, Integer) ->
   Union(Expression Integer,Integer)
N(t,i,p) ==
  if p=0 then
    return N0(t-i)
  else
   (t-i)/p*N(t,i,p-1)+(i+1-t)/p*N(t,i+1,p-1)
\end{axiom}
And use it for symbolic calculation
\begin{axiom}
N(t,0,3)
D(N(t,0,3),t)
\end{axiom}

\start
Date: Tue, 15 Mar 2005 05:14:01 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [ExampleSolution1] better function signature

++added:
Note that
\begin{axiom}
D(N0(t),t)
\end{axiom}
is the derivative of $N0(t)$ with respect to $t$.

\start
Date: Tue, 15 Mar 2005 09:19:21 -0600
From: Tim Daly
To: list
Subject: address change

*,

My direct mail address has changed from Tim Daly to
Tim Daly

Sorry to spam the mailing lists but as the lead developer
and primary axiom contact it seems necessary to make people
aware of this.

Tim

\start
Date: Tue, 15 Mar 2005 09:47:34 -0600
From: MathAction (daly)
To: MathAction
Subject: [Axiom-mail] address change

*,

My direct mail address has changed from Tim Daly to
Tim Daly

Sorry to spam the mailing lists but as the lead developer
and primary axiom contact it seems necessary to make people
aware of this.

\start
Date: Tue, 15 Mar 2005 09:51:03 -0600
From: Tim Daly
To: Bill Page, Camm Maguire, Mark Murray
Subject: Axiom sprint day
Cc: Bernice Rogowitz, Gilbert Baumslag

*,

I'm working on setting up an agenda for the axiom sprint day.
It appears that the morning will be spent discussing future 
directions for Axiom. The rest of the time will be spent 
cleaning up the IssueTracker items.

Mark Murray will be joining us via phone as he cannot attend
in person.

\start
Date: Tue, 15 Mar 2005 13:43:15 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [GraphViz] (new) 

"An Introduction to GraphViz":http://www.linuxjournal.com/article/7275

  By Mihalis Tsoukalos on Wed, 2004-09-08 23:00.

How to use command-line tools and basic GraphViz utilities to
produce graphs both simple and complex.

GraphViz is a collection of tools for manipulating graph structures
and generating graph layouts. Graphs can be either directed or
undirected. GraphViz offers both graphical and command-line tools.
A Perl interface also is available, but it is not covered here for
reasons of generality. Graphical tools are not going to be discussed
in this article either. Instead, this article focuses on using GraphViz
from the command line.

See more here: http://www.wickle.com/wikis/index.php/Graphviz_extension
<hr />

The follow graphs are generated by MathAction

My First Graph::

  \\begin{latex}
  \\digraph[scale=0.5]{MyGraph1}{rankdir=LR; a->b; b->c}
  \\end{latex}

Produces:
\begin{latex}
\digraph[scale=0.5]{MyGraph1}{rankdir=LR; a->b; b->c}
\end{latex}

A More Complex Example::

  \\begin{latex}
  \\digraph[scale=1.0]{MyGraph2}{
      size ="4,4";
      main [shape=box]; /* this is a comment */
      main -> parse [weight=8];
      parse -> execute;
      main -> init [style=dotted];
      main -> cleanup;
      execute -> { make_string; printf}
      init -> make_string;
      edge [color=red]; // so is this
      main -> printf [style=bold,label="100 times"];
      make_string [label="make a string"];
      node [shape=box,style=filled,color=".7 .3 1.0"];
      execute -> compare;
    }
  \\end{latex}

Produces:
\begin{latex}
\digraph[scale=1.0]{MyGraph2}{
    size ="4,4";
    main [shape=box]; /* this is a comment */
    main -> parse [weight=8];
    parse -> execute;
    main -> init [style=dotted];
    main -> cleanup;
    execute -> { make_string; printf}
    init -> make_string;
    edge [color=red]; // so is this
    main -> printf [style=bold,label="100 times"];
    make_string [label="make a string"];
    node [shape=box,style=filled,color=".7 .3 1.0"];
    execute -> compare;
  }
\end{latex}

Here's One From

  http://www.linuxjournal.com/article/7275

This::

  \\begin{latex}
  \\digraph{MyGraph3}
  {
        node [shape = record];
        node0 [ label ="<f0> | <f1> J | <f2> "];
        node1 [ label ="<f0> | <f1> E | <f2> "];
        node4 [ label ="<f0> | <f1> C | <f2> "];
        node6 [ label ="<f0> | <f1> I | <f2> "];
        node2 [ label ="<f0> | <f1> U | <f2> "];
        node5 [ label ="<f0> | <f1> N | <f2> "];
        node9 [ label ="<f0> | <f1> Y | <f2> "];
        node8 [ label ="<f0> | <f1> W | <f2> "];
        node10 [ label ="<f0> | <f1> Z | <f2> "];
        node7 [ label ="<f0> | <f1> A | <f2> "];
        node3 [ label ="<f0> | <f1> G | <f2> "];
        "node0":f0 -> "node1":f1;
        "node0":f2 -> "node2":f1;
        "node1":f0 -> "node4":f1;
        "node1":f2 -> "node6":f1;
        "node4":f0 -> "node7":f1;
        "node4":f2 -> "node3":f1;
        "node2":f0 -> "node5":f1;
        "node2":f2 -> "node9":f1;
        "node9":f0 -> "node8":f1;
        "node9":f2 -> "node10":f1;
  }
  \\end{latex}

Gets you this:
\begin{latex}
\digraph{MyGraph3}
{
        node [shape = record];
        node0 [ label ="<f0> | <f1> J | <f2> "];
        node1 [ label ="<f0> | <f1> E | <f2> "];
        node4 [ label ="<f0> | <f1> C | <f2> "];
        node6 [ label ="<f0> | <f1> I | <f2> "];
        node2 [ label ="<f0> | <f1> U | <f2> "];
        node5 [ label ="<f0> | <f1> N | <f2> "];
        node9 [ label ="<f0> | <f1> Y | <f2> "];
        node8 [ label ="<f0> | <f1> W | <f2> "];
        node10 [ label ="<f0> | <f1> Z | <f2> "];
        node7 [ label ="<f0> | <f1> A | <f2> "];
        node3 [ label ="<f0> | <f1> G | <f2> "];
        "node0":f0 -> "node1":f1;
        "node0":f2 -> "node2":f1;
        "node1":f0 -> "node4":f1;
        "node1":f2 -> "node6":f1;
        "node4":f0 -> "node7":f1;
        "node4":f2 -> "node3":f1;
        "node2":f0 -> "node5":f1;
        "node2":f2 -> "node9":f1;
        "node9":f0 -> "node8":f1;
        "node9":f2 -> "node10":f1;
}
\end{latex}

\start
Date: Tue, 15 Mar 2005 17:32:32 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [GraphViz] 


++added:

Finally::

  \\begin{latex}
  \\digraph[scale=0.5]{MyGraph4}
  {
        rankdir = LR;
        node [shape=record, width=.1, height=.1];
        node0 [label = "<p0> | <p1> | <p2> | <p3> 
                 | <p4> | | ", height = 3];
        node[ width=2 ];
        node1 [label = "{<e> r0 | 123 | <p> }" ];
        node2 [label = "{<e> r10 | 13 | <p> }" ];
        node3 [label = "{<e> r11 | 23 | <p> }" ];
        node4 [label = "{<e> r12 | 326 | <p> }" ];
        node5 [label = "{<e> r13 | 1f3 | <p> }" ];
        node6 [label = "{<e> r20 | 123 | <p> }" ];
        node7 [label = "{<e> r40 | b23 | <p> }" ];
        node8 [label = "{<e> r41 | 12f | <p> }" ];
        node9 [label = "{<e> r42 | 1d3 | <p> }" ];
        node0:p0 -> node1:e;
        node0:p1 -> node2:e;
        node2:p -> node3:e;
        node3:p -> node4:e;
        node4:p -> node5:e;
        node0:p2 -> node6:e;
        node0:p4 -> node7:e;
        node7:p -> node8:e;
        node8:p -> node9:e;
  }
  \\end{latex}

Draws a linked list

\begin{latex}
\digraph[scale=0.5]{MyGraph4}
{
        rankdir = LR;
        node [shape=record, width=.1, height=.1];
        node0 [label = "<p0> | <p1> | <p2> | <p3> 
                 | <p4> | | ", height = 3];
        node[ width=2 ];
        node1 [label = "{<e> r0 | 123 | <p> }" ];
        node2 [label = "{<e> r10 | 13 | <p> }" ];
        node3 [label = "{<e> r11 | 23 | <p> }" ];
        node4 [label = "{<e> r12 | 326 | <p> }" ];
        node5 [label = "{<e> r13 | 1f3 | <p> }" ];
        node6 [label = "{<e> r20 | 123 | <p> }" ];
        node7 [label = "{<e> r40 | b23 | <p> }" ];
        node8 [label = "{<e> r41 | 12f | <p> }" ];
        node9 [label = "{<e> r42 | 1d3 | <p> }" ];
        node0:p0 -> node1:e;
        node0:p1 -> node2:e;
        node2:p -> node3:e;
        node3:p -> node4:e;
        node4:p -> node5:e;
        node0:p2 -> node6:e;
        node0:p4 -> node7:e;
        node7:p -> node8:e;
        node8:p -> node9:e;
}
\end{latex}

\start
Date: Tue, 15 Mar 2005 17:46:35 -0600
From: MathAction (Mike Thomas)
To: MathAction
Subject: [build Axiom] 

Hi Bill.

|     Or alternatively you can use darcs 1.0.2 which may work more
|     reliably than tla on Windows. Here are instructions to download
|     and install the
|     "windows 
| version":http://www.scannedinavian.org/DarcsWiki/CategoryBinaries#
| head-e86d6956c2fad54938e3bc8f2087e0ec793c9ed8
|     of "darcs":http://abridgegame.org/darcs
| 
| 
| ++added:
|     If you are using darcs following the instructions at
|     MathActionRepository to download 'axiom--windows--1'.

It worked (the checkout that is, building now)!

Are the darcs repositories 100% synched with the arch repositories?

\start
Date: Tue, 15 Mar 2005 18:02:09 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#100 integrate((z^a+1)^b, z) crashes] 


??changed:
-stack overflow
-
-From unknown Tue Mar 8 05:00:04 -0600 2005
-From: 
-Date: Tue, 08 Mar 2005 05:00:04 -0600
-Subject: property change
-Message-ID: <20050308050004-0600@page.axiom-developer.org>
-
-
stack overflow on Axiom.

Reduce trys to calculate:
\begin{reduce}
int((z^a+1)^b, z);
\end{reduce}

Maple gives::

  > int((z^a+1)^b, z);

\begin{equation}
z{\it hypergeom} \left( [-b,{a}^{-1}],[1+{a}^{-1}],-{z}^{a} \right)
\end{equation}

\start
Date: Tue, 15 Mar 2005 18:37:44 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [build Axiom] this is an experiment

Yes, earlier today (March 15, 2005) the darcs repositories were
generated from the arch (tla) repositories of the same name:

  - axiom--main--1

  - axiom--windows--1

But they are are separate repositories so if we continue to use
them, I will try to find time to setup automatic (each night?)
synchronization. I have read about some tools for this purpose
that go between CVS, Arch and darcs. But for now I was thinking
of (approximately weekly) manual synchronization.

This is an experiment. If you have the opportunity, please feel
free to send darcs patches (via email) or if you can set up your
darcs repository on a web server, then I can "pull" any changes
that you make back to the MathAction repositories and thence to
arch.

darcs "push" is more complicated because (like tla) it involves ssh.
I would like to avoid it for now.

\start
Date: Wed, 16 Mar 2005 03:47:42 -0600
From: MathAction (markm)
To: MathAction
Subject: [#124 Build failure in CVS top-of-tree sources in src/hyper]

If I kludge this by removing the line that (seems to) erroneously refer to "loc2", then I get a link failure when step() and compile() are not found:

linking /home/ports/math/axiom/work/axiom-0.0/mnt/freebsd/lib/hthits
/home/ports/math/axiom/work/axiom-0.0/obj/freebsd/hyper/hthits.o(.text+0x239): In function `searchPage':
: undefined reference to `step'
/home/ports/math/axiom/work/axiom-0.0/obj/freebsd/hyper/hthits.o(.text+0x832): In function `main':
: undefined reference to `compile'
gmake[3]: *** [/home/ports/math/axiom/work/axiom-0.0/mnt/freebsd/lib/hthits] Error 1
gmake[3]: Leaving directory `/home/ports/math/axiom/work/axiom-0.0/src/hyper'
gmake[2]: *** [hyperdir] Error 2
gmake[2]: Leaving directory `/home/ports/math/axiom/work/axiom-0.0/src'
gmake[1]: *** [srcdir] Error 2
gmake[1]: Leaving directory `/home/ports/math/axiom/work/axiom-0.0'
gmake: *** [all] Error 2
*** Error code 2

\start
Date: Wed, 16 Mar 2005 05:31:31 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [ExampleSolution1] Still a problem.

++added:
)clear all

++added:

<pre>From wyscc, March 16, 2005 05:06:00</pre>

The above does not really solve the problem on differentiation of a
piecewise function, which, in my opinion, is an unreasonable
expectation in general because of the multitude of ways to define the
conditions; it may help if one uses the Heaviside function. The
numerical definition of <code>N0(t)</code> is actually totally ignored
in the definition of <code>N(t,i,p)</code> and thus also in the
differentiation process, by the use of
<code>operator('No)(t)</code>. Indeed, in the expression for
<code>N</code> or its derivative with respect to <code>t</code>, the
"function" <code>N0</code> is still an <code>operator</code>, and as
such, <code>N0(2)</code> is undefined! In other words, there is a
distinction between the numerically defined function <code>N0</code>
and the operator <code>N0</code>. This is illustrated below.

Aside: I am getting into something I don't quite understand: the first
group of code is not meant to be there, but it somehow returns
something wrong. If the commented line <code>--dNdt(t)</code> is
removed, the result for the <code>subst</code> line is what I
expect. If the order of the commands is as for the second group, the
result is ok too.  Finally if I copied the block to the end and run it
a second time, everything is also ok. But his may go away after I
save. Image is in:
http://page.axiom-developer.org/zope/mathaction/images/1141703130-18px.png.

\begin{axiom}
N(2,0,3)
dNdt(t)==D(N(t,0,3),t)
--dNdt(t)
subst(dNdt(t), t=2)
dNdt(2)
\end{axiom}

Compared with

\begin{axiom}
dNdt(t)==D(N(t,0,3),t)
subst(dNdt(t), t=2)
N(2,0,3)
dNdt(2)
\end{axiom}

Notice that the evaluation for <code>N0(2)</code> is not really
done. One way to avoid this error is to use substitution instead of a
function call, as done in the second line above.

The last function call <code>dNdt(2)</code> is deliberate, to
illustrate a common error when mixing numeric and symbolic
computation: first define the derivative as a function of
<code>t</code> and then evaluate the derivative at some value of
<code>t</code>. This does not work because when the derivative is
called the system (Axiom, or other systems) will substitute the value
of <code>t</code> before differentiating.

\begin{axiom}
N(2,0,3)
dNdt(t)==D(N(t,0,3),t)
--dNdt(t)
subst(dNdt(t), t=2)
dNdt(2)
\end{axiom}

\start
Date: Wed, 16 Mar 2005 17:59:06 +0100
From: Thomas Baruchel
To: list
Subject: Axiom and FreeBSD

Hi,

I downloaded Axiom source code, and I encounter problems while compiling it
(mainly because I don't know much about noweb) ; it seems that some people
already compiled it under FreeBSD, and I would like to know if it is easy
to do it ; do you know something about that ?

Regards,

-- 
Thomas Baruchel

\start
Date: Wed, 16 Mar 2005 20:08:30 +0000
From: Mark Murray
To: Thomas Baruchel
Subject: Re: Axiom and FreeBSD 

Thomas Baruchel writes:
> I downloaded Axiom source code, and I encounter problems while compiling it
> (mainly because I don't know much about noweb) ; it seems that some people
> already compiled it under FreeBSD, and I would like to know if it is easy
> to do it ; do you know something about that ?

Its rather hard to do under FreeBSD. I'm working on getting to be 
easier. if you need it more urgently, I could probably build you a 
binary package, but not right now; there are other issues.

\start
Date: Thu, 17 Mar 2005 12:07:26 +1000
From: Mike Thomas
To: list
Subject: darcs patch: Remove system utilities.

------=_NextPart_000_021D_01C52AE9.E2883110
	name="winmail.dat"
	filename="winmail.dat"

[encoded data, 10780 characters]
Tw==

------=_NextPart_000_021D_01C52AE9.E2883110--

\start
Date: Thu, 17 Mar 2005 12:13:52 +1000
From: Mike Thomas
To: list
Subject: RE: darcs patch: Remove system utilities.

Hi Bill/Tim.

Following up on Bill's grand experiment with darcs you should receive on
this mailing list a patch generated with 'darcs send' dealing with the 'cat'
and related Unix system utility bug on Windows.

In practical terms this means that the ')summary' and ')copyright' commands
now work.

\start
Date: Wed, 16 Mar 2005 22:49:37 -0500
From: Bill Page
To: Mike Thomas
Subject: re: darcs patch: Remove system utilities.

Mike,

Thankyou for testing this and thanks for the patch!!!

On Wednesday, March 16, 2005 9:14 PM Mike Thomas wrote:
> 
> Following up on Bill's grand experiment with darcs you should 
> receive on this mailing list a patch generated with 'darcs send'
> dealing with the 'cat' and related Unix system utility bug on
> Windows.
> 
> In practical terms this means that the ')summary' and 
> ')copyright' commands
> now work.

Excellent! It worked perfectly.

Your patch appeared as an attachment in my email program.
I saved the attachment as a file named darcs-13421. Then
the commands

  cd axiom--windows--1
  darcs apply ../darcs-13421

applied the patch - just like snapping my fingers :)
I scp'd the file to axiom-developer.org and applied the
same patch to the repository. I was done in 20 seconds.

I am REALLY beginning to like darcs! :)

I would like to do the GCL 2.6.6 patches next. Since as
a patch this would be quite large because of the new gcl
tarball, if you are still on a slow internet link I can
do this from my local sources after my next rebuild
(by tomorrow).

\start
Date: Thu, 17 Mar 2005 14:11:53 +1000
From: Mike Thomas
To: Bill Page
Subject: re: darcs patch: Remove system utilities.

Hi Bill.

| I would like to do the GCL 2.6.6 patches next. Since as
| a patch this would be quite large because of the new gcl
| tarball, if you are still on a slow internet link I can
| do this from my local sources after my next rebuild
| (by tomorrow).

The computer I did the 2.6.6 patch on has a fast connection, but it seems
like overkill to do the 2.6.6 tarball that way.  I think you should go ahead
with your local sources unless there is some kind of problem there.

| Thanks again.

No worries.  I guess the proof of the pudding will ultimately be darcs ssh
write access.  Although I haven't downloaded Axiom on my slow connection
yet, Darcs worked flawlessly there on other, smaller, HTTP repositories.

| Cheers,

Indeed!  Have a good night.

\start
Date: Wed, 16 Mar 2005 23:34:01 -0600
From: MathAction (Zoran Spasojevic)
To: MathAction
Subject: [Axiom-mail] problems compiling axiom

Hello,
I previously compiled axiom without problems but this time on Fedora 
Core 3 I get the  error below after a few minutes of compiling. I would 
appreciate any suggestions that anyone may have to resolve this problem.
Thanks,
Zoran

gcc -c -Wall -DVOL=volatile -fsigned-char -pipe -O3 
-fomit-frame-pointer  -I/home/zoran/axiom/lsp/gcl-2.6.5/o -I../h 
-I../gcl-tk sfasl.c
In file included from sfasl.c:40:
sfaslbfd.c: In function `fasload':
sfaslbfd.c:266: error: structure has no member named `_raw_size'
sfaslbfd.c:291: error: structure has no member named `_raw_size'
sfaslbfd.c:356: error: structure has no member named `_raw_size'
make[4]: *** [sfasl.o] Error 1
make[4]: Leaving directory `/home/zoran/axiom/lsp/gcl-2.6.5/o'
make[3]: *** [unixport/saved_pre_gcl] Error 2
make[3]: Leaving directory `/home/zoran/axiom/lsp/gcl-2.6.5'
/bin/sh: unixport/saved_gcl: No such file or directory
make[2]: *** [gcldir] Error 127
make[2]: Leaving directory `/home/zoran/axiom/lsp'
make[1]: *** [lspdir] Error 2
make[1]: Leaving directory `/home/zoran/axiom'
make: *** [all] Error 2

\start
Date: Thu, 17 Mar 2005 00:01:23 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Axiom-mail] problems compiling axiom

Tim Daly reported this problem fixed in the February release
in CVS at Savannah.

What version of the source are you using?

On Thursday, March 17, 2005 12:29 AM Zoran Spasojevic wrote:
> I previously compiled axiom without problems but this time
> on Fedora Core 3 I get the  error below after a few minutes
> of compiling. I would appreciate any suggestions that anyone
> may have to resolve this problem.
> Thanks,
> Zoran
> 
> gcc -c -Wall -DVOL=volatile -fsigned-char -pipe -O3 
> -fomit-frame-pointer  -I/home/zoran/axiom/lsp/gcl-2.6.5/o -I../h 
> -I../gcl-tk sfasl.c
> In file included from sfasl.c:40:
> sfaslbfd.c: In function `fasload':
> sfaslbfd.c:266: error: structure has no member named `_raw_size'
> ...

\start
Date: Thu, 17 Mar 2005 03:39:25 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [RationalInterpolation] (nouveau) 

The package below implements rational interpolation. 

\begin{axiom}
)abbrev package RINTERPA RationalInterpolationAlgorithms
++ Description:
++ This package exports rational interpolation algorithms
RationalInterpolationAlgorithms(F, P): Cat == Body   where
    F: IntegralDomain 
    P: UnivariatePolynomialCategory(F)
    Cat == with
        RationalInterpolation: (List F, List F, NonNegativeInteger,
                                NonNegativeInteger) 
                               -> Fraction P
        +++ We assume that the elements of the first list are all distinct.
        +++ If they are not, division by zero might occur.

    Body == add
        RationalInterpolation(xlist, ylist, m, k) ==
            #xlist ^= #ylist =>
                error "Different number of points and values."
            #xlist ^= m+k+1 =>
                error "wrong number of points"
            tempvec: List F := [1 for i in 1..(m+k+1)]

            collist: List List F := cons(tempvec, 
                                         [(tempvec := [tempvec.i * xlist.i _
                                                       for i in 1..(m+k+1)]) _
                                          for j in 1..max(m, k)])

            collist := append([collist.j for j in 1..(m+1)], _
                              [[- collist.j.i * ylist.i for i in 1..(m+k+1)] _
                               for j in 1..(k+1)])
            resspace: List Vector F := nullSpace((transpose matrix collist) _
                                                 ::Matrix F)
            reslist: List List P := _
                      [[monomial((resspace.1).(i+1), i) for i in 0..m], _
                      [monomial((resspace.1).(i+m+2), i) for i in 0..k]]

            reduce((_+), reslist.1)/reduce((_+), reslist.2)


)abbrev package RINTERP RationalInterpolation
++ Description:
++ This package exports interpolation algorithms
RationalInterpolation(xx, F): Cat == Body   where
    xx: Symbol
    F:  IntegralDomain
    UP  ==> UnivariatePolynomial
    SUP ==> SparseUnivariatePolynomial
 
    Cat == with
        interpolate: (Fraction UP(xx, F), List F, List F, _
                      NonNegativeInteger, NonNegativeInteger) _
                      -> Fraction UP(xx, F)

        interpolate: (List F, List F, NonNegativeInteger, NonNegativeInteger) _
                      -> Fraction SUP F

    Body == add
        RIA ==> RationalInterpolationAlgorithms

        interpolate(qx, lx, ly, m, k) ==
            px := RationalInterpolation(lx, ly, m, k)$RIA(F, UP(xx, F))

            elt(px, qx)
 
        interpolate(lx, ly, m, k) ==
            RationalInterpolation(lx, ly, m, k)$RIA(F, SUP F)
\end{axiom}

\start
Date: Thu, 17 Mar 2005 03:42:05 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [Guessing formulas for sequences] (nouveau) 

The package defined below allows Axiom to guess a formula for a sequence whose first few terms are given.

\start
Date: Thu, 17 Mar 2005 03:44:36 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [CommonDenominator for polynomials] (nouveau) 

This package extends UnivariatePolynomialCommonDenominator for arbitrary polynomial categories. In fact, I don't understand why the original package is so restrictive.

\begin{axiom}
)abbrev package PCDEN PolynomialCommonDenominator
PolynomialCommonDenominator(R, Q, P, E, VarSet): Exports == Impl where
  R : IntegralDomain
  Q : QuotientFieldCategory R
  E : OrderedAbelianMonoidSup
  VarSet: OrderedSet
  P: PolynomialCategory(Q, E,VarSet)

  Exports ==> with
    commonDenominator: P -> R
      ++ commonDenominator(q) returns a common denominator d for
      ++ the coefficients of q.
    clearDenominator : P -> P
      ++ clearDenominator(q) returns p such that \spad{q = p/d} where d is
      ++ a common denominator for the coefficients of q.
    splitDenominator : P -> Record(num: P, den: R)
      ++ splitDenominator(q) returns \spad{[p, d]} such that \spad{q = p/d} and d
      ++ is a common denominator for the coefficients of q.
 
  Impl ==> add
    import CommonDenominator(R, Q, List Q)
 
    commonDenominator p == commonDenominator coefficients p
 
    clearDenominator p ==
      d := commonDenominator p
      map(numer(d * #1)::Q, p)
 
    splitDenominator p ==
      d := commonDenominator p
      [map(numer(d * #1)::Q, p), d]
\end{axiom}

\start
Date: Thu, 17 Mar 2005 09:27:07 +0000
From: Mark Murray
To: Tim Daly
Subject: Re: Axiom sprint day 
Cc: Bernice Rogowitz, Camm Maguire, Gilbert Baumslag

Tim Daly writes:
> *,
> 
> I'm working on setting up an agenda for the axiom sprint day.
> It appears that the morning will be spent discussing future 
> directions for Axiom. The rest of the time will be spent 
> cleaning up the IssueTracker items.

Excellent!

> Mark Murray will be joining us via phone as he cannot attend
> in person.

Would it be possible to split the agenda into two broad categories; 

1) Building, compiling, portability, etc
2) Mathematical direction.

?

I'd like to attend for the first bit only, please; Right now, I'm
concentrating on getting some building/compiling issues sorted out.

\start
Date: Thu, 17 Mar 2005 07:47:18 -0500
From: Tim Daly
To: Mark Murray
Subject: Re: Axiom sprint day
Cc: Bernice Rogowitz, Camm Maguire, Gilbert Baumslag

Yes, we can split the agenda.

\start
Date: Thu, 17 Mar 2005 13:23:32 +0000
From: Mark Murray
To: Tim Daly
Subject: Re: Axiom sprint day 
Cc: Bernice Rogowitz, Camm Maguire, Gilbert Baumslag

root writes:
> Yes, we can split the agenda.

Excellent, Thanks!

\start
Date: Thu, 17 Mar 2005 16:17:31 +0100
From: Pierre Doucy
To: list
Subject: [MACOSX] What is unexec and why does it fail ?

Hi all,

Attempting to compile Axiom on my Mac, I get the following error :

[...]
44 invoking make in
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src/boot
with parms:
SYS= MACOSX
LSP= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/lsp
PART= cprogs
SPAD= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt/MACOSX
SRC= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src
INT= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/int
OBJ= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj
MNT= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt
unexec: not enough room for load commands for new __DATA segments
make[3]: *** [/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj/MACOSX/bin/bootsys]
Error 1
make[2]: *** [bootdir] Error 2
make[1]: *** [srcdir] Error 2
make: *** [all] Error 2

As it looked like a memory problem, I changed my gcl configure options to:

./configure --enable-vssize=65536*4 --enable-maxpage=256*1024
--enable-machine=powerpc-macosx --enable-dlopen --disable-locbfd

but still get the same error.
After some googling, I haven't been able to find any clear doc about
what unexec is, and what it does.
Can anyone explain me what it is supposed to do, and why it might fail
in such a manner ?

Thank you in advance.

\start
Date: Thu, 17 Mar 2005 11:05:59 -0600
From: MathAction (Eugene Surowitz)
To: MathAction
Subject: [FrontPage]

Hi Bill:
The Frontpage uses "Axioms Community" in a couple of places;
I think it should read "Axiom's Community".

Cheers, Eugene Surowitz

billpage wrote:

>>
>??changed:
>-<hr />
>-<div style="font-size:smaller;text-align:right">
>-<a href="http://page.axiom-developer.org/zope/mathaction/FrontPage/editform">edit</a>
>-(administator only)</div>
><div style="font-size:smaller;text-align:right" class="shade1">
><a href="http://page.axiom-developer.org/zope/mathaction/FrontPage/editform">
><b>edit</b></a> (administator only)</div>
>

\start
Date: Thu, 17 Mar 2005 11:36:06 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [ExampleSolution1] Thanks for fixing the display problem

??changed:
-<pre>From wyscc, March 16, 2005 05:06:00</pre>
-
-
-
-The above does not really solve the problem on differentiation of a piecewise function, which, in my opinion, is an unreasonable expectation in general because of the multitude of ways to define the conditions; it may help if one uses the Heaviside function. The numerical definition of <code>N0(t)</code> is actually totally ignored in the definition of <code>N(t,i,p)</code> and thus also in the differentiation process, by the use of <code>operator('No)(t)</code>. Indeed, in the expression for <code>N</code> or its derivative with respect to <code>t</code>, the  "function" <code>N0</code> is still an <code>operator</code>, and as such, <code>N0(2)</code> is undefined! In other words, there is a distinction between the numerically defined function <code>N0</code> and the operator <code>N0</code>. This is illustrated below.
-
<pre>From wyscc, March 16, 2005 05:06:00, modified March 17 12:30:00</pre>

The above does not really solve the problem on differentiation of a piecewise function, which, in my opinion, is an unreasonable expectation in general because of the multitude of ways to define the conditions; it may help if one uses the Heaviside function, but in general, one probably needs techniques from automatic differentiation. The numerical definition of <code>N0(t)</code> is actually totally ignored in the definition of <code>N(t,i,p)</code> and thus also in the differentiation process, because of the use of <code>operator('No)(t)</code>. Indeed, in the expression for <code>N</code> or its derivative with respect to <code>t</code>, the  "function" <code>N0</code> is still an <code>operator</code>, and as such, <code>N0(2)</code> is undefined! In other words, there is a distinction between the numerically defined function <code>N0</code> and the operator <code>N0</code>. This is illustrated below.

\begin{axiom}
N(2,0,3)
\end{axiom}

Notice that the evaluation for <code>N0(2)</code> is not really done.

A common error when mixing numeric and symbolic
computation is to first define the derivative as a function of <code>t</code>
and then evaluate the derivative at some value of <code>t</code>, as in

\begin{verbatim}
dNdt(t)==D(N(t,0,3),t)
dNdt(2)
\end{verbatim}

This does not work because when <code>dNdt(2)</code> is called the system
(Axiom, or other systems) will substitute the value of <code>t=2</code> in
<code>N(t,0,3)</code> and <code>t</code> of <code>D(N(t,0,3),t)</code>
before differentiating, causing a run-time error. One way to avoid this error is to use substitution instead of a
function call, as done in the second line below. 

\start
Date: Thu, 17 Mar 2005 13:29:52 -0600
From: MathAction (markm)
To: MathAction
Subject: [#124 Build failure in CVS top-of-tree sources in src/hyper] Solution found

It turns out this is rather old Sun regexp code.

I found an _old_ manpage that describes step(), compile, loc1 and loc2, and I'll redo the offending function to use something a bit more modern and POSIX-compliant.

\start
Date: Thu, 17 Mar 2005 13:45:18 -0600
From: MathAction (markm)
To: MathAction
Subject:  [#125 src/hyper/Makefile.pamphlet uses htadd bare, causing build failure.] (new) 

src/hyper/Makefile uses htadd bare. As . or ${FOO}/bin is not in the path, this fails at build time.

\start
Date: Thu, 17 Mar 2005 21:46:19 -0600
From: MathAction (billpage)
To: MathAction
Subject: [Experiment #2] 

??changed:
-Cette page a Ă©tĂ© renommĂ©e en Â«EfficiencyProblemÂ». Vous pouvez supprimer celle-ci si elle n'est plus requise.
-
\begin{axiom}
)abbrev package RINTERPA RationalInterpolationAlgorithms
++ Description:
++ This package exports rational interpolation algorithms
RationalInterpolationAlgorithms(F, P): Cat == Body   where
    F: IntegralDomain 
    P: UnivariatePolynomialCategory(F)
    Cat == with
        RationalInterpolation: (List F, List F, NonNegativeInteger,
                                NonNegativeInteger) 
                               -> Fraction P
        +++ We assume that the elements of the first list are all distinct.
        +++ If they are not, division by zero might occur.

    Body == add
        RationalInterpolation(xlist, ylist, m, k) ==
            #xlist ^= #ylist =>
                error "Different number of points and values."
            #xlist ^= m+k+1 =>
                error "wrong number of points"
            tempvec: List F := [1 for i in 1..(m+k+1)]

            collist: List List F := cons(tempvec, 
                                         [(tempvec := [tempvec.i * xlist.i _
                                                       for i in 1..(m+k+1)]) _
                                          for j in 1..max(m, k)])

            collist := append([collist.j for j in 1..(m+1)], _
                              [[- collist.j.i * ylist.i for i in 1..(m+k+1)] _
                               for j in 1..(k+1)])
            resspace: List Vector F := nullSpace((transpose matrix collist) _
                                                 ::Matrix F)
            reslist: List List P := _
                      [[monomial((resspace.1).(i+1), i) for i in 0..m], _
                      [monomial((resspace.1).(i+m+2), i) for i in 0..k]]

            reduce((_+), reslist.1)/reduce((_+), reslist.2)
\end{axiom}

Next RationalInterpolation

\start
Date: Thu, 17 Mar 2005 21:51:08 -0600
From: MathAction (billpage)
To: MathAction
Subject: [PolynomialCommonDenominator] (new) 

\begin{axiom}
)abbrev package PCDEN PolynomialCommonDenominator
--% PolynomialCommonDenominator
++ Author: Martin Rubey
++ Date Created: 
++ Description: PolynomialCommonDenominator provides
++ functions to compute the common denominator of the coefficients of
++ polynomials over the quotient field of a gcd domain.
++ Keywords: gcd, quotient, common, denominator, polynomial.
 
PolynomialCommonDenominator(R, Q, P, E, VarSet): Exports == Impl where
  R : IntegralDomain
  Q : QuotientFieldCategory R
  E : OrderedAbelianMonoidSup
  VarSet: OrderedSet
  P: PolynomialCategory(Q, E,VarSet)

  Exports ==> with
    commonDenominator: P -> R
      ++ commonDenominator(q) returns a common denominator d for
      ++ the coefficients of q.
    clearDenominator : P -> P
      ++ clearDenominator(q) returns p such that \spad{q = p/d} where d is
      ++ a common denominator for the coefficients of q.
    splitDenominator : P -> Record(num: P, den: R)
      ++ splitDenominator(q) returns \spad{[p, d]} such that \spad{q = p/d} and d
      ++ is a common denominator for the coefficients of q.
 
  Impl ==> add
    import CommonDenominator(R, Q, List Q)
 
    commonDenominator p == commonDenominator coefficients p
 
    clearDenominator p ==
      d := commonDenominator p
      map(numer(d * #1)::Q, p)
 
    splitDenominator p ==
      d := commonDenominator p
      [map(numer(d * #1)::Q, p), d]
\end{axiom}

Next [Guess]

\start
Date: Fri, 18 Mar 2005 03:38:54 -0500
From: Tim Daly
To: Mark Murray
Subject: axiom--main--1--patch-31

Axiom has been moved to GCL-2.6.6

20050314 tpd gcl-2.6.6.h.linux.h.patch add run-process to GCL
20050314 tpd zip/ccl.tgz added
20050314 tpd src/algebra/Makefile reduce build noise
20050314 tpd Makefile change VERSION to "Axiom 5.4 (April 2005)"
20050314 tpd lsp/Makefile handle gcl-2.6.6
20050314 tpd zips/gcl-2.6.6.tgz added
20050213 tpd Makefile change the VERSION string to March 2005
20050213 tpd src/interp/nocompil.lisp #+:ccl protected-symbol-warn msg
20050213 tpd bug 89 Types in the full book fixed

\start
Date: Fri, 18 Mar 2005 11:04:07 +0000
From: Mark Murray
To: Tim Daly
Subject: Re: axiom--main--1--patch-31 

root writes:
> 
> Axiom has been moved to GCL-2.6.6
> 
> 
> 20050314 tpd gcl-2.6.6.h.linux.h.patch add run-process to GCL
> 20050314 tpd zip/ccl.tgz added
> 20050314 tpd src/algebra/Makefile reduce build noise
> 20050314 tpd Makefile change VERSION to "Axiom 5.4 (April 2005)"
> 20050314 tpd lsp/Makefile handle gcl-2.6.6
> 20050314 tpd zips/gcl-2.6.6.tgz added
> 20050213 tpd Makefile change the VERSION string to March 2005
> 20050213 tpd src/interp/nocompil.lisp #+:ccl protected-symbol-warn msg
> 20050213 tpd bug 89 Types in the full book fixed

Great!

How do I get the top of the axiom--BSD--1 branch to be as close as
possible to axiom--main--1 with GNU Arch?

I can't see any obvious way in the docs to merge branches, and the
Arch vs CVS different approaches are making my head hurt :-).

\start
Date: Fri, 18 Mar 2005 10:09:00 -0500
From: Bill Page
To: Tim Daly
Subject: RE: axiom--main--1--patch-31

Tim,

On Friday, March 18, 2005 3:39 AM you wrote:
> ...
> 20050314 tpd Makefile change VERSION to "Axiom 5.4 (April 2005)"
> ...

I thought we were calling the new version of Axiom 3.x?

Whence comes "Axiom 5.4"?

\start
Date: Fri, 18 Mar 2005 11:37:22 -0500
From: Tim Daly
To: Mark Murray
Subject: Re: axiom--main--1--patch-31

Mark,

Merging whole branches is generally done by hand.
But that's mostly my distrust of source code manipulatioin tools.
My general method is to do:

  diff -r --brief oldbranch newbranch

and then do individual file diffs with hand merges. Source code
is too important to let the tools change it. 

If you want to do it in an automated way I'd suggest hopping onto
the tla IRC channel. There are some helpful people there.

\start
Date: Fri, 18 Mar 2005 11:42:23 -0500
From: Tim Daly
To: Bill Page
Subject: Re: axiom--main--1--patch-31

ah. my internal version number slipped out. 
i'm still attached to dates for versions rather than random numbers.
i'll fix that before the april release.

\start
Date: Fri, 18 Mar 2005 17:27:42 +0000
From: Mark Murray
To: Tim Daly
Subject: Re: axiom--main--1--patch-31 

root writes:
> Merging whole branches is generally done by hand.
> But that's mostly my distrust of source code manipulatioin tools.
> My general method is to do:
> 
>   diff -r --brief oldbranch newbranch
> 
> and then do individual file diffs with hand merges. Source code
> is too important to let the tools change it. 

OK, given the ammount of stuff I needed to do, that was just not
feasible. I found out how to do it, and axiom--BSD--1 is now
near-identical to axiom--main--1.

I'm a heavy user of CVS, and one of the repository maintainers for
the FreeBSD sources, so I know it pretty well. Some of the things
you can't do easily in Arch are slowing me down a bit, but I'm
getting there.

> If you want to do it in an automated way I'd suggest hopping onto
> the tla IRC channel. There are some helpful people there.

\start
Date: Fri, 18 Mar 2005 14:03:59 -0600
From: MathAction (anonymous)
To: MathAction
Subject: 

src/hyper/Makefile.pamphlet references htadd relative to the global path.
rewrote to use ${SPADBIN} instead. 

\start
Date: Fri, 18 Mar 2005 15:28:23 -0600
From: MathAction (markm)
To: MathAction
Subject: [#126 /bin/sh vs /bin/bash scripting inconsistancy] (new) 

In src/algebra/makefile.pamphlet, is a 

@ if [ "${NOISE}" == "" ] ; then

construction. ${NOISE} contains "-o foo", and /bin/sh (not bash) doesn't like it.

Both /bin/sh (BSD) and /bin/bash like

  @ if [ -z "${NOISE}" ] ; then

which is the functional equivalent.

\start
Date: Fri, 18 Mar 2005 15:30:50 -0600
From: MathAction (markm)
To: MathAction
Subject: [#126 /bin/sh vs /bin/bash scripting inconsistancy] The result is a boatload of warnings in src/algebra

compiling STRING.spad to STRING.NRLIB
[: -o /home/ports/math/axiom/work/axiom-BSD-1/obj/tmp/trace: unexpected operator
copying STRING.NRLIB to STRING.o
compiling SYMFUNC.spad to SYMFUNC.NRLIB
[: -o /home/ports/math/axiom/work/axiom-BSD-1/obj/tmp/trace: unexpected operator
copying SYMFUNC.NRLIB to SYMFUNC.o
compiling VECTOR2.spad to VECTOR2.NRLIB
[: -o /home/ports/math/axiom/work/axiom-BSD-1/obj/tmp/trace: unexpected operator
copying VECTOR2.NRLIB to VECTOR2.o
compiling ASP1.spad to ASP1.NRLIB
[: -o /home/ports/math/axiom/work/axiom-BSD-1/obj/tmp/trace: unexpected operator
copying ASP1.NRLIB to ASP1.o
compiling ASP10.spad to ASP10.NRLIB
[: -o /home/ports/math/axiom/work/axiom-BSD-1/obj/tmp/trace: unexpected operator
copying ASP10.NRLIB to ASP10.o
compiling ASP24.spad to ASP24.NRLIB

... and so forth

\start
Date: Fri, 18 Mar 2005 18:17:54 -0500
From: Bill Page
To: Tim Daly
Subject: RE: axiom--main--1--patch-31

Tim,

On Friday, March 18, 2005 11:42 AM you wrote:
> 
> ah. my internal version number slipped out. 
> i'm still attached to dates for versions rather than
> random numbers. i'll fix that before the april release.
> 

No problem ...

You know how Knuth choose approximations to the number
\pi for version of TeX? Maybe for Axiom we should do the
same with %e? ;) Like so

  version 2.7
  version 2.72
  version 2.718

It seems appropriate that the implication that the project
is converging toward some goal, rather than drifting from
inspiration to inspiration like some other programs I know :)

Not seriously, but it might be fun.

Regards,
Bill Page.

\start
Date: Fri, 18 Mar 2005 18:34:24 -0500
From: Bill Page
To: Mark Murray
Subject: Re: axiom--main--1--patch-31 

On Friday, March 18, 2005 12:28 PM Mark Murray wrote:
> 
> root writes:
> > Merging whole branches is generally done by hand.
> > But that's mostly my distrust of source code manipulatioin
> > tools. My general method is to do:
> > 
> >   diff -r --brief oldbranch newbranch
> > 
> > and then do individual file diffs with hand merges.
> > Source code is too important to let the tools change
> > it.

This is one point that I cannot agree with Tim about.
I think in order for Axiom to advance it must begin to
depend on the use of more sophisticated and higher level
source code tools - after all we now longer write much
in assembler language... It's time we begin to put more
trust in the tools (the right tools, that is). Oh ya,
I guess it was Tim who has suggested that all of Axiom
should actullay be written in lisp "machine language" ;)

> 
> OK, given the ammount of stuff I needed to do, that was
> just not feasible. I found out how to do it, and
> axiom--BSD--1 is now near-identical to axiom--main--1.

Mark, I'm very glad to hear about someone using the more
advanced features of arch (star-merge, I presume?). If you
have a moment to spare, I think it would be great if you
could write up a little "I did it this way" recipe for others
to follow. I find most of the arch documentation too obscure
and unapplied to be easily digested. For my taste arch has
too many ways of doing things and a lot of them not obvious
nor intuitively named. But once you see how someone has made
it work in a real situation it seems much more clear.

\start
Date: Fri, 18 Mar 2005 15:32:30 -0800
From: Bob McElrath
To: Bill Page
Subject: Re: axiom--main--1--patch-31

I have a feeling Axiom will go through at least 42 more releases in its
lifetime.  (at least, I hope)  Somehow, I think people might not notice
that version 2.71828182845904523536028747135266249775724 is not the same
as 2.718281828459045235360287471352662497757247.  ;)

Ok how do I do that in axiom?

\begin{axiom}
%e@Float
\begin{axiom}

gives me the value, but how do I change the number of digits displayed?
My guess: %e@Float(42) is wrong...

Bill Page [Bill Page] wrote:
> Tim,
> 
> You know how Knuth choose approximations to the number
> \pi for version of TeX? Maybe for Axiom we should do the
> same with %e? ;) Like so
> 
>   version 2.7
>   version 2.72
>   version 2.718
> 
> It seems appropriate that the implication that the project
> is converging toward some goal, rather than drifting from
> inspiration to inspiration like some other programs I know :)
> 
> Not seriously, but it might be fun.

\start
Date: Fri, 18 Mar 2005 18:53:40 -0500
From: Bill Page
To: Bob McElrath
Subject: RE: axiom--main--1--patch-31

On Friday, March 18, 2005 6:33 PM Bob McElrath wrote:
> 
> I have a feeling Axiom will go through at least 42 more 
> releases in its lifetime.  (at least, I hope)  Somehow,
> I think people might not notice that version
> 2.71828182845904523536028747135266249775724
> is not the same as
> 2.718281828459045235360287471352662497757247.  ;)

I think Knuth only used this for **major** versions.
TeX is older and it is currently at version 3.141592

> 
> Ok how do I do that in axiom?
> 
> \begin{axiom}
> %e@Float
> \begin{axiom}
> 
> gives me the value, but how do I change the number of digits 
> displayed? My guess: %e@Float(42) is wrong...

\begin{axiom}
digits(2)
%e@Float
digits(3)
%e@Float
digits(4)
%e@Float
digits(5)
%e@Float
\begin{axiom}

Regards,
Bill Page.

> 
> Bill Page [Bill Page] wrote:
> > Tim,
> > 
> > You know how Knuth choose approximations to the number
> > \pi for version of TeX? Maybe for Axiom we should do the
> > same with %e? ;) Like so
> > 
> >   version 2.7
> >   version 2.72
> >   version 2.718
> > 

\start
Date: Fri, 18 Mar 2005 15:58:19 -0800
From: Bob McElrath
To: Bill Page
Subject: Re: axiom--main--1--patch-31

Bill Page [Bill Page] wrote:
> On Friday, March 18, 2005 6:33 PM Bob McElrath wrote:
> > 
> > I have a feeling Axiom will go through at least 42 more 
> > releases in its lifetime.  (at least, I hope)  Somehow,
> > I think people might not notice that version
> > 2.71828182845904523536028747135266249775724
> > is not the same as
> > 2.718281828459045235360287471352662497757247.  ;)
> 
> I think Knuth only used this for **major** versions.
> TeX is older and it is currently at version 3.141592

Of course, one could also number by Mersinne primes.  Then when you got
to the 42nd version you'd have to distribute a 100MB file with just the
version number in it!  ;)  Stable releases could be the ones that are
actually prime.  ;)

Oh it's friday, I'm getting silly again.

\start
Date: Sat, 19 Mar 2005 10:13:29 +0600 (NOVT)
From: Andrey G. Grozin
To: Bill Page
Subject: RE: axiom--main--1--patch-31

On Fri, 18 Mar 2005, Bill Page wrote:
> You know how Knuth choose approximations to the number
> \pi for version of TeX? Maybe for Axiom we should do the
> same with %e? ;) Like so
> 
>   version 2.7
>   version 2.72
>   version 2.718
This is exactly what Knuth did for Metafont.

By the way, I rather like the scheme
<version> = <year>.<month>
which seems to by the Tim Daly's internal numbering. It makes much sense, 
especially if releases are sheduled 1 per month. Many projects (Gentoo and 
Ubuntu, for example) use such scheme.

\start
Date: Sat, 19 Mar 2005 02:36:26 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [PolynomialCommonDenominator] Add example

++added:
Example use:

\begin{axiom}
)set mess type off
dom:=DMP([x,y], FRAC DMP([z],INT));
p:dom:=x*y^3/(z^2-1) + 3*x*y/(z^3-1)
commonDenominator p
clearDenominator p
splitDenominator p
\end{axiom}

\start
Date: Sat, 19 Mar 2005 10:24:52 +0100
From: Martin Rubey
To: Bill Page
Subject: RE: axiom--main--1--patch-31

Bill Page writes:
 > You know how Knuth choose approximations to the number
 > \pi for version of TeX? Maybe for Axiom we should do the
 > same with %e? ;) Like so
 > 
 >   version 2.7
 >   version 2.72
 >   version 2.718

This is the versioning of metafont, so it doesn't seem appropriate.

I like the patch number best, since it is then a trivial matter to generate the
appropriate source. Also, returning to my wish of letting the user specify an
axiom version, (in fact, needed only in IssueTracker): I guess it would make
this easier, too. Bill: It's needed only per page, at least for a start. You said,
you ran together the axiom environments to a pile. So, maybe it is possible to
store the optional argument of the first axiom environment into a variable and
then start the Axiom-executable indicated by this optional argument?

\start
Date: Sat, 19 Mar 2005 03:58:45 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [RationalInterpolationAlgorithms] Add example,	comments; display problem

++added:
Example (added by wyscc):

\begin{axiom}
f(x)== (x^3+5*x-3)/(x^2-3)
f(x)
xlist:List FRAC INT :=[1/2, 4, 1/6, 8, 1/10, 12]
ylist :=[f(x) for x in xlist]
RationalInterpolation(xlist, ylist, 3,2)$RINTERPA(FRAC INT,UP(x,FRAC INT))
\end{axiom}

A harder example:

\begin{axiom}
dom:=DMP([z],INT);
g:FRAC dom -> FRAC dom
g(x) == (x^3*z+5*z^2*x -3*z^3)/(z*x^2 - 3)
xxlist:List FRAC dom:=[1/(2*z), 4*z, 1/(6*z), 8*z, 1/(10*z), 12*z]
yylist:=[g(x) for x in xxlist]
RationalInterpolation(xxlist, yylist, 3::NNI, 2::NNI)$RINTERPA(FRAC dom, _
UP(x, FRAC dom))
\end{axiom}

Comments (from wyscc):

<OL>
<li>Abbreviations for a constructor should be limited to 7 letters (not 8). The system occasionally adds the 8th character to a package for internal use.
<li>Function names begin with a lower case, so <code>RationalInterpolation</code> should be <code>rationalInterpolation</code>, or better, <code>rationalInterpolate</code>.
<li>If we are doing a rational interpolation, presumably the values are rational, so it does not make sense to require the <code>y</code>-coordinates of inputs be integral. On the other hand, as in the above example, if one uses <code>FRAC INT</code>, problems can arise when this package is combined with other packages that constructs the quotient field of the parameter domain <code>F</code> because Axiom does not like constructing <code>FRAC FRAC INT</code> for example. 
<li>Since the variable is not specified by the package, but is required by the function call to <code>RationalInterpolation</code> (because of its signature), it seems more convenient to include the variable in the call to the package, to allow the Interpreter to locate the function more easily.
</OL>

Aside: Display problem:

\begin{itemize}
\item Can't use {\tt ABC} or <code>ABC</code> within LaTeX.
\end{itemize}

\start
Date: Sat, 19 Mar 2005 05:00:19 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [RationalInterpolationAlgorithms] Move back RationalInterpolation; example, question

??changed:
-Next RationalInterpolation
-
The package below implements rational interpolation. 
\begin{axiom}
)abbrev package RINTERP RationalInterpolation
++ Description:
++ This package exports interpolation algorithms
RationalInterpolation(xx, F): Cat == Body   where
    xx: Symbol
    F:  IntegralDomain
    UP  ==> UnivariatePolynomial
    SUP ==> SparseUnivariatePolynomial
 
    Cat == with
        interpolate: (Fraction UP(xx, F), List F, List F, _
                      NonNegativeInteger, NonNegativeInteger) _
                      -> Fraction UP(xx, F)
        interpolate: (List F, List F, NonNegativeInteger, NonNegativeInteger) _
                      -> Fraction SUP F

    Body == add
        RIA ==> RationalInterpolationAlgorithms

        interpolate(qx, lx, ly, m, k) ==
            px := RationalInterpolation(lx, ly, m, k)$RIA(F, UP(xx, F))
            elt(px, qx)
 
        interpolate(lx, ly, m, k) ==
            RationalInterpolation(lx, ly, m, k)$RIA(F, SUP F)
\end{axiom}

Comments: Packages compiled on MathAction seems to be local to the page. Dependent packages therefore needs to be on the same page to load the packages in correct sequence.

Example:

\begin{axiom}
interpolate(xlist, ylist, 3, 2)$RINTERP('x, FRAC INT)
interpolate(1/6::FRAC UP(x,FRAC INT), xlist, ylist, 3,2)$RINTERP('x,FRAC INT)
interpolate(xxlist, yylist, 3, 2)$RINTERP('x, FRAC dom)
interpolate(4*z::FRAC UP(x,dom), xxlist, yylist, 3, 2)$RINTERP('x, FRAC dom)
\end{axiom}

Question: If <code>p(xx) = interpolate(lx, ly, m, k)</code>, what is the purpose of
<code>elt(px, qx) = p(qx)</code>, the composition of <code>p(xx)</code> and <code>qx</code>, especially when <code>qx</code> is from <code>FRAC UP(xx, F)</code> instead of from just <code>F</code>? and why is this function (the composition) also called <code>interpolate</code>?

\start
Date: Sat, 19 Mar 2005 17:13:59 +0000
From: Mark Murray
To: Bill Page
Subject: re: axiom--main--1--patch-31 

"Bill Page" writes:
> > > and then do individual file diffs with hand merges.
> > > Source code is too important to let the tools change
> > > it.
> 
> This is one point that I cannot agree with Tim about.
> I think in order for Axiom to advance it must begin to
> depend on the use of more sophisticated and higher level
> source code tools - after all we now longer write much
> in assembler language... It's time we begin to put more
> trust in the tools (the right tools, that is). Oh ya,
> I guess it was Tim who has suggested that all of Axiom
> should actullay be written in lisp "machine language" ;)

I think I agree with this; one of the purposes of these SCM
tools is to help share the load, but it seems that aspect is
expressly forbidden for now. :-)

FWIW, the FreeBSD project has ahout 300 developers, of which
about 20-40 are really active, and this works really well.

An aspect of the way the Axiom project is run is still 
confusing me; there seems to be a combining of the concepts
of "release" and "commit", so getting hold of daily development
sources is Hard(tm). Is it not possible to make the more
speculative edits available in "CURRENT" form, and apply
a release-engineering methodology to preparing working
sources for the consumption of the unwashed masses? I'm
thinking of a CVS "HEAD" kind of approach, rather than
the multiple-Arch-repos approach that is currently there.

> > OK, given the ammount of stuff I needed to do, that was
> > just not feasible. I found out how to do it, and
> > axiom--BSD--1 is now near-identical to axiom--main--1.
> 
> Mark, I'm very glad to hear about someone using the more
> advanced features of arch (star-merge, I presume?).

Just plain "merge", IIRC. Things still take forever while tla
"phones home" on occaision, but I've discovered caching (but
not tried it yet), so this may improve.

>                                                      If you
> have a moment to spare, I think it would be great if you
> could write up a little "I did it this way" recipe for others
> to follow. I find most of the arch documentation too obscure
> and unapplied to be easily digested. For my taste arch has
> too many ways of doing things and a lot of them not obvious
> nor intuitively named. But once you see how someone has made
> it work in a real situation it seems much more clear.

I'll try :-). There are still things that Arch does in a really
roundabout way that I'm really battling with. Like:

1) How to quickly commit 1 file out of the tree.

2) How to find all the diffs in a nominated list of files or in
   a dir (and maybe its subdirs).

3) How to blow away all the edits to one file only, one dir
   only, one subtree only and one list of nominated files only.

4) How to quickly replicate the tree so a mechanical edit/commit
   can be done to pristine sources.

.... and I'll no doubt find more.

\start
Date: Sat, 19 Mar 2005 14:01:15 -0500
From: Tim Daly
To: Mark Murray
Subject: re: axiom--main--1--patch-31

> > > > and then do individual file diffs with hand merges.
> > > > Source code is too important to let the tools change
> > > > it.
> > 
> > This is one point that I cannot agree with Tim about.
> > I think in order for Axiom to advance it must begin to
> > depend on the use of more sophisticated and higher level
> > source code tools - after all we now longer write much
> > in assembler language... It's time we begin to put more
> > trust in the tools (the right tools, that is). Oh ya,
> > I guess it was Tim who has suggested that all of Axiom
> > should actullay be written in lisp "machine language" ;)
> 
> I think I agree with this; one of the purposes of these SCM
> tools is to help share the load, but it seems that aspect is
> expressly forbidden for now. :-)

forbidden?

> An aspect of the way the Axiom project is run is still 
> confusing me; there seems to be a combining of the concepts
> of "release" and "commit", so getting hold of daily development
> sources is Hard(tm). Is it not possible to make the more
> speculative edits available in "CURRENT" form, and apply
> a release-engineering methodology to preparing working
> sources for the consumption of the unwashed masses? I'm
> thinking of a CVS "HEAD" kind of approach, rather than
> the multiple-Arch-repos approach that is currently there.

you're still thinking in CVS terms it seems. Arch has the notion
of a changeset which is a single change that involves multiple files.
For instance, the -30 to -31 change is mostly about moving to GCL-2.6.6

There are various branches in the axiom archive, each subproject having
particular people associated with it (see arch.axiom-developer.org).
The HEAD branch is axiom--main--1. I don't do daily commits to this
branch. There would be no point. The changes I make are usually of
a large nature (e.g., add the browser, move GCLs, merge other branch
work, or periodic cleanups).

The flow of work seems to be:

  local changes 
    commit to a branch
      merge branch to main
        monthly merge of main to savannah, sourceforge

whereas in CVS projects it was normal to do a CVS ci  and also
to perform individual file changes. The two systems have completely
different mindsets (and changesets :-) ).

The "latest" axiom sources that can be reached are usually in a
branch. The main branch is at most a few weeks newer than the 
golden sources on sourceforge and savannah. The local changes
on my disk are always broken. Indeed, to do testing I usually 
have do download and build the main branch because I rarely have
a working copy available.

I chose to use arch because I follow the linux kernel work fairly
closely. They have moved the kernel to bitkeeper which is a proprietary
program. Arch was the closest I've found in the free world (SVN and
Darcs were the other choices). I'm not overjoyed with it but then I've 
never found a system that was obvious and clear. Arch is still an
experiment and I may yet change my mind. 

We should probably start an arch cookbook page on the axiom wiki.

\start
Date: Sat, 19 Mar 2005 18:59:49 +0000
From: Mark Murray
To: Tim Daly
Subject: re: axiom--main--1--patch-31 

root writes:
> > I think I agree with this; one of the purposes of these SCM
> > tools is to help share the load, but it seems that aspect is
> > expressly forbidden for now. :-)
> 
> forbidden?

Erm, I reread what I wrote, and it is rather unfortunately written.

Sorry.

I meant that developers don't get a hand in on the daily editing,
rather it is a

submit-to-queue; queue-is-processed; receive-from-queue

model, which while working, is single threaded, and there is more than 
one developer submitting stuff.

So I guess a better way of saying what I meant is that I think you are 
going to get swamped when more folks start to submit stuff, and may 
want to consider a bigger team (No, I have enough work, thank you!).

> you're still thinking in CVS terms it seems. Arch has the notion
> of a changeset which is a single change that involves multiple files.
> For instance, the -30 to -31 change is mostly about moving to GCL-2.6.6

Sure.

> The flow of work seems to be:
> 
>   local changes 
>     commit to a branch
>       merge branch to main
>         monthly merge of main to savannah, sourceforge
> 
> whereas in CVS projects it was normal to do a CVS ci  and also
> to perform individual file changes. The two systems have completely
> different mindsets (and changesets :-) ).

Us CVS folks would _kill_ for CVS to grow changesets, but we still
would demand our daily bread^Wsource. :-)

We substitute by trying to commit related fixes together, but CVS
doesn't help us much here.

> The "latest" axiom sources that can be reached are usually in a
> branch. The main branch is at most a few weeks newer than the 
> golden sources on sourceforge and savannah. The local changes
> on my disk are always broken. Indeed, to do testing I usually 
> have do download and build the main branch because I rarely have
> a working copy available.

The FreeBSD model, in terms of the above workflow is

local change
   commit to HEAD
      merge Good(tm) changes to STABLE branch
         release STABLE branch every 3 months or so

And all developers have continuous access to the repository, and they
all know WHO may commit WHAT to WHERE. The developer who committed to 
HEAD usually does the merge to STABLE, and they usually have a jolly 
good idea about what is Good(tm), because rather a lot of people are
running CURRENT (==HEAD). World+Dog can check out 1/2-hour old checkins
and see if they solve reported problems.

And this is distributed. HEAD must not be broken, but as work is
shared,it sometimes is. This is OK, as long as we are not in a release 
cycle, and as long as reports of breakage are reacted to and sorted out 
quickly enough. Breaking STABLE is a capital offense. ;-)

> I chose to use arch because I follow the linux kernel work fairly
> closely. They have moved the kernel to bitkeeper which is a proprietary
> program. Arch was the closest I've found in the free world (SVN and
> Darcs were the other choices). I'm not overjoyed with it but then I've 
> never found a system that was obvious and clear. Arch is still an
> experiment and I may yet change my mind. 

SCM choice is rather limited, I agree. Perforce is VERY good at 
branching and branch merging, and its free to OSS folks. Its very full 
featured also. FreeBSD uses it for the more speculative/risky 
development projects, where is is not clear that the work is useful or 
can be finished.

> We should probably start an arch cookbook page on the axiom wiki.

That would help a LOT.

\start
Date: Sat, 19 Mar 2005 13:14:24 -0600
From: MathAction (Mark Murray)
To: MathAction
Subject: [Axiom-mail] February 2005 release 

root writes:
> The February 2005 release of Axiom has been posted to:
> 
>  savannah.nongnu.org/projects/axiom
>  sourceforge.net/projects/axiom
>  arch.axiom-developer.org as axiom--main--1--patch-29

A FreeBSD port of this has been compiled for FreeBSD 5.3, and is 
available at

http://people.freebsd.org/~markm/axiom-0.0.tbz

Use pkg_add(1) to install it.

Please report FreeBSD-specific problems with the package to me, and 
more general problems to the Axiom lists.

This is a first cut at a FreeBSD release, there are no doubt a zillion 
things wrong with it. Handle with care.

\start
Date: Sat, 19 Mar 2005 15:13:56 -0500
From: Tim Daly
To: Mark Murray
Subject: usual development

in CVS you mention a flow of:

 local change
   commit to HEAD
     merge Good(tm) changes to STABLE branch
       release STABLE branch every 3 months or so

in Arch the HEAD==branch. rather than everyone working on the
same set of sources the branches allow you to work on BSD related
changes where Bill can work on Windows related changes. These 
get sorted at the merge-into-main step when the branch is considered
working. Thus rather than have 10 developers working on the HEAD
there are 1 or 2 developers working on individual branches. This
makes it less likely that they will step on each other.

It also allows us to explore structural changes such as your
suggestion of skipping the lsp subdir build, and complete rebuilds
such as the SBCL ansi common lisp branch. These are not possible 
under a CVS model except as a new project.

Arch has its problems though. I haven't figured out how to kill off
a whole branch. And the --no-pristine option does not seem to work.

\start
Date: Sat, 19 Mar 2005 20:01:13 +0000
From: Mark Murray
To: Tim Daly
Subject: Re: usual development 

root writes:
> in CVS you mention a flow of:
> 
>  local change
>    commit to HEAD
>      merge Good(tm) changes to STABLE branch
>        release STABLE branch every 3 months or so
> 
> in Arch the HEAD==branch. rather than everyone working on the
> same set of sources the branches allow you to work on BSD related
> changes where Bill can work on Windows related changes. These 
> get sorted at the merge-into-main step when the branch is considered
> working. Thus rather than have 10 developers working on the HEAD
> there are 1 or 2 developers working on individual branches. This
> makes it less likely that they will step on each other.

Right - but at some stage the issue of "Do my BSD changes break 
Windows?" crops up, and in the "all commits go to HEAD model", it means 
that thinking about this forms part of my work, it is not something 
that needs to be re-engineered later, particularly if the other 
developers and I are approaching the problem in horribly incompatible
ways.

It allows us to co-operate earlier, in other words. 

> It also allows us to explore structural changes such as your
> suggestion of skipping the lsp subdir build, and complete rebuilds
> such as the SBCL ansi common lisp branch. These are not possible 
> under a CVS model except as a new project.

Not really. The only project that I've seen which really tested CVS' 
limits that way was FreeBSD's 3-year mission to redesign the SMP 
fundamentals, and that was an _ENORMOUS_ piece of work that tore the 
kernel apart.

We've reorganised the tree, we've upgraded the C compiler, we've added 
new CPU architectures, we've sliced of big chinks of old code, and 
we've played very nasty games with cryptographic regulations of the 
incomprehensible kind. CVS worked, not always very well, but the 
development model was roundly affirmed.

> Arch has its problems though. I haven't figured out how to kill off
> a whole branch. And the --no-pristine option does not seem to work.

Yeah :-(.

Arch is not very feature-rich. It may get there, who knows? :-)

I guess the most important part of what I'm on about, though, is how 
the Axiom project is going to scale once (when!) it gets popular. Once 
the submissions start pouring in, how are you going to cope?

I understand, (and fervently hope!) that it will be an extraordinarily 
comprehensive mathematics package, and I'm suggesting that the Linus 
Torvalds' Linux kernel development model won't scale very well. I'd LOVE
to be proven wrong :-).

\start
Date: Sat, 19 Mar 2005 14:59:58 -0600
From: MathAction (anonyme)
To: MathAction
Subject: [Guessing formulas for sequences] 


??changed:
-The package defined below allows Axiom to guess a formula for a sequence whose first few terms are given.
-
  We present a software package that guesses formulas for sequences of rational
  numbers, rational functions and also more complicated formulas, given the
  first few terms. Thereby we extend and complement Christian Krattenthaler's
  program 'Rate', Doron Zeilberger's program 'GuessRat' and the relevant parts
  of Bruno Salvy and Paul Zimmermann's 'GFUN'.

  Introduction

    For some a brain-teaser, for others one step in proving their next theorem:
given the first few terms of a sequence of, say, integers, what is the next
term, what is the general formula? Of course, no unique solution exists,
however, by Occam's razor, we will prefer a "simple" formula over a more
"complicated" one.

Some sequences are very easy to "guess", like
\begin{equation}
1,4,9,16,\dots,
\end{equation}
or
\begin{equation}
1,1,2,3,5,\dots.
\end{equation}
Of course, at times we might want to guess a formula for a sequence of
polynomials, too:
\begin{equation}
1,1+q+q^2,(1+q+q^2)(1+q^2),(1+q^2)(1+q+q^2+q^3+q^4)\dots,
\end{equation}
or
\begin{equation}
\begin{split}
1, 1, 1 + q, 1 + q + q^2, 1 + q + q^2 + q^3 + q^4, 1 + q + q^2 + q^3 + 2q^4 +
q^5 + q^6,\\
1 + q + q^2 + q^3 + 2q^4 + 2q^5 + 2q^6 + q^7 + q^8 + q^9, (1 + q^4 + q^6)(1 +
q + q^2 + q^3 + q^4 + q^5 + q^6),\\
(1 + q^4)(1 + q + q^2 + q^3 + q^4 + q^5 + 2q^6 + 2q^7 + 2q^8 + 2q^9 + q^{10} +
q^{11} + q^{12}),\dots
\end{split}
\end{equation}

Fortunately, with the right tool, it is a matter of a moment to figure out
formulas for all of these sequences. In this article we describe a computer
program that encompasses well known techniques and adds new ideas that we hope
to be very effective.

We would also like to mention *The online encyclopedia of integer sequences* of
Neil Sloane. There, you can enter a sequence of integers and chances are good
that the website will respond with one or more likely matches.  However, the
approach taken is quite different from ours: the encyclopedia keeps a list of
currently 103,667 sequences, entered manually, and it compares the given
sequence with each one of those. Besides that, it tries some simple
transformations on the given sequence to find a match.  Furthermore it tries
some simple programs we will describe below to find a formula, although with a
time limit, i.e., it gives up when too much time has elapsed.

Thus, the two approaches complement each other: For example, there are
sequences where no simple formula is likely to exist, and which can thus be
found only in the encyclopedia. On the other hand, there might be sequences
that have not yet found their way into the encyclopedia, but can be guessed in
a few minutes by your computer.

  Guessing Algorithms

    A formula for Sequence (1), is almost trivial to guess: it seems
obvious that it is $n^2$. More generally, if we believe that the sequence in
question is generated by a polynomial, we can simply apply interpolation.
However, how can we "know" that a polynomial formula is appropriate? The answer
is quite simple: we use all but the last term of the sequence to derive the
formula. After this, the last term is compared with the value predicted by the
polynomial. If they coincide, we can be confident that the guessed formula is
correct.

The second sequence does not seem to be generated by a polynomial. However,
paralleling interpolation, Pad\'e approximation may be used to find out whether
the terms of the sequence satisfy a linear reccurrence with constant
coefficients, as is the case here.

We would like to point out that the main problem we have to solve is about
efficiency. For example, maybe we would like to test whether the formula is
rational with an Abelian term, i.e., has the form
\begin{equation}
  n\mapsto (a+bn)^n \frac{a_0+a_1 n+a_2 n^2+\dots+a_k n^k}
                         {1+b_1 n+b_2 n^2+\dots+b_l n^l}
\end{equation}
for some $k$ and $l$. Of course, we could set up an appropriate system of
$k+l+4$ polynomial equations in $k+l+3$ unknowns. However, it will usually take
a very long time to solve this system. Thus, we need to find *efficient*
algorithms that test for large classes of formulas.


It is obvious that the first method described is easily extended to cover
rational functions via rational interpolation. Similarly, the second method can
be extended to cover differentially finite or even differentially algebraic
functions. One of the contributions of this article is to show that there is
also a feasible way to guess sequences generated by Formula~\ref{eq5}.

  Operators

    Still, there are a lot of formulas which cannot be found using interpolation or
Pade approximation. However, it occurs frequently that although a formula is
not rational, applying one of the two following operators makes it rational:

  - $\Delta_n$ the differencing operator, transforming $f(n)$ into
  $f(n)-f(n-1)$, and
  - $Q_n$ the operator that transforms $f(n)$ into $f(n)/f(n-1)$.

Thus, we simply apply these operators recursively to the sequence, until we are
able to guess a formula using interpolation, Pad\'e approximation or one of its
extensions.

  Using the package

    In this section we describe how to guess a formula for your favorite sequence
with the 'Axiom' package 'Guess'.

The package provides currently four primitive guessing functions, namely:

  - 'guessRat' for guessing rational functions,
  - 'guessExpRat' for guessing rational functions with an Abelian-type
    term as in (5),
  - 'guessPade' for guessing sequences defined by a recurrence with
    constant coefficients, and
  - 'guessPRec' for guessing sequences defined by a recurrence with
    polynomial coefficients.

Among these, 'guessRat' and 'guessPade' are very fast, 'guessPRec'
is reasonably fast and 'guessExpRat' is rather slow. 

    Guessing formulas for sequences of rational numbers

      For example, if we suspect that a sequence of integers or rationals like
Sequence (2) satisfies a simple recurrence, we type::

  guessPade(n, [1, 1, 2, 3, 5], n+->n)\$GuessInteger

to obtain an answer like
\begin{equation*}
 \left[
{\left[ {function={coefficient 
\left(
{-{1 \over {{ x \sp 2}+ x -1}}, \: x, \: n} 
\right)}},
\: {order=1} 
\right]}
\right]
\end{equation*}

Thus, we used the operation 'guessPade' from the package 'GuessInteger' to
guess the $n^{th}$ term of the sequence 1,1,2,3,5. The meaning of 'n+->n'
will be made clear later.

The result is a list of formulas which seem to fit, along with an integer that
states from which term on the formula is correct. The latter is necessary,
because rational interpolation features sometimes *unattainable points*,
as the following example shows::

  guessRat(n, [3, 4, 7/2, 18/5, 11/3, 26/7], n+->n)\$GuessInteger

returns
\begin{equation*}
\left[
{\left[ {function={{4n+2} \over {n+1}}}, \: {order=3} 
\right]}
\right].
\end{equation*}
Here, $order=3$ indicates that the first two terms of the sequence *might* not
coincide with the value of the returned function. A similar situation occurs,
if the function generating the sequence has a pole at $n_0\in\mathbb N$, where
$0 < n_0 < m$ and $m$ is the number of given values. We would like to stress
that this is rather a feature than a "bug": most terms will be correct,
just as in the example above, where the value at $n=1$ is indeed $3$.

Apart from 'guessRat', 'guessExpRat', 'guessPade' and 'guessPRec', the package
provides a top level operation 'guess', which applies the operators $\Delta_n$
and $Q_n$ recursively to the given sequence and then tries the specified
guessing algorithms. For example, given the sequence
\begin{equation*}
0,1,3,9,33,\dots,
\end{equation*}
the appropriate function is::

  guess(n, [0, 1, 3, 9, 33], n+->n, [guessRat, guessPade], 
        [guessSum, guessProduct, guessOne])\$GuessInteger

and the output will be - apart from some information on the progress -
\begin{equation*}
\left[
{\left[ {function={\sum \sb{\displaystyle {{s \sb {5}}=1}} \sp{\displaystyle 
{n -1}} {\prod \sb{\displaystyle {{p \sb {4}}=1}} \sp{\displaystyle {{s \sb 
{5}} -1}} {({p \sb {4}}+1)}}}}, \: {order=1} 
\right]}
\right].
\end{equation*}

Thus, 'guess' takes five parameters. The first three parallel the parameters in
the other guessing functions. The fourth parameter is a list of guessing
functions to be tried, in the example 'guessRat' and 'guessPade'. The fifth
parameter specifies which operators should be applied.  Additionally the option
'guessOne' can be specified, which tells the program to stop immediately if one
fitting function has been found.
[77 more lines...]

\start
Date: Sat, 19 Mar 2005 15:44:44 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#127 Charles Miller] (new) 

Building axiom from source fails on my Fedora Core 3 system at the
following:


36 making /home/cfm/spad/axiom/mnt/fedora3/doc/src/boot/typrops.boot.dvi from /home/cfm/spad/axiom/src/boot/typrops.boot.pamphlet
40 making /home/cfm/spad/axiom/mnt/fedora3/doc/src/boot/tytree1.boot.dvi from /home/cfm/spad/axiom/src/boot/tytree1.boot.pamphlet
44 invoking make in /home/cfm/spad/axiom/src/boot with parms:
SYS= fedora3
LSP= /home/cfm/spad/axiom/lsp
PART= cprogs
SPAD= /home/cfm/spad/axiom/mnt/fedora3
SRC= /home/cfm/spad/axiom/src
INT= /home/cfm/spad/axiom/int
OBJ= /home/cfm/spad/axiom/obj
MNT= /home/cfm/spad/axiom/mnt
make[3]: *** [/home/cfm/spad/axiom/obj/fedora3/bin/bootsys] Error 255
make[3]: Leaving directory `/home/cfm/spad/axiom/src/boot'
make[2]: *** [bootdir] Error 2
make[2]: Leaving directory `/home/cfm/spad/axiom/src'
make[1]: *** [srcdir] Error 2
make[1]: Leaving directory `/home/cfm/spad/axiom'
make: *** [all] Error 2
cfm@cfm-pclap ~/spad/axiom %

Not very informative to me.

It seems to have finished building gcl. Since there is a binary
for FC3, someone must have built it successfully.

Chuck Miller

\start
Date: Sun, 20 Mar 2005 03:38:10 -0600
From: MathAction (anonyme)
To: MathAction
Subject: [Guessing formulas for sequences] 

We present a software package that guesses formulas for sequences of rational
numbers, rational functions and also more complicated formulas, given the first
few terms. Thereby we extend and complement Christian Krattenthaler's program
\Rate, Doron Zeilberger's program 'GuessRat' and the relevant parts of Bruno
Salvy and Paul Zimmermann's 'GFUN'.

Introduction

  For some a brain-teaser, for others one step in proving their next theorem:

    A formula for Sequence (1), is almost trivial to guess: it seems
obvious that it is $n^2$. More generally, if we believe that the
sequence in question is generated by a polynomial, we can simply apply
interpolation.  However, how can we "know" that a polynomial formula
is appropriate? The answer is quite simple: we use all but the last
term of the sequence to derive the formula.  After this, the last term
is compared with the value predicted by the

the methods described above. For example, they fail for Sequences (3) and (4).
However, the functions demonstrated above all had an argument 'n+->n' we did
not explain yet!

++added:

    Some remarks
    
      - All of the presented guessing algorithms are insensitive to the shift
        operator. I.e., if a formula for the sequence $(s_1,s_2,\dots,s_m)$ can be
        guessed, then the corresponding formula for $(s_2,s_3,\dots,s_{m+1})$ will
        be found, too.
        
        - Except of the class of functions covered by 'guessExpRat', all are
        closed under addition. I.e., if formulas for $(s_1,s_2,\dots,s_m)$ and
        $(t_1,t_2,\dots,t_m)$ can be guessed, then also for
        $(s_1+t_1,s_2+t_2,\dots,s_m+t_m)$. However, the class of functions of
        type (5) is not even closed under addition of a constant! On the other
        hand, all classes are closed under multiplication.
        
        - Note that the class of functions covered by 'guessPRec', i.e., the
        class of $D$-finite functions, is closed under the operator $\Delta_n$.
        Thus, it does not make to try to guess a function for some sequence $s$
        with::

          guess(n, s, n+->n, [guessPRec], [guessSum]).

        The situation is very different, if the operator 'guessProduct' is
        specified, too. The class of functions covered by::

          guess(n, s, n+->n, [guessPRec], [guessSum, guessProduct])

        is bigger than the class of functions::

          guess(n, s, n+->n, [guessPRec], [guessProduct])!

\start
Date: Sun, 20 Mar 2005 13:29:20 +0000
From: Mark Murray
To: Tim Daly
Subject: Re: axiom--main--1--patch-31 

root writes:
> 
> Axiom has been moved to GCL-2.6.6

axiom--BSD--1--patch-11 has the working (Free)BSD build.

\start
Date: Sun, 20 Mar 2005 12:40:26 -0500
From: Tim Daly
To: Mark Murray
Subject: Re: axiom--main--1--patch-31

excellent. i'll look at the merge issues. --t

\start
Date: Sun, 20 Mar 2005 12:08:29 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [Guessing formulas for sequences] 

  There are two bugs in the version of Axiom currently run on this
server that prevent parts of the package from working properly. One
bug, #63, prevents 'guessPade' from working. Another bug, #8 messes up
the output by missing some parenthesis. Preliminary patches for both
are available, we hope that they will soon be fixed here, too.

Please add other bugs you find to IssueTracker by clicking on "issues"
on the top left of any page and filling out the appropriate forms.

Finally, please feel free to try this package in the SandBox!

Abstract

  We present a software package that guesses formulas for sequences of rational

with the 'Axiom' package 'Guess'. To load the package we type
\begin{axiom}
)lib RINTERPA RINTERP PCDEN GUESS GUESSINT GUESSP
\end{axiom}
The package provides currently four primitive guessing functions, namely:

Sequence (2) satisfies a simple recurrence, we type

\begin{axiom}
guessPade(n, [1, 1, 2, 3, 5], n+->n)$GuessInteger
\end{axiom}

??changed:
-  guessRat(n, [3, 4, 7/2, 18/5, 11/3, 26/7], n+->n)\$GuessInteger
-
-returns
-\begin{equation*}
-\left[
-{\left[ {function={{4n+2} \over {n+1}}}, \: {order=3} 
-\right]}
-\right].
-\end{equation*}
\begin{axiom}
guessRat(n, [3, 4, 7/2, 18/5, 11/3, 26/7], n+->n)$GuessInteger
\end{axiom}


??changed:
-the appropriate function is::
-
-  guess(n, [0, 1, 3, 9, 33], n+->n, [guessRat, guessPade], 
-        [guessSum, guessProduct, guessOne])\$GuessInteger
-
-and the output will be - apart from some information on the progress -
-\begin{equation*}
-\left[
-{\left[ {function={\sum \sb{\displaystyle {{s \sb {5}}=1}} \sp{\displaystyle 
-{n -1}} {\prod \sb{\displaystyle {{p \sb {4}}=1}} \sp{\displaystyle {{s \sb 
-{5}} -1}} {({p \sb {4}}+1)}}}}, \: {order=1} 
-\right]}
-\right].
-\end{equation*}
the appropriate function is

\begin{axiom}
guess(n, [0, 1, 3, 9, 33], n+->n, 2, [guessRat], 
        [guessSum, guessProduct, guessOne])$GuessInteger
\end{axiom}

??changed:
-For example::
-
-      guess(n, [1, 1+q, 1+q+q^2, 1+q+q^2+q^3], n+->n, [guessRat], 
-            [guessSum, guessProduct])\$GuessPolynomial
-
-returns
-\begin{equation*}
-\left[
-{\left[ {function={\sum \sb{\displaystyle {{s \sb {2}}=1}} 
-\sp{\displaystyle {n -1}} {q \ {q \sp {\left( {s \sb {2}} -1 
-\right)}}}+1}},
-\: {order=1} 
-\right]}
-\right].
-\end{equation*}
For example

\begin{axiom}
guess(n, [1, 1+q, 1+q+q^2, 1+q+q^2+q^3], n+->n, [guessRat], 
         [guessSum, guessProduct])$GuessPolynomial
\end{axiom}

??changed:
-'n+->q^n'. For example::
-
-  guessRat(n, [1,1+q+q^2,(1+q+q^2)*(1+q^2),
-               (1+q^2)*(1+q+q^2+q^3+q^4)], n+->q^n)\$GuessPolynomial
-
-returns
-\begin{equation*}
-\left[
-{\left[ {function={{{q \  {q \sp {\left( 2 \  n 
-\right)}}}+{{\left(
--q -1 
-\right)}
-\  {q \sp n}}+1} \over {{q \sp 3} -{q \sp 2} -q+1}}}, \: {order=1} 
-\right]}
-\right]  
-\end{equation*}
'n+->q^n'. For example

\begin{axiom}
guessRat(n, [1,1+q+q^2,(1+q+q^2)*(1+q^2),
               (1+q^2)*(1+q+q^2+q^3+q^4)], n+->q^n)$GuessPolynomial
\end{axiom}


??changed:
-Sequence (4) ::
-
-  guessPRec(n,[1, 1, 1+q, 1+q+q^2, 1+q+q^2+q^3+q^4, 
-             1+q+q^2+q^3+2*q^4+q^5+q^6,
-             1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9, 
-             (1+q^4+q^6)*(1+q+q^2+q^3+q^4+q^5+q^6),
-             (1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7
-             +2*q^8+2*q^9+q^10+q^11+q^12)], n+->q^n)\$GuessPolynomial
-
-yields
-\begin{equation*}
-  \left[
-{\left[ {function={rootof 
-\left(
-{{-{{ x 
-\left(
-{n} 
-\right)}
-\  {q \sp n}}+{ x 
-[11 more lines...]
Sequence (4)

\begin{axiom}
guessPRec(n,[1, 1, 1+q, 1+q+q^2, 1+q+q^2+q^3+q^4, 1+q+q^2+q^3+2*q^4+q^5+q^6, 1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9, 1+q+q^2+q^3+q^4+q^5+q^6, (1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7+2*q^8+2*q^9+q^10+q^11+q^12)], n+->q^n)$GuessPolynomial
\end{axiom}

\start
Date: Sun, 20 Mar 2005 14:01:47 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#122 Handling of power series] With complex doesn't print expansion point (type)

<pre>
file:     msgdb.boot.pamphlet
function: brightPrint0

  x = '"%i" =>
    $MARG := $MARG + 3
------------------------
Each message may contain formatting codes and and parameter codes.
The formatting codes are:
   %b          turn on bright printing
   %ceoff      turn off centering
   %ceon       turn on centering
   %d          turn off bright printing
   %f          user defined printing
   %i          start indentation of 3 more spaces
   %l          start a new line
   %m          math-print an expression
   %rjoff      turn off right justification (actually ragged left)
   %rjon       turn on right justification (actually ragged left)
   %s          pretty-print as an S-expression
   %u          unindent 3 spaces
   %x#         insert # spaces


</pre>

\start
Date: Sun, 20 Mar 2005 14:30:14 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#122 Handling of power series] With complex doesn't print expansion point (type)

<pre>
file:     msgdb.boot.pamphlet
function: brightPrint0

  x = '"%i" =>
    $MARG := $MARG + 3
------------------------
Each message may contain formatting codes and and parameter codes.
The formatting codes are:
   %b          turn on bright printing
   %ceoff      turn off centering
   %ceon       turn on centering
   %d          turn off bright printing
   %f          user defined printing
   %i          start indentation of 3 more spaces
   %l          start a new line
   %m          math-print an expression
   %rjoff      turn off right justification (actually ragged left)
   %rjon       turn on right justification (actually ragged left)
   %s          pretty-print as an S-expression
   %u          unindent 3 spaces
   %x#         insert # spaces


</pre>

\start
Date: Sun, 20 Mar 2005 14:22:28 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#122 Handling of power series] With binary infix operator in expansion point, transform it to fortran in type

\begin{axiom}
series(sin(x))
series(sin(x),x=pi/2)
series(sin(x),x=%e)
series(sin(x),x=%e+3)
series(sin(x),x=%i+7
\end{axiom}
<pre>
file:                  format.boot.pamphlet
Infix Binary Operator: "=" "+" "-" "*" "/" "**" "^" (i-output.boot.pamphlet => function isBinaryInfix)
function:              form2String1 call fortexp0
 
   isBinaryInfix op => fortexp0 [op,:argl]

----------------------------------------
In fortPre1 (file:newfort.boot.pamphlet)

  fortPre1 e ==
    -- replace spad function names by Fortran equivalents
    -- where appropriate, replace integers by floats
    -- extract complex numbers
    -- replace powers of %e by calls to EXP
    -- replace x**2 by x*x etc.
    -- replace ROOT by either SQRT or **(1./ ... )
    -- replace N-ary by binary functions
    -- strip the '%' character off objects like %pi etc..
</pre>

\start
Date: Sun, 20 Mar 2005 14:33:59 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#122 Handling of power series] With binary infix operator in expansion point,	transform it to fortran (displayed type)

\begin{axiom}
series(sin(x),x=%pi/2)
series(sin(x),x=%e)
series(sin(x),x=%e+3)
series(sin(x),x=%i+7)
\end{axiom}
<pre>
file:                  format.boot.pamphlet
Infix Binary Operator: "=" "+" "-" "*" "/" "**" "^" (i-output.boot.pamphlet => function isBinaryInfix)
function:              form2String1 call fortexp0
 
   isBinaryInfix op => fortexp0 [op,:argl]

----------------------------------------
In fortPre1 (file:newfort.boot.pamphlet)

  fortPre1 e ==
    -- replace spad function names by Fortran equivalents
    -- where appropriate, replace integers by floats
    -- extract complex numbers
    -- replace powers of %e by calls to EXP
    -- replace x**2 by x*x etc.
    -- replace ROOT by either SQRT or **(1./ ... )
    -- replace N-ary by binary functions
    -- strip the '%' character off objects like %pi etc..
</pre> 

\start
Date: Sun, 20 Mar 2005 15:31:55 -0600
From: MathAction (billpage)
To: MathAction
Subject: [#127 Building axiom from source fails on my Fedora Core 3] (renamed)

This page was renamed from #127 Charles Miller to #127 Building axiom from source fails on my Fedora Core 3.

\start
Date: Sun, 20 Mar 2005 20:43:04 -0600
From: MathAction (billpage)
To: MathAction
Subject: [Guess] (new) 

\begin{axiom}
)abbrev package GUESS Guess
++ Description:
++ This package implements guessing of sequences
Guess(F, S, EXPRR, R, retract, coerce): Exports == Implementation where
    F: Field                                 -- zB.: FRAC POLY PF 5
-- in F wird interpoliert und gerechnet 

    S: GcdDomain

-- in guessExpRat mďż˝chte ich die Wurzeln von Polynomen ďż˝ber F bestimmen. Wenn F
-- ein Quotientenkďż˝rper ist, dann kann ich den Nenner loswerden.
-- F wďż˝re dann also QFCAT S

    R: Join(OrderedSet, IntegralDomain)      -- zB.: FRAC POLY INT

-- die Ergebnisse werden aber in EXPRR dargestellt
    EXPRR: Join(ExpressionSpace, IntegralDomain, 
                RetractableTo R, RetractableTo Symbol, 
                RetractableTo Integer, CombinatorialOpsCategory) with
              _* : (%,%) -> %
              _/ : (%,%) -> %
              _*_* : (%,%) -> %
              numerator : % -> %
              denominator : % -> %

                                             -- zB.: EXPR INT
-- EXPR FRAC POLY INT ist ja verboten. Deshalb kann ich nicht einfach EXPR R
-- verwenden
-- EXPRR existiert, falls irgendwann einmal EXPR PF 5 unterstďż˝tzt wird.


-- das folgende mďż˝chte ich eigentlich loswerden.
  
    retract: R -> F                          -- zB.: i+->i
    coerce: F -> EXPRR                       -- zB.: i+->i
-- Achtung EXPRR ~= EXPR R

    NNI ==> NonNegativeInteger
    PI ==> PositiveInteger
    EXPRI ==> Expression Integer
    GUESSRESULT ==> List Record(function: EXPRR, order: PI)
    GUESSER ==> (Symbol, List F, BASIS) -> GUESSRESULT
    BASIS ==> EXPRI -> EXPRR                 -- zB.: i+->q^i
-- brauche hier EXPRI, weil das Ergebnis ja die allgemeine Form enthďż˝lt

    Exports == with
      guess: (Symbol, List F, BASIS, List GUESSER, List Symbol, NNI) -> GUESSRESULT

      guessRat: (Symbol, List F, BASIS) -> GUESSRESULT

      guessExpRat: (Symbol, List F, BASIS) -> GUESSRESULT

      guessPade: (Symbol, List F, BASIS) -> GUESSRESULT

      guessPRec: (Symbol, List F, BASIS) -> GUESSRESULT

    Implementation == add

      basis2: (BASIS, Integer) -> F
      basis2 (basis, i) == retract(retract(basis(i::EXPRI))@R)

      SUP ==> SparseUnivariatePolynomial
      SUPF ==> SUP F
      FSUPF ==> Fraction SUP F
      V ==> OrderedVariableList(['a1, 'A])
      POLYF ==> SparseMultivariatePolynomial(F, V)
      FPOLYF ==> Fraction POLYF
      FSUPFPOLYF ==> Fraction SUP FPOLYF
      POLYS ==> SparseMultivariatePolynomial(S, V)

      MPCSF ==> MPolyCatFunctions2(V, IndexedExponents V, 
                                      IndexedExponents V, S, F,
                                      POLYS, POLYF)
      MPCFS ==> MPolyCatFunctions2(V, IndexedExponents V, 
                                      IndexedExponents V, F, S,
                                      POLYF, POLYS)

      SUPF2EXPRR: (Symbol, SUP F) -> EXPRR
      SUPF2EXPRR(xx, p) ==
        zero? p => 0
        (coerce(leadingCoefficient p))::EXPRR * (xx::EXPRR)**degree p
           + SUPF2EXPRR(xx, reductum p)

      FSUPF2EXPRR: (Symbol, FSUPF) -> EXPRR
      FSUPF2EXPRR(xx, p) ==
        (SUPF2EXPRR(xx, numer p)) / (SUPF2EXPRR(xx, denom p))

      SUPS2SUPF: SUP S -> SUP F
      SUPS2SUPF p ==
        if F is S then 
          p pretend SUP(F)
        else if F is Fraction S then
          map(coerce(#1)$Fraction(S), p)
            $SparseUnivariatePolynomialFunctions2(S, F)
        else error "Type parameter F should be either equal to S or equal _
                    to Fraction S"

      POLYS2POLYF: POLYS -> POLYF
      POLYS2POLYF p ==
        if F is S then 
          p pretend POLYF
        else if F is Fraction S then
          map(coerce(#1)$Fraction(S), p)$MPCSF
        else error "Type parameter F should be either equal to S or equal _
                    to Fraction S"

      SUPFPOLYF2SUPF: (SUP FPOLYF, F, F) -> SUP F
      SUPFPOLYF2SUPF(p, a1v, Av) ==
        zero? p => 0
        lc: FPOLYF := leadingCoefficient(p)
        num: POLYF := eval(numer lc, [index(1)$V, index(2)$V]::List V, [a1v, Av])
        den: POLYF := eval(denom lc, [index(1)$V, index(2)$V]::List V, [a1v, Av])
        monomial(retract(num)/retract(den), degree p) 
          + SUPFPOLYF2SUPF(reductum p, a1v, Av)

      SUPPOLYF2SUPF: (SUP POLYF, F, F) -> SUP F
      SUPPOLYF2SUPF(p, a1v, Av) ==
        zero? p => 0
        lc: POLYF := leadingCoefficient(p)
        monomial(retract(eval(lc, [index(1)$V, index(2)$V]::List V, 
                                  [a1v, Av])),
                 degree p) 
          + SUPPOLYF2SUPF(reductum p, a1v, Av)

      SUPFPOLYF2FSUPPOLYF: (SUP FPOLYF) -> Fraction SUP POLYF
      SUPFPOLYF2FSUPPOLYF p ==
        cden := splitDenominator(p)
               $UnivariatePolynomialCommonDenominator(POLYF, FPOLYF,SUP FPOLYF)
        
        pnum: SUP POLYF 
             := map(retract(#1 * cden.den)$FPOLYF, p)
                   $SparseUnivariatePolynomialFunctions2(FPOLYF, POLYF)
        pden: SUP POLYF := (cden.den)::SUP POLYF

        pnum/pden


      POLYF2EXPRR: POLYF -> EXPRR
      POLYF2EXPRR p ==
        map(convert(#1)@Symbol::EXPRR, coerce(#1)@EXPRR, p)
           $PolynomialCategoryLifting(IndexedExponents V, V, 
                                      F, POLYF, EXPRR)

      checkResult: (EXPRR, Symbol, Integer, List F) -> PI
      checkResult (res, n, l, list) ==
        for i in l..1 by -1 repeat
          den := eval(denominator res, n::EXPRR, i::EXPRR)
          if den = 0 then return (i+1)::PI
          num := eval(numerator res, n::EXPRR, i::EXPRR)
          if list.i ~= retract(retract(num/den)@R)
          then return (i+1)::PI
        1

      PCD ==> PolynomialCommonDenominator(S, F, POLYF, IndexedExponents V, V)

      cden: POLYF -> POLYS
      cden p == 
        if F is S then 
          p pretend POLYS
        else if F is Fraction S then
          map(retract(#1)$Fraction(S), clearDenominator(p)$PCD)$MPCFS
        else error "Type parameter F should be either equal to S or equal _
                     to Fraction S"

-------------------------------------------------------------------------------
-- guessPade
-------------------------------------------------------------------------------

      UTSF ==> UnivariateTaylorSeries
      UP ==> UnivariatePolynomial

      list2poly: (List F, NNI) -> SUPF
      list2poly(list, order) ==
        if null(list) then 0
	else monomial(first(list), order)$SUPF + list2poly(rest(list), order+1)

      opcoeff := operator("coefficient"::Symbol)$CommonOperators

      guessPade(xx, list, basis) ==
-- basis is ignored currently

        x := new(x)$Symbol
        len := (#list-2)
	if len < 1 then return []
        c := 0$F
-- turn the list into a series
        s := coerce(unmakeSUP(list2poly(list, 0))::UP(x, F))$UTSF(F, x, c)

        res: List Fraction UP(x, F) := []

-- try pade for all possible degrees of numerator and denominator
        for i in 0..len repeat
          r := pade(i, (len-i)::NNI, s)$PadeApproximantPackage(F, x, c)

          if not (r case "failed") then
-- make r into a series
	    rs := coerce(numer(r))$UTSF(F, x, c) 
                  * (coerce(denom(r))$UTSF(F, x, c)**((-1)::Fraction Integer))
                    $UTSF(F, x, c)

-- test the last coefficient and collect, if ok
            if coefficient(rs, (len+1)::NNI)$UTSF(F, x, c) = last(list)
	       and not member?(r, res) then
              res := cons(r, res)
	    
        map([kernel(opcoeff, 
                    [FSUPF2EXPRR(x, makeSUP(numer #1)/makeSUP(denom #1)), 
                     x::EXPRR, xx::EXPRR]), 1], 
            res)$ListFunctions2(Fraction UP(x, F),
                                Record(function: EXPRR, order: PI))


-------------------------------------------------------------------------------
-- guessPRec
-------------------------------------------------------------------------------

      oprecur := operator("rootof"::Symbol)$CommonOperators

      guessPRec(xx, list, basis) ==
        len := #list
        a := new('x)$Symbol 
        op := operator a
        
        for o in 1..(len-3) quo 3 repeat
-- versuche verschiedene Ordnungen
          d := ((len-2*o-2) quo (o+1))

          if (d >= 0) and (len >= (o+1)*(d+2)) then 
            m: List List F := [reduce(append, [[basis2(basis, (k+1))**i*list.(j+k) 
                                                for i in 0..d]
                                               for j in 1..(o+1)])
                               for k in 0..(o+1)*(d+1)]

            resspace: List Vector F := nullSpace((matrix m)::Matrix F)

-- nimm nur das erste Ergebnis
-- wenn der Raum mehrdimensional ist, kann der Nullvector nicht vorkommen...
            if (#resspace > 1) or (any?(not zero?(#1), resspace.1)) then

              reslist:List List SUPF := [[monomial((resspace.1).(1+i+j*(d+1)), i) 
                                          for i in 0..d]
                                         for j in 0..o]

              res: List SUPF := [reduce(_+, reslist.j) for j in 1..(o+1)]

              ex: List EXPRR := [eval(SUPF2EXPRR(xx, res.j),
                                      kernel(xx),
                                      basis(xx::EXPRI))*
                                  op(xx::EXPRR+(j-1)::EXPRR)::EXPRR 
                                 for j in 1..(o+1)]

-- das Ergebnis sollte noch getestet werden, auch auf Redundanz!
 
              return [[kernel(oprecur, [reduce(_+, ex)]), 1]]
        []


-------------------------------------------------------------------------------
-- guessRat
-------------------------------------------------------------------------------
-- this function applies rationalInterpolation to the list of data points
-- [(list.i,basis.i) for i in 1..#list-1]. The last data point is used to test
-- for plausibility.

      guessRat(xx, list, basis) ==
        len := (#list-1)::PositiveInteger
        xlist := [basis2(basis, i) for i in 1..len]
        x:F := basis2(basis, len+1)
        ylist: List F := first(list, len)
        y:F := last(list)
        res: List FSUPF := []

        for i in 0..(len-1) repeat
          output(hconcat("degree Rat "::OutputForm, i::OutputForm))$OutputPackage
          ri := interpolate(xlist, ylist, (len-1-i)::NNI, i)
                           $RationalInterpolation(xx, F)
          de: F := elt(denom ri, x)
          if (de ~= 0) and (elt(numer ri, x) = y*de) _
             and not any?(ri = #1, res) then
            res := cons(ri, res)

        [[res1 := eval(FSUPF2EXPRR(xx, guess), kernel(xx), basis(xx::EXPRI)), _
          checkResult(res1, xx, len, list)] _
         for guess in res]

-------------------------------------------------------------------------------
-- guessExpRat
-------------------------------------------------------------------------------

      GF ==> GeneralizedMultivariateFactorize(SingletonAsOrderedSet,
                                              IndexedExponents V, F, F,
                                              SparseUnivariatePolynomial F)

      resl: (POLYS, POLYS, Integer, Integer, V) -> List S
      resl(p1, p2, o, d, A) == 
        [(resultant(univariate(eval(p1, A, k::S)),
                    univariate(eval(p2, A, k::S)))$SUP(S) exquo _
         ((k::S)**(o::NNI)))::S for k in 1..d]

      p: (Integer, Integer, V, V, BASIS) -> POLYF 
      p(len, i, a1, A, basis) == 
--     a0 + a1*basis2(basis, i)
-- setting A=a0+basis(len+3)*a1, hence a0=A-(len+3)*a1 makes poly3 a lot
-- smaller
        A::POLYF + a1::POLYF*(basis2(basis, i)-basis2(basis, len+3))

      p2: (Integer, Symbol, F, F, BASIS) -> EXPRR 
      p2(len, i, a1v, Av, basis) == 
--     a0 + a1*basis2(basis, i)
-- setting A=a0+basis(len+3)*a1, hence a0=A-(len+3)*a1 makes poly3 a lot smaller
        coerce(Av) + coerce(a1v)*(basis(i::EXPRI)
                                 -basis((len+3)::EXPRI))

      ord1: Integer -> Integer
      ord1 n == (3*n**4-4*n**3+3*n*n-2*n) quo 12

      ord2: (Integer, Integer) -> Integer
      ord2(n, i) == 
        if i=0 
        then ord1 n + ((n*n-n) quo 2)
        else ord1 n
         
      deg1: (Integer, Integer) -> Integer
      deg1(n, i) == (3*n**4+12*i*n**3+2*n**3+12*i*i*n*n-6*i*n*n+15*n*n
                    -24*i*i*n+6*i*n-8*n+12*i*i-12*i-12) quo 12

      deg2: (Integer, Integer) -> Integer
      deg2(n,i) == deg1(n,i) + (n**2+2*i*n+n-2*i+2) quo 2

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

      guessExpRatAux: (Symbol, List F, BASIS, List Integer) -> List EXPRR
      guessExpRatAux(xx, list, basis, xValues) ==
        a1: V := index(1)$V
        A: V := index(2)$V

        len:NNI := (#list-3)::NNI
        if len < 1 then return []
        xlist := [basis2(basis, xValues.i)::POLYF::FPOLYF for i in 1..len]
        x1 := basis2(basis, xValues.(len+1))::POLYF::FPOLYF
        x2 := basis2(basis, xValues.(len+2))::POLYF::FPOLYF
        x3 := basis2(basis, xValues.(len+3))::POLYF::FPOLYF

        y: NNI -> FPOLYF := 
          (list.#1)::F::POLYF::FPOLYF * p(len, (xValues.#1)::Integer, a1, A, basis)::FPOLYF**(-(xValues.#1)::Integer)

        ylist: List FPOLYF := [y i for i in 1..len]

        y1 := y(len+1)
        y2 := y(len+2)
        y3 := y(len+3)

        res := []::List EXPRR
        for i in 0..len-1 repeat
          output(hconcat("degree ExpRat "::OutputForm, i::OutputForm))$OutputPackage
          ri: FSUPFPOLYF
             := interpolate(xlist, ylist, (len-1-i)::NNI, i)
                           $RationalInterpolation(xx, FPOLYF)

          poly1:POLYS := cden(numer(elt(ri, x1)$SUP(FPOLYF) - y1)$FPOLYF)
          poly2:POLYS := cden(numer(elt(ri, x2)$SUP(FPOLYF) - y2)$FPOLYF)
          poly3:POLYS := cden(numer(elt(ri, x3)$SUP(FPOLYF) - y3)$FPOLYF)

          n:Integer := len - i + 1
          if n > 5 then
            output("interpolating"::OutputForm)$OutputPackage
            o1:Integer := ord1(n)
            d1:Integer := deg1(n, i)
            o2:Integer := ord2(n, i)
            d2:Integer := deg2(n, i)

-- RINTERP seems to be a lot faster than PINTERP
-- another compiler bug: using i as iterator here makes the loop break

            res1: SUP S
                 := retract(interpolate([j::S for j in 1..d1-o1+1], 
                                        resl(poly1, poly3, o1, d1-o1+1, A), 
                                        (d1-o1)::NNI, 0)
                                       $RationalInterpolation(xx, S)
                            ::Fraction(SUP(S)))$Fraction(SUP(S))

            res2: SUP S
                 := retract(interpolate([j::S for j in 1..d2-o2+1], 
                                        resl(poly2, poly3, o2, d2-o2+1, A), 
                                        (d2-o2)::NNI, 0)
                                       $RationalInterpolation(xx, S)
                            ::Fraction(SUP(S)))$Fraction(SUP(S))
          else
            output("resultants"::OutputForm)$OutputPackage
            res1: SUP S := univariate(resultant(poly1, poly3, a1))
            res2: SUP S := univariate(resultant(poly2, poly3, a1))

-- we want to solve over F            
          res3: SUP F := SUPS2SUPF(primitivePart(gcd(res1, res2)))

-- res3 ist ein Polynom in A=a0+(len+3)*a1
-- jetzt muss ich das loesen

          res4 := factor(res3)$GF
          for f in factors res4 repeat
            if degree f.factor = 1 then
-- we are only interested in the linear factors
              Av: F := -coefficient(f.factor, 0)/leadingCoefficient f.factor
              if Av ~= 0 then
                res5 := factor(univariate(eval(POLYS2POLYF poly3, A, Av)))$GF
                for g in factors res5 repeat
                  if degree g.factor = 1 then
                    a1v: F := -coefficient(g.factor, 0)
                              /leadingCoefficient g.factor

                    t1:= eval(POLYS2POLYF poly1, [a1, A]::List V, 
                                                 [a1v, Av]::List F)
                    if t1 = 0 then  
                      t2:= eval(POLYS2POLYF poly2, [a1, A]::List V, 
                                                   [a1v, Av]::List F)
                      if t2 = 0 then

                        ri1: Fraction SUP POLYF 
                            := SUPFPOLYF2FSUPPOLYF(numer ri)
                             / SUPFPOLYF2FSUPPOLYF(denom ri)

                        num: SUP F := SUPPOLYF2SUPF(numer ri1, a1v, Av)
                        den: SUP F := SUPPOLYF2SUPF(denom ri1, a1v, Av)

                        if den ~= 0 then
                          res7: EXPRR := eval(FSUPF2EXPRR(xx, num/den),
                                              kernel(xx), 
                                              basis(xx::EXPRI))
                                        *p2(len, xx, a1v, Av, basis)**xx::EXPRR
                          res := cons(res7, res)
                        else if num = 0 then
                          output("numerator and denominator vanish!")
                                $OutputPackage
  
          if not null(res) then return res

        res

      guessExpRat(xx, list, basis) ==
-- guesses Functions of the Form (a1*n+a0)^n*rat(n)

-- remove zeros from list

        zeros: EXPRR := 1
        newlist: List F
        xValues: List Integer
        i: Integer

        i := 0
        for x in list repeat
          i := i+1
          if x = 0 then zeros := zeros * (basis(xx::EXPRI) - basis(i::EXPRI))

        i := 0
        for x in list repeat
          i := i+1
          if x ~= 0 then
            newlist := cons(x/retract(retract(eval(zeros, xx::EXPRR, 
                                                          i::EXPRR))@R),
                            newlist)
            xValues := cons(i, xValues)

        newlist := reverse newlist
        xValues := reverse xValues
        len := i

        res: List EXPRR 
            := [zeros * f for f in guessExpRatAux(xx, newlist, basis, xValues)]
        
        map([#1, checkResult(#1, xx, len, list)], res)
           $ListFunctions2(EXPRR,
                           Record(function: EXPRR, order: PI))


-------------------------------------------------------------------------------
-- guess
-------------------------------------------------------------------------------

      guess(xx, list, basis, guessers, ops, maxlevel) ==
        output(hconcat("guessing level "::OutputForm, maxlevel::OutputForm))
             $OutputPackage
        res: List Record(function: EXPRR, order: PI) := []
        len:= #list :: PositiveInteger
        if len > 1 then

          res := []
          for guesser in guessers repeat
            res := append(guesser(xx, list, basis), res)

            if member?('guessOne, ops) and not null(res) then return res

          if (maxlevel <= 0) then return res

          if member?('guessProduct, ops) and not member?(0$F, list) then
            prodList: List F := [(list.(i+1))/(list.i) for i in 1..(len-1)]

            if not every?(one?, prodList) then
              var: Symbol := subscript('p, [len::OutputForm])
              prodGuess := 
                  [[coerce(list.(guess.order)) 
                    * product(guess.function, _
                              equation(var, _
                                       (guess.order)::EXPRR..xx::EXPRR-1)), _
                    guess.order] _
                   for guess in guess(var, prodList, basis, guessers, 
                                      ops, (maxlevel-1)::NNI)$%]

              for guess in prodGuess 
                  | not any?(guess.function = #1.function, res) repeat
                res := cons(guess, res)

          if member?('guessSum, ops) then
            sumList: List F := [(list.(i+1))-(list.i) for i in 1..(len-1)]
  
            if not every?(#1=sumList.1, sumList) then
              var: Symbol := subscript('s, [maxlevel::OutputForm])
              sumGuess := 
                  [[coerce(list.(guess.order)) _
                    + summation(guess.function, _
                                equation(var, _
                                         (guess.order)::EXPRR..xx::EXPRR-1)), _
                    guess.order] _
                   for guess in guess(var, sumList, basis, guessers, 
                                      ops, (maxlevel-1)::NNI)$%]

              for guess in sumGuess 
                  | not any?(guess.function = #1.function, res) repeat
                res := cons(guess, res)
  
        res

)abbrev package GUESSINT GuessInteger
++ Description:
++ This package exports guessing of sequences of rational numbers
GuessInteger() == Guess(Fraction Integer, Integer, Expression Integer, 
                        Fraction Integer,
                        id$MappingPackage1(Fraction Integer), 
                        coerce$Expression(Integer))

)abbrev package GUESSP GuessPolynomial
++ Description:
++ This package exports guessing of sequences of rational functions
GuessPolynomial() == Guess(Fraction Polynomial Integer, Polynomial Integer, 
                           Expression Integer, 
                           Fraction Polynomial Integer,
                           id$MappingPackage1(Fraction Polynomial Integer), 
                           coerce$Expression(Integer))
\end{axiom}

\start
Date: Sun, 20 Mar 2005 21:25:46 -0600
From: MathAction (billpage)
To: MathAction
Subject: [Common Mistakes] (new) 

1 Omitting the {axiom} enviroment

  You have to use !\begin{axiom} ... \end{axiom}
  or !\begin{reduce} ... \end{reduce} before and after the command
  like this::

    !\begin{reduce}
    int(1/(a+z^3), z);
    \end{reduce}

2 Axiom commands do not end with ;

  Oh yes, note that for Axiom you don't end the command with ; and
  the command for integration in Axiom is 'integrate'.
  \begin{axiom}
  integrate(1/(a+z^3), z)
  \end{axiom}

2 Reduce commands must end with a semicolon ;

  But it must be there for Reduce.
  \begin{reduce}
  r^2+r+1;
  \end{reduce}

3 In Axiom 'ln' is written 'log'

  This won't work::

    !\begin{axiom}integrate((x^2+2*x*ln(x)+5)/(sin(x^2+x^3-x^4)^2), x)\end{axiom}

  Put the !\begin{axiom} and \end{axiom} on separate lines and
  notice that in Axiom 'ln' is written 'log'
  \begin{axiom}
  integrate((x^2+2*x*log(x)+5)/(sin(x^2+x^3-x^4)^2), x)
  \end{axiom}


4 Don't put a \\ in front of the axiom command

  This is wrong::

    !\begin{axiom}
    \sqrt{49/100}
    \end{axiom}

  Begin each comment with an explanation. Don't put \\ in front of the Axiom command.

  Do it like this::

    Some explanation
    !\begin{axiom}
    sqrt{49/100}
    \end{axiom}

  Some explanation
  \begin{axiom}
  sqrt{49/100}
  \end{axiom}


5 No \$ before and after

  This is wrong::

    !\begin{axiom}
    \$ \\sqrt{49/100} \$
    \end{axiom}

  Don't put \$ before and after \$ and there is no \\ in front.

  Just do it like this::

    !\begin{axiom}
    sqrt{49/100}
    \end{axiom}

  and what you will see is this:
  \begin{axiom}
  sqrt{49/100}
  \end{axiom}

6 Axiom sometimes interprets commands in unexpected ways

  This command appears to work
  \begin{axiom}
  integrate(x^5 ln[x],x)
  \end{axiom}

  But notice that
  \begin{axiom}
  5 ln[x]
  \end{axiom}

  is something strange. Oddly perhaps, Axiom interprets '5' as a
  UnivariatePolynomial and 'ln![x]' as a subscripted Symbol and the
  result is a univariate polynomial in the variable 'ln![x]'.

  So perhaps what you meant to write was:
  \begin{axiom}
  integrate(x^5*log(x),x)
  \end{axiom}

7 Use braces not parenthesis after 'begin' and 'end'

  The command::

    \begin(axiom)
    integrate(sin(x))
    \end(axiom)

  wont work.

  Use "braces" like this { } not parenthesis ( ) around {axiom}.

  Finally, unless the expression is a univariate polynomial, then you must also
  specify the variable with which to integrate.
  \begin{axiom}
  integrate(sin(x),x)
  \end{axiom}

8 Use parenthesis not braces in Axiom commands

  This command::

    !\begin{axiom}
    solve{xy=1,x}
    \end{axiom}

  uses {} after the solve operation. This is syntactically correct but
  it probably doesn't do what you might expect.
  \begin{axiom}
  solve{xy=1,x}
  \end{axiom}

  In Axiom {...,...} is executed as a block of commands which
  returns the result of the last command in the sequence. Compare
  \begin{axiom}
  a:={xy=1,x}
  \end{axiom}
  which is just 'x' to
  \begin{axiom}
  b:=(xy=1,x)
  \end{axiom}
  solve normally operates on such a *tuple* and
  \begin{axiom}
  c:=[xy=1,x]
  \end{axiom}
  which is a list and finally
  \begin{axiom}
  c:=set [xy=1,x]
  \end{axiom}
  which is how to construct a set.

  Also notice that multiplication must be written using *
  \begin{axiom}
  solve(x*y=1,x)
  \end{axiom}

9 Use %minusInfinity and %plusInfinity

  I'd like to see if Axiom can do my favorite definite integral::

    !\begin{axiom}
    integrate(x^4/(sinh(x))^2,x,-inf,inf)
    \end{axiom}

  In Axiom use %minusInfinity and %plusInfinity instead of -inf and inf.
  \begin{axiom}
  integrate(x^4/(sinh(x))^2,x=%minusInfinity..%plusInfinity)
  \end{axiom}

10 Numeric conversions

   The results of calculations depend on the type of the inputs

   \begin{axiom}
   asin(1/2)
   asin(.5)
   \end{axiom}

   You can tell Axiom that you would like the result expressed
   as a floating point number (if possible) using @. For example:
   \begin{axiom}
   asin(1/2)@Float
   \end{axiom}

\start
Date: Sun, 20 Mar 2005 21:42:55 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#127 Building axiom from source fails on my Fedora Core 3] GCLOPT setting?

Chuck,

There is a variable in the Makefile.fedora3 called GCLOPTS. It should read:

GCLOPTS="--enable-vssize=65536*2 --enable-locbfd --disable-dynsysbfd \
         --disable-statsysbfd --enable-maxpage=128*1024"

Please check this and let me know the result.

Tim Daly

\start
Date: Mon, 21 Mar 2005 01:00:07 -0500
From: Tim Daly
To: list
Subject: axiom--main--1--patch-32

Summary: cleanups, documentation
Keywords: daly NUMTHEORY

20050320 tpd --patch-32
20050320 tpd Makefile revert VERSION to 3.4
20050320 tpd src/input/Makefile add ALGEBRA variable for documentation tests
20050320 tpd src/algebra/numtheory.spad build test case for INTHEORY
20050320 tpd src/algebra/Makefile add test case for INTHEORY
20050320 tpd src/Makefile make int/input directory during algebra step
20050320 tpd src/algebra/numtheory.spad document INTHEORY/chineseRemainder
20050320 tpd src/algebra/numtheory.spad document INTHEORY/inverse
20050318 tpd lsp/gcl-2.6.6/cmpnew/gcl_cmpflet.lsp redo tail-recursive patch
20050318 tpd src/lib/cfuns-c.c in make_path_from_file, initialize pos
20050318 tpd src/lib/wct.c coerce pwct->fsize to int in skim1Wct
20050318 tpd src/lib/sockio-c.c initialize code to -1
20050318 tpd src/lib/pixmap.c remove attr, xireturn unused variables
20050318 tpd Makefile latex fixes
20050318 tpd Makefile add <<GCLOPTS-LOCBFD>>
20050318 tpd src/hyper/Makefile Issue #125 htadd bare fixed

\start
Date: Mon, 21 Mar 2005 01:09:23 -0500
From: Tim Daly
To: Frederic Lehobey
Subject: Re: [Off topic] Conference announcement (call for contributions)

Frederic,

You may also be interested in another open source project I'm leading
called Doyen. This web page attempts to explain the idea:

http://daly.axiom-developer.org/doyen

\start
Date: Sun, 20 Mar 2005 23:54:53 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [RationalInterpolationAlgorithms] packages are	not local to page

wyscc wrote:

>Comments: Packages compiled on MathAction seem to be local to the page. Dependent packages therefore need to be on the same page to load the packages in correct sequence.
>  
>
No, packages on MathAction are not local to a page. There is a single 
global directory to which the SPAD code is compiled. To load previously 
compiled packages (e.g. XYZ) use the Axiom command::

  )library XYZ

See Martin's example in SandBox.

\start
Date: Mon, 21 Mar 2005 00:28:44 -0600
From: MathAction (wyscc)
To: MathAction
Subject: [RationalInterpolationAlgorithms] packages are	not local to page

Thanks for the reminder to use )library. I thought the "local" nature
might be reasonable just in case someone else creates a NRLIB with the
same name and overwrites an old library (this is probably the case
when one edits a page with compiler code). If memory serves, I tried
adding an <code>import RIA</code> statement and the package
<code>RationalInterpolation</code> still did not compile on the
stand-alone page. Now that it does, we can delete the second package
and examples from this page and just add a link.

William

\start
Date: Mon, 21 Mar 2005 00:11:08 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [RationalInterpolation] 

It requires the following previously compiled package:
\begin{axiom}
)lib RINTERPA
\end{axiom}


++added:

Example (added by wyscc):

\begin{axiom}
f(x)== (x^3+5*x-3)/(x^2-3)
f(x)
xlist:List FRAC INT :=[1/2, 4, 1/6, 8, 1/10, 12]
ylist :=[f(x) for x in xlist]
\end{axiom}

A harder example:

\begin{axiom}
dom:=DMP([z],INT);
g:FRAC dom -> FRAC dom
g(x) == (x^3*z+5*z^2*x -3*z^3)/(z*x^2 - 3)
xxlist:List FRAC dom:=[1/(2*z), 4*z, 1/(6*z), 8*z, 1/(10*z), 12*z]
yylist:=[g(x) for x in xxlist]
--RationalInterpolation(xxlist, yylist, 3::NNI, 2::NNI)$RINTERPA(FRAC dom, UP(x, FRAC dom))
\end{axiom}

\begin{axiom}
interpolate(xlist, ylist, 3, 2)$RINTERP('x, FRAC INT)
interpolate(1/6::FRAC UP(x,FRAC INT), xlist, ylist, 3,2)$RINTERP('x,FRAC INT)
interpolate(xxlist, yylist, 3, 2)$RINTERP('x, FRAC dom)
interpolate(4*z::FRAC UP(x,dom), xxlist, yylist, 3, 2)$RINTERP('x, FRAC dom)
\end{axiom}

Question: If <code>p(xx) = interpolate(lx, ly, m, k)</code>, what is the purpose of
<code>elt(px, qx) = p(qx)</code>, the composition of <code>p(xx)</code> and <code>qx</code>, especially when <code>qx</code> is from <code>FRAC UP(xx, F)</code> instead of from just <code>F</code>? and why is this function (the composition) also called <code>interpolate</code>?

\start
Date: Mon, 21 Mar 2005 08:09:18 -0500
From: Tim Daly
To: list
Subject: Axiom Conference
Cc: Bernice Rogowitz, Gilbert Baumslag

Reminder: There will be an Axiom Conference on April 22 in New York City.

Details and a registration form (registration is free) are at:

http://www.caissny.org

\start
Date: Mon, 21 Mar 2005 06:56:28 -0600
From: MathAction (root)
To: MathAction
Subject: [Axiom-mail] Axiom Conference

Reminder: There will be an Axiom Conference on April 22 in New York City.

Details and a registration form (registration is free) are at:

http://www.caissny.org

\start
Date: 21 Mar 2005 08:25:26 -0500
From: Camm Maguire
To: Pierre Doucy
Subject: Call for help with MACOSX Re: [MACOSX] What is	unexec and why does it fail ?
Cc: Aurelien Chanudet

Greetings!

This is an official call for help from someone familiar with the Mac
and in particular with its mach-o binary file format.  We have an in
general very high quality custom port of the gcl object relocation and
image writing code to this platform graciously contributed by
Aurelien, but it appears that he is no longer reachable, and there are
large image issues with his code in acl2 as well.  I have access to a
Mac account and can ascend the learning curve here if necessary -- it
would simply be much more efficient if someone with the requisite
knowledge already in hand would step forward.

Take care,

Pierre Doucy writes:

> Hi all,
> 
> Attempting to compile Axiom on my Mac, I get the following error :
> 
> [...]
> 44 invoking make in
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src/boot
> with parms:
> SYS= MACOSX
> LSP= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/lsp
> PART= cprogs
> SPAD= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt/MACOSX
> SRC= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src
> INT= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/int
> OBJ= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj
> MNT= /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt
> unexec: not enough room for load commands for new __DATA segments
> make[3]: *** [/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj/MACOSX/bin/bootsys]
> Error 1
> make[2]: *** [bootdir] Error 2
> make[1]: *** [srcdir] Error 2
> make: *** [all] Error 2
> 
> As it looked like a memory problem, I changed my gcl configure options to:
> 
> ./configure --enable-vssize=65536*4 --enable-maxpage=256*1024
> --enable-machine=powerpc-macosx --enable-dlopen --disable-locbfd
> 
> but still get the same error.
> After some googling, I haven't been able to find any clear doc about
> what unexec is, and what it does.
> Can anyone explain me what it is supposed to do, and why it might fail
> in such a manner ?
> 
> Thank you in advance.

\start
Date: Mon, 21 Mar 2005 09:20:49 -0500
From: Balbir Thomas
To: list
Subject: build failure on Debian/Woody

Hi,
Both the current cvs sources (Feb 1, release)
and 20050201 debian package fail to build
on Woody with the same error message given
below .

make[4]: *** No rule to make target
`/home/bt/archive/axiom/int/algebra/ABELGRP.o', needed by `src'.  Stop.
make[4]: Leaving directory `/home/bt/archive/axiom/src/algebra'
make[3]: *** [algebradir] Error 2
make[3]: Leaving directory `/home/bt/archive/axiom/src'
make[2]: *** [srcdir] Error 2
make[2]: Leaving directory `/home/bt/archive/axiom'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/bt/archive/axiom'
make: *** [build-stamp] Error 2

Any suggestions ?

PS: I posted this message before after trying to build
the feb release. This weekend I tried to compile the
new debian package with the same result.

\start
Date: Mon, 21 Mar 2005 10:54:55 -0600
From: MathAction (anonyme)
To: MathAction
Subject: [Guessing formulas for sequences] 

??changed:
-guess(n, [0, 1, 3, 9, 33], n+->n, 2, [guessRat], 
-        [guessSum, guessProduct, guessOne])$GuessInteger
guess(n, [0, 1, 3, 9, 33], n+->n, [guessRat], 
        [guessSum, guessProduct, guessOne], 2)$GuessInteger

??changed:
-Thus, 'guess' takes five parameters. The first three parallel the parameters in
Thus, 'guess' takes six parameters. The first three parallel the parameters in

??changed:
-         [guessSum, guessProduct])$GuessPolynomial
         [guessSum, guessProduct], 2)$GuessPolynomial

??changed:
-guessPRec(n,[1, 1, 1+q, 1+q+q^2, 1+q+q^2+q^3+q^4, 1+q+q^2+q^3+2*q^4+q^5+q^6, 1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9, 1+q+q^2+q^3+q^4+q^5+q^6, (1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7+2*q^8+2*q^9+q^10+q^11+q^12)], n+->q^n)$GuessPolynomial
l1:=[1,1,1+q,1+q+q^2,1+q+q^2+q^3+q^4,1+q+q^2+q^3+2*q^4+q^5+q^6]
l2:=[1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9]
l3:=[(1+q^4+q^6)*(1+q+q^2+q^3+q^4+q^5+q^6)]
l4:=[(1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7+2*q^8+2*q^9+q^10+q^11+q^12)]
l:=append(append(append(l1,l2),l3),l4)
guessPRec(n, l1, n+->q^n)$GuessPolynomial

++added:

\start
Date: Tue, 22 Mar 2005 08:42:34 +0100 (CET)
From: Aurelien Chanudet
To: Camm Maguire, Pierre Doucy
Subject: Re: Call for help with MACOSX Re: [MACOSX] What is unexec and why does it fail ?
Cc: Aurelien Chanudet

Hi Camm and all,

Sorry for seeming unreachable ! Having no access to
the Internet at home for the time being, I find it
quite difficult to contribute efficiently to gcl. All
I was able to do recently was spend one full week
feedling with gdb, tracing the route of segfaults from
the kernel all the way to the debugger, trying to sort
out why gdb doesn't handle segfault on MacOSX the way
it does on Linux.

Some remarks concerning Pierre's output :

- There's a README.macosx file enrolled in the CVS
repository
(http://savannah.gnu.org/cgi-bin/viewcvs/gcl/gcl/README.macosx).
Camm, could you please change the CVS option for this
file so as to make it appear in CVS head ? If you want
to learn more about unexec, try looking for Andrew
Choi's work for Emacs.

- The error you're running into ("not enough room for
load commands for new __DATA segments") is due to your
configure options. As a general rule, I highly
recommend using --enable-locbfd and --disable-dlopen.
I don't even know if the dlopen option is available on
MacOSX.

--- Camm Maguire wrote:
> Greetings!
> 
> This is an official call for help from someone
> familiar with the Mac
> and in particular with its mach-o binary file
> format.  We have an in
> general very high quality custom port of the gcl
> object relocation and
> image writing code to this platform graciously
> contributed by
> Aurelien, but it appears that he is no longer
> reachable, and there are
> large image issues with his code in acl2 as well.  I
> have access to a
> Mac account and can ascend the learning curve here
> if necessary -- it
> would simply be much more efficient if someone with
> the requisite
> knowledge already in hand would step forward.
> 
> Take care,
> 
> Pierre Doucy writes:
> 
> > Hi all,
> > 
> > Attempting to compile Axiom on my Mac, I get the
> following error :
> > 
> > [...]
> > 44 invoking make in
> >
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src/boot
> > with parms:
> > SYS= MACOSX
> > LSP=
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/lsp
> > PART= cprogs
> > SPAD=
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt/MACOSX
> > SRC=
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src
> > INT=
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/int
> > OBJ=
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj
> > MNT=
>
/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt
> > unexec: not enough room for load commands for new
> __DATA segments
> > make[3]: ***
>
[/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj/MACOSX/bin/bootsys]
> > Error 1
> > make[2]: *** [bootdir] Error 2
> > make[1]: *** [srcdir] Error 2
> > make: *** [all] Error 2
> > 
> > As it looked like a memory problem, I changed my
> gcl configure options to:
> > 
> > ./configure --enable-vssize=65536*4
> --enable-maxpage=256*1024
> > --enable-machine=powerpc-macosx --enable-dlopen
> --disable-locbfd
> > 
> > but still get the same error.
> > After some googling, I haven't been able to find
> any clear doc about
> > what unexec is, and what it does.
> > Can anyone explain me what it is supposed to do,
> and why it might fail
> > in such a manner ?
> > 
		
Le nouveau Yahoo! Messenger est arrivé ! Découvrez toutes les nouveautés pour dialoguer instantanément avec vos amis. A télécharger gratuitement sur http://fr.messenger.yahoo.com

\start
Date: Tue, 22 Mar 2005 03:28:19 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [#128 error displaying a certain nested list]	(nouveau) 

As you can see, the following messes up MathActions display. The error goes away if we

  - set algebra display on and tex display of, or

  - display only the first element of the list

\begin{axiom}
)lib RINTERPA RINTERP PCDEN GUESS GUESSP
l := [1, 1, 1+q, 1+q+q^2, 1+q+q^2+q^3+q^4, 1+q+q^2+q^3+2*q^4+q^5+q^6, 1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9, (1+q^4+q^6)*(1+q+q^2+q^3+q^4+q^5+q^6), (1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7+2*q^8+2*q^9+q^10+q^11+q^12)]
guessPRec(n,l,i+->q^i)$GUESSP
\end{axiom}

\start
Date: Tue, 22 Mar 2005 03:50:05 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [Guessing formulas for sequences] 

??changed:
-working. Another bug, #8 messes up the output by missing some parenthesis. Preliminary 
working. Another bug, #8 messes up the output by missing some parenthesis. Preliminary

??changed:
-Finally, please feel free to try this package in the SandBox!
Finally, please feel free to try this package in the SandBox! If you would like to use
this program at your own computer, you need the source of

  - RINTERPA and RINTERP from [Rational Interpolation]

  - PCDEN from [CommonDenominator for polynomials]

  - GUESS, GUESSINT and GUESSP from [Guess]

If you find the package useful, please let me know!

++added:

Unfortunately, on MathAction this does not work yet, so we need to use 'guessPRec' instead:

\begin{axiom}
guessPRec(n, [1, 1, 2, 3, 5, 8, 13, 21, 34], n+->n)$GuessInteger
\end{axiom}

++added:
)set output algebra on

++added:
)set output algebra off

??changed:
-fitting function has been found.
fitting function has been found. Finally, the last parameter is a nonnegative 
integer that specifies how many levels of recursion will be tried. I.e., if the
last parameter is zero, no operator will be applied, if it is one, the package 
applies one, and so on. In the example above, the sequence is first differenced,
then successive quotients are formed.

??changed:
-l1:=[1,1,1+q,1+q+q^2,1+q+q^2+q^3+q^4,1+q+q^2+q^3+2*q^4+q^5+q^6]
-l2:=[1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9]
-l3:=[(1+q^4+q^6)*(1+q+q^2+q^3+q^4+q^5+q^6)]
-l4:=[(1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7+2*q^8+2*q^9+q^10+q^11+q^12)]
-l:=append(append(append(l1,l2),l3),l4)
-guessPRec(n, l1, n+->q^n)$GuessPolynomial
l:=[1, 1, 1+q, 1+q+q^2, 1+q+q^2+q^3+q^4, 1+q+q^2+q^3+2*q^4+q^5+q^6, 1+q+q^2+q^3+2*q^4+2*q^5+2*q^6+q^7+q^8+q^9, (1+q^4+q^6)*(1+q+q^2+q^3+q^4+q^5+q^6), (1+q^4)*(1+q+q^2+q^3+q^4+q^5+2*q^6+2*q^7+2*q^8+2*q^9+q^10+q^11+q^12)];
(guessPRec(n, l, n+->q^n)$GuessPolynomial).1

\start
Date: Tue, 22 Mar 2005 04:44:32 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [RationalInterpolation] 

??changed:
-The package below implements rational interpolation. 
-
-It requires the following previously compiled package:
Introduction

  This file contains an implementation of rational interpolation, where the data
points are element of any integral domain.

Questions and Outlook

  - Maybe this file should be joined with pinterp.spad, where polynomial
    Lagrange interpolation is implemented. This version parallels the structure
    of pinterp.spad closely. This also answers comments and questions from
    wyscc. He remarked

    - Abbreviations for a constructor should be limited to 7 letters (not 8).
      The system occasionally adds the 8th character to a package for internal
      use.

    - Function names begin with a lower case, so RationalInterpolation should
      be rationalInterpolation, or better, rationalInterpolate.

  - Regarding the types I used for the values, wyscc remarked
   
    - If we are doing a rational interpolation, presumably the values are
      rational, so it does not make sense to require the $y$-coordinates of
      inputs be integral. On the other hand, as in the above example, if one
      uses 'FRAC INT', problems can arise when this package is combined with
      other packages that constructs the quotient field of the parameter domain
      'F' because Axiom does not like constructing 'FRAC FRAC INT'.
      
    Note however, that the package would rather construct the type 'FRAC SUP
    FRAC INT', so this problem should not occur. Moreover, there are situations
    - for example in the package [Guess], where we want to interpolate values
    from an IntegralDomain. Of course we could first convert them to the
    quotient field, however, the current approach seems more natural to me.

  - Finally, wyscc asked:
    If <code>p(xx) = interpolate(lx, ly, m, k)</code>, what is the purpose of
    <code>elt(px, qx) = p(qx)</code>, the composition of <code>p(xx)</code> and
    <code>qx</code>, especially when <code>qx</code> is from <code>FRAC UP(xx,
    F)</code> instead of from just <code>F</code>? and why is this function
    (the composition) also called <code>interpolate</code>?

    I do not really know - apart from a very superficial level: Clearly, the
    second function was intended to let the user easily plug in values into the
    interpolated function. I don't find this sensible and I would be happy to
    change it. Indeed, this would also get rid of the first parameter to
    'RINTERP', which is quite a nuisance.

    I think we should agree on a general interface for interpolation
    algorithms, and mark 'PINTERP' as obsolete. By the way, it seems that
    'RINTERP' is faster, too.
    
  - There are probably better ways to implement rational interpolation. Maybe
    http://www.cs.ucsb.edu/~omer/personal/abstracts/rational.html
    contains something useful, but I don't know.

  - For those who speak german,
    http://www.num.math.uni-goettingen.de/schaback/teaching/numath.ps
    contains quite a bit of information.

  - This implementation of rational interpolation neither takes care of
    unattainable points, nor does it check whether the values of the
    $x$-coordinates are all distinct.

  - Comments welcome!



??changed:
-)lib RINTERPA
)abbrev package RINTERPA RationalInterpolationAlgorithms
++ Description:
++ This package exports rational interpolation algorithms
RationalInterpolationAlgorithms(F, P): Cat == Body   where
    F: IntegralDomain 
    P: UnivariatePolynomialCategory(F)
    Cat == with
        RationalInterpolation: (List F, List F, NonNegativeInteger,
                                NonNegativeInteger) 
                               -> Fraction P
        +++ We assume that the elements of the first list are all distinct.
        +++ If they are not, division by zero might occur.

    Body == add
        RationalInterpolation(xlist, ylist, m, k) ==
            #xlist ^= #ylist =>
                error "Different number of points and values."
            #xlist ^= m+k+1 =>
                error "wrong number of points"
            tempvec: List F := [1 for i in 1..(m+k+1)]

            collist: List List F := cons(tempvec, 
                                         [(tempvec := [tempvec.i * xlist.i _
                                                       for i in 1..(m+k+1)]) _
                                          for j in 1..max(m, k)])

            collist := append([collist.j for j in 1..(m+1)], _
                              [[- collist.j.i * ylist.i for i in 1..(m+k+1)] _
                               for j in 1..(k+1)])
            resspace: List Vector F := nullSpace((transpose matrix collist) _
                                                 ::Matrix F)
            reslist: List List P := _
                      [[monomial((resspace.1).(i+1), i) for i in 0..m], _
                      [monomial((resspace.1).(i+m+2), i) for i in 0..k]]

            reduce((_+), reslist.1)/reduce((_+), reslist.2)

??changed:
-Next PolynomialCommonDenominator
-
-Example (added by wyscc):

First we check whether we have the right number of points and values. Clearly
the number of points and the number of values must be identical. Note that we
want to determine the numerator and denominator polynomials only up to a
factor. Thus, we want to determine $m+k+1$ coefficients, where $m$ is the degree
of the polynomial in the numerator and $k$ is the degree of the polynomial in
the denominator.

In fact, we could also leave - for example - $k$ unspecified and determine it
as $k=\#xlist-m-1$: I don't know whether this would be better.

The next step is to set up the matrix. Suppose that our numerator polynomial is
$p(x)=a_0+a_1x+\dots+a_mx^m$ and that our denominator polynomial is
$q(x)=b_0+b_1x+\dots+b_mx^m$. Then we have the following equations, writing $n$
for $m+k+1$:

\begin{eqnarray*}
 p(x_1)-y_1q(x_1)&=a_0+a_1x_1+\dots +a_mx_1^m-y_1(b_0+b_1x_1+\dots +b_kx_1^k)=0\\
 p(x_2)-y_2q(x_2)&=a_0+a_1x_2+\dots +a_mx_2^m-y_2(b_0+b_1x_2+\dots +b_kx_2^k)=0\\
                 &\;\;\vdots\\                                                 
 p(x_n)-y_nq(x_n)&=a_0+a_1x_n+\dots +a_mx_n^m-y_n(b_0+b_1x_n+\dots +b_kx_n^k)=0
\end{eqnarray*}

This can be written as
\begin{equation*}
\begin{bmatrix}
  1&x_1&\dots&x_1^m&-y_1&-y_1x_1&\dots&-y_1x_1^k\\
  1&x_2&\dots&x_2^m&-y_2&-y_2x_2&\dots&-y_2x_2^k\\
\vdots\\
  1&x_n&\dots&x_n^m&-y_n&-y_nx_n&\dots&-y_nx_2^k
\end{bmatrix}
\begin{bmatrix}
  a_0\\a_1\\\vdots\\a_m\\b_0\\b_1\\\vdots\\b_k
\end{bmatrix}=\mathbf 0
\end{equation*}

We generate this matrix columnwise, then we can solve the system using 'nullSpace'.

Note that it may happen that the system has several solutions. In this case,
some of the data points may not be interpolated correctly. However, the
solution is often still useful, thus we do not signal an error.

Since all the solutions of 'nullSpace' will be equivalent, we can always
simply take the first one. Finally, we return the rational function.

Examples

  To conclude we present some examples. To begin with, the following interpolation 
illustrates the concept of unattainable points:

??changed:
-f(x)== (x^3+5*x-3)/(x^2-3)
-f(x)
-xlist:List FRAC INT :=[1/2, 4, 1/6, 8, 1/10, 12]
-ylist :=[f(x) for x in xlist]
interpolate([q,q^2,q^3],[0,x^1,x^2],0,2)$RINTERP(qn, FRAC POLY INT)

++added:
\begin{axiom}
f(x) == (x^3+5*x-3)/(x^2-3)
xlist := [1/2, 4, 1/6, 8, 1/10, 12]
ylist := [f(x) for x in xlist]

interpolate(xlist, ylist, 3, 2)$RINTERP('x, FRAC INT)
interpolate(1/6::FRAC UP(x,FRAC INT), xlist, ylist, 3, 2)$RINTERP('x,FRAC INT)
\end{axiom}


??changed:
-dom:=DMP([z],INT);
-g:FRAC dom -> FRAC dom
dom := DMP([z],INT);
g: FRAC dom -> FRAC dom;

??changed:
-xxlist:List FRAC dom:=[1/(2*z), 4*z, 1/(6*z), 8*z, 1/(10*z), 12*z]
-yylist:=[g(x) for x in xxlist]
---RationalInterpolation(xxlist, yylist, 3::NNI, 2::NNI)$RINTERPA(FRAC dom, UP(x, FRAC dom))
-\end{axiom}
-
-\begin{axiom}
-interpolate(xlist, ylist, 3, 2)$RINTERP('x, FRAC INT)
-interpolate(1/6::FRAC UP(x,FRAC INT), xlist, ylist, 3,2)$RINTERP('x,FRAC INT)
xxlist: List FRAC dom := [1/(2*z), 4*z, 1/(6*z), 8*z, 1/(10*z), 12*z]
yylist := [g(x) for x in xxlist]

--removed:
-
-Question: If <code>p(xx) = interpolate(lx, ly, m, k)</code>, what is the purpose of
-<code>elt(px, qx) = p(qx)</code>, the composition of <code>p(xx)</code> and <code>qx</code>, especially when <code>qx</code> is from <code>FRAC UP(xx, F)</code> instead of from just <code>F</code>? and why is this function (the composition) also called <code>interpolate</code>?
-

\start
Date: Tue, 22 Mar 2005 04:46:59 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [CommonDenominator for polynomials] 

++added:

Example use:

\begin{axiom}
)set mess type off
dom:=DMP([x,y], FRAC DMP([z],INT));
p:dom:=x*y^3/(z^2-1) + 3*x*y/(z^3-1)
commonDenominator p
clearDenominator p
splitDenominator p
\end{axiom}

\start
Date: 22 Mar 2005 09:40:40 -0500
From: Camm Maguire
To: rlbk@melix.net
Subject: Re: Call for help with MACOSX Re: [MACOSX] What is unexec and why does it fail ?
Cc: Robert Boyer, Aurelien Chanudet, Warren Hunt

Aurelien!!!  It is *so* nice to hear from you!  I hope all is well
with you and yours.

Beyond the axiom issue discussed below, some acl2 users at the
University of Texas are running into difficulties with the mac code
when making very large images.  Would you have a chance to try to
build ACL2 with maxpages doubled, quadrupled, and even multiplied by 8
if you OS allows?  Please let me know if you have some time to
investigate this.  I can send you more information if so.


Aurelien Chanudet writes:

> Hi Camm and all,
> 
> Sorry for seeming unreachable ! Having no access to
> the Internet at home for the time being, I find it
> quite difficult to contribute efficiently to gcl. All
> I was able to do recently was spend one full week
> feedling with gdb, tracing the route of segfaults from
> the kernel all the way to the debugger, trying to sort
> out why gdb doesn't handle segfault on MacOSX the way
> it does on Linux.

What dedication!  Is this a known issue on the Mac?  Any help from the
gdb developers?


> 
> Some remarks concerning Pierre's output :
> 
> - There's a README.macosx file enrolled in the CVS
> repository
> (http://savannah.gnu.org/cgi-bin/viewcvs/gcl/gcl/README.macosx).
> Camm, could you please change the CVS option for this
> file so as to make it appear in CVS head ? If you want

I'm not sure what you mean here.  Its in the CVS head tree (aka 2.7.0)
to my understanding.  Should I post it to the website on the errata
page?  

> to learn more about unexec, try looking for Andrew
> Choi's work for Emacs.
> 

Thanks for the tip -- will dig in as time allows.  I don't know if you
saw my previous note on this, but I feel that if we can extend unexec
in two ways, it would be greatly advantageous to GCL.  

1) Add reloc records for any symbols relocated to a dlopened library
   in a given session, together with whatever section is also needed
   to indicate that the image is (now permanently) dynamically linked
   against the lib.

2) Merge gprof section info from any loaded .o files into the final
   saved image so that profiling will work without having to generate
   a fresh image with ld.

Already discussed with the emacs people, who don't seem to have the
time for the work themselves.

Beyond this, of course, is extending native loading to alpha, ia64,
mips, and hppa.  And, as long as we're making this list, it would be
great if we could eliminate the 1.5Mb image bloat incurred by using
bfd instead of the older reloc code -- this doubtlessly comes from
storing the hash table of all the symbols permanently in the image,
which should be fast, but perhaps not significantly so.

> - The error you're running into ("not enough room for
> load commands for new __DATA segments") is due to your
> configure options. As a general rule, I highly
> recommend using --enable-locbfd and --disable-dlopen.
> I don't even know if the dlopen option is available on
> MacOSX.
> 

Tim, Pierre -- are you not building this way already?

Take care,

> --- Camm Maguire wrote:
> > Greetings!
> > 
> > This is an official call for help from someone
> > familiar with the Mac
> > and in particular with its mach-o binary file
> > format.  We have an in
> > general very high quality custom port of the gcl
> > object relocation and
> > image writing code to this platform graciously
> > contributed by
> > Aurelien, but it appears that he is no longer
> > reachable, and there are
> > large image issues with his code in acl2 as well.  I
> > have access to a
> > Mac account and can ascend the learning curve here
> > if necessary -- it
> > would simply be much more efficient if someone with
> > the requisite
> > knowledge already in hand would step forward.
> > 
> > Take care,
> > 
> > Pierre Doucy writes:
> > 
> > > Hi all,
> > > 
> > > Attempting to compile Axiom on my Mac, I get the
> > following error :
> > > 
> > > [...]
> > > 44 invoking make in
> > >
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src/boot
> > > with parms:
> > > SYS= MACOSX
> > > LSP=
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/lsp
> > > PART= cprogs
> > > SPAD=
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt/MACOSX
> > > SRC=
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/src
> > > INT=
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/int
> > > OBJ=
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj
> > > MNT=
> >
> /Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/mnt
> > > unexec: not enough room for load commands for new
> > __DATA segments
> > > make[3]: ***
> >
> [/Users/pdoucy/Documents/Travail/Axiom/axiom--MACOSX--1--patch-1/obj/MACO=
SX/bin/bootsys]
> > > Error 1
> > > make[2]: *** [bootdir] Error 2
> > > make[1]: *** [srcdir] Error 2
> > > make: *** [all] Error 2
> > > 
> > > As it looked like a memory problem, I changed my
> > gcl configure options to:
> > > 
> > > ./configure --enable-vssize=65536*4
> > --enable-maxpage=256*1024
> > > --enable-machine=powerpc-macosx --enable-dlopen
> > --disable-locbfd
> > > 
> > > but still get the same error.
> > > After some googling, I haven't been able to find
> > any clear doc about
> > > what unexec is, and what it does.
> > > Can anyone explain me what it is supposed to do,
> > and why it might fail
> > > in such a manner ?

\start
Date: 22 Mar 2005 13:01:40 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Axiom sprint day
Cc: Bernice Rogowitz, Gilbert Baumslag

I'm going to try to be there.

Take care,

Tim Daly writes:

> *,
> 
> I'm working on setting up an agenda for the axiom sprint day.
> It appears that the morning will be spent discussing future 
> directions for Axiom. The rest of the time will be spent 
> cleaning up the IssueTracker items.
> 
> Mark Murray will be joining us via phone as he cannot attend
> in person.
> 

\start
Date: Tue, 22 Mar 2005 20:02:07 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#123 Compile modified spad file] Status?

Why is it in status 'testing' ?
The Makefile from cvs has been changed?

\start
Date: Tue, 22 Mar 2005 21:08:25 -0500
From: William Sit
To: Bill Page
Subject: TeXMacs link

The link for TeXmacs on
http://page.axiom-developer.org/zope/mathaction/FrontPage

http://page.axiom-developer.org/zope/mathaction/TeXmacs

does not work.

> Site Error
> 
> An error was encountered while publishing this resource.
> 
> RuntimeError
> Sorry, a site error occurred.
> 
> Traceback (innermost last):
> 
>     * Module ZPublisher.Publish, line 163, in publish_module_standard
>     * Module Products.PlacelessTranslationService.PatchStringIO, line 51, in new_publish
>     * Module ZPublisher.Publish, line 127, in publish
>     * Module Zope.App.startup, line 203, in zpublisher_exception_hook
>     * Module ZPublisher.Publish, line 100, in publish
>     * Module ZPublisher.mapply, line 88, in mapply
>     * Module ZPublisher.Publish, line 40, in call_object
>     * Module Products.ZWiki.ZWikiPage, line 228, in __call__
>     * Module Products.ZWiki.ZWikiPage, line 240, in render
>     * Module Products.ZWiki.ZWikiPage, line 258, in preRender
>     * Module Products.LatexWiki, line 74, in preRender
>     * Module Products.LatexWiki.ReplaceInlineLatex, line 59, in replaceInlineLatex
>     * Module Products.LatexWiki.ReplaceInlineLatex, line 46, in findLatexCode
> 
> RuntimeError

\start
Date: Tue, 22 Mar 2005 21:35:11 -0500
From: Bill Page
To: William Sit
Subject: Re: TeXMacs link

The problem was with an un-escaped $ in the text. Occasionally
this causes the LatexWiki parser to blow up. It should be written
\$ instead.

William Sit wrote:

>The link for TeXmacs on
>http://page.axiom-developer.org/zope/mathaction/FrontPage
>
>http://page.axiom-developer.org/zope/mathaction/TeXmacs
>
>does not work.
>
>  
>
>>Site Error
>>
>>An error was encountered while publishing this resource.
>>
>>RuntimeError
>>Sorry, a site error occurred.
>>...
>>    * Module Products.LatexWiki.ReplaceInlineLatex, line 46, in findLatexCode
>>
>>RuntimeError

\start
Date: Tue, 22 Mar 2005 22:32:30 -0500
From: William Sit
To: Bill Page
Subject: Re: TeXMacs link

Dear Bill:

Thanks for the quick response. That was easy.

William
----
> The problem was with an un-escaped $ in the text. Occasionally
> this causes the LatexWiki parser to blow up. It should be written
> \$ instead.

\start
Date: Tue, 22 Mar 2005 23:24:17 -0500
From: Bill Page
To: Tim Daly
Subject: Re: axiom--main--1--patch-32

Tim,

I just finished building patch-32. When I try to display a 3d graphic
from Hypertex, I get the error message:

  uncompress:"/home/wspage/axiom--main--1/mnt/linux/doc/viewports
    /ThreeDimentsionalGraphicsExpamplePage1.VIEW/images.xpm.Z".gz:
   No such file or directory

It looks like some "quotation marks" are nested incorrectly or
improperly escaped (note .gz ouside " ").

root wrote:

>Summary: cleanups, documentation
>Keywords: daly NUMTHEORY
>
>20050320 tpd --patch-32
>20050320 tpd Makefile revert VERSION to 3.4
>20050320 tpd src/input/Makefile add ALGEBRA variable for documentation tests
>20050320 tpd src/algebra/numtheory.spad build test case for INTHEORY
>20050320 tpd src/algebra/Makefile add test case for INTHEORY
>20050320 tpd src/Makefile make int/input directory during algebra step
>20050320 tpd src/algebra/numtheory.spad document INTHEORY/chineseRemainder
>20050320 tpd src/algebra/numtheory.spad document INTHEORY/inverse
>20050318 tpd lsp/gcl-2.6.6/cmpnew/gcl_cmpflet.lsp redo tail-recursive patch
>20050318 tpd src/lib/cfuns-c.c in make_path_from_file, initialize pos
>20050318 tpd src/lib/wct.c coerce pwct->fsize to int in skim1Wct
>20050318 tpd src/lib/sockio-c.c initialize code to -1
>20050318 tpd src/lib/pixmap.c remove attr, xireturn unused variables
>20050318 tpd Makefile latex fixes
>20050318 tpd Makefile add <<GCLOPTS-LOCBFD>>
>20050318 tpd src/hyper/Makefile Issue #125 htadd bare fixed
>

\start
Date: Tue, 22 Mar 2005 22:44:45 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#129 patch-32 fails to display 3D graphics] (new) 

I just finished building patch-32. When I try to display a 3d graphic
from Hypertex, I get the error message:

  uncompress:"/home/wspage/axiom--main--1/mnt/linux/doc/viewports
    /ThreeDimentsionalGraphicsExpamplePage1.VIEW/images.xpm.Z".gz:
   No such file or directory

It looks like some "quotation marks" are nested incorrectly or
improperly escaped (note .gz ouside " ").

\start
Date: Wed, 23 Mar 2005 08:24:44 +0100 (CET)
From: Aurelien Chanudet
To: Camm Maguire, rlbk@melix.net
Subject: Re: Call for help with MACOSX Re: [MACOSX] What is unexec and why does it fail ?
Cc: Robert Boyer, Aurelien Chanudet, Warren Hunt

> Beyond the axiom issue discussed below, some acl2
> users at the
> University of Texas are running into difficulties
> with the mac code
> when making very large images.  Would you have a
> chance to try to
> build ACL2 with maxpages doubled, quadrupled, and
> even multiplied by 8
> if you OS allows?  Please let me know if you have
> some time to
> investigate this.  I can send you more information
> if so.

What version of ACL2 and gcl are these people using ?
Will try to give this a look as time permits. By the
way, what's the status of SGC on the Mac now ? There
have been some recent issues as far as I remember.

> What dedication!  Is this a known issue on the Mac? 
> Any help from the
> gdb developers?

This is a known issue on the Mac, albeit one that
interests no one but me (for understandable reasons, I
feel it way more confortable to debug SGC in GCL using
gdb than using printf debugging). Basically, attaching
gdb to a process, say GCL, which handles segfaults on
its own, makes it impossible for the signal handler to
be called. Gdb will simply refuse to pass the
exception to the program. This is due to the way
traditionnal Unix signals are handled in MacOSX's Mach
kernel. Traditionnal signals are handled by a BSD
layer which gdb bypasses... 

> I'm not sure what you mean here.  Its in the CVS
> head tree (aka 2.7.0)
> to my understanding.  Should I post it to the
> website on the errata
> page?  

It must be fine then. I must confess I'm not "CVS
savvy". I just wanted to make sure that the file can
be retrieved when using the basic "cvs login / cvs co"
sequence.

> 1) Add reloc records for any symbols relocated to a
> dlopened library
>    in a given session, together with whatever
> section is also needed
>    to indicate that the image is (now permanently)
> dynamically linked
>    against the lib.
>
> 2) Merge gprof section info from any loaded .o files
> into the final
>    saved image so that profiling will work without
> having to generate
>    a fresh image with ld.

Under what form are gprof information stored ?

\start
Date: Wed, 23 Mar 2005 07:04:53 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#130 SpecialFunction(Integer) doesn't return	Expression Integer] (new) 

digamma 2 =>  0.42278433509846725 (DoubleFloat)
<br>
Has to return digamma(2) (EXPR INT)

\start
Date: Wed, 23 Mar 2005 08:23:25 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [SymbolicIntegration] Errorfunction

\begin{axiom}
int(exp(-x^2/2)/sqrt(%pi*2),x=%minusInfinity..%plusInfinity)
\end{axiom}

\start
Date: Wed, 23 Mar 2005 16:15:05 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#130 SpecialFunction(Integer) doesn't return Expression Integer] 

Original Issue Report

  \begin{axiom}
  digamma 2
  \end{axiom}
  Has to return digamma(2) (EXPR INT)

Analysis

  The statement of the issue is to terse and vague to be sure
what the author had in mind, but assuming that s/he expected
the result to be of type EXPR INT, here is how to see what is
going on. Use the option ')set message selection on' to trace
how Axiom finds the signature of the appropriate digamma
function:
\begin{axiom}
)set message selection on
digamma 2
\end{axiom}

Axiom finds 3 possible signatures and applies the first one
because 2 can be coerced to DoubleFloat. But we can ask Axiom
to take the third option by either specifically treating the
type of the input 2 as EXPR INT or by asking for something of
type EXPR INT as the result.

\begin{axiom}
digamma(2::EXPR INT)
digamma(2)@(EXPR INT)
\end{axiom}

Of course as something of type EXPR INT this expression has
no simplier representation.

\start
Date: Wed, 23 Mar 2005 17:08:33 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#130 SpecialFunction(Integer) doesn't return Expression Integer] 

??changed:
-Status: open => rejected 
-
Status: open => rejected

Sorry to respond to this but in Axiom, all trigonometric,
transcendental etc.. functions is returned in EXPR INT if there is no
integer functions. I think that Axiom has to return digamma(2) and
digamma(2.0) the SF result. This permit to work directly on
expression.  You can test some other symbolic CAS.But may be I'm
wrong.

\start
Date: Wed, 23 Mar 2005 18:06:41 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#130 SpecialFunction(Integer) doesn't return	Expression Integer] PLEASE RESPOND and THANK YOU

Please do **not** be "sorry to respond" -
 that is the purpose of this website!

By the way, I think it would be polite (but it is not necessary)
for you identify yourself by clicking on
"preferences":http://page.axiom-developer.org/zope/mathaction/UserOptions
rather than remaining anonymous. 

What I think you mean is this: Why is the mode selection for the
following pairs of expressions different?
\begin{axiom}
)set message selection on
sin(2)
digamma(2)
\end{axiom}
and
\begin{axiom}
sin(2.0)
digamma(2.0)
\end{axiom}
Since sin is defined in DoubleFloat and digamma is defined in
DoubleFloatSpecialFunctions one should expect similar treatment.
\begin{axiom}
)show DoubleFloat
)show DoubleFloatSpecialFunctions
\end{axiom}

\start
Date: Wed, 23 Mar 2005 20:06:40 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#130 SpecialFunction(Integer) doesn't return	Expression Integer] Treating special functions like Expression Integer

Apparently the difference has something to do with the fact that
**DoubleFloat** is a 'domain' while **DoubleFloatSpecialFunctions**
is a 'package'. It is possible to obtain some of the effectst that
you want by dropping the **DoubleFloatSpecialFunctions** from the
list of exposed constructors.
\begin{axiom}
)set expose drop constructor DoubleFloatSpecialFunctions
\end{axiom}
Then these are treated the same
\begin{axiom}
sin(2)
digamma(2)
\end{axiom}
except now it is necessary to do a package call to evaluate
it even for something that is a floating point value.
\begin{axiom}
digamma(2.0)
digamma(2.0)$DoubleFloatSpecialFunctions
\end{axiom}

\start
Date: Wed, 23 Mar 2005 23:34:26 -0500
From: Balbir Thomas
To: list
Subject: build failure on Debian Woody Solved -- Stray symbols in src/algebra/Makefile ! ??

Hi,
I managed to fix the build failure problem, on Debian/Woody
described in my earlier post. 

The problems seems to have been stray backslashes being placed
before dollar signs. A few sample lines showing this are given below.
This seems to happen only in src/algebra/Makefile . Making the
substitution "s/\\\$/$/g" and restarting the build process fixes
the problem.

\${MID}/ABELGRP.spad: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"category ABELGRP AbelianGroup"\${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.spad
\${MID}/ABELGRP.lsp: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"ABELGRP.lsp BOOTSTRAP"\${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.lsp

\${MID}/ABELGRP-.lsp: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"ABELGRP-.lsp BOOTSTRAP"\${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP-.lsp


I do not understand why this is happening. Apparently it does not happen on
newer versions of debian as can be seen from the successfull builds on
buildd.debian.org.  Please note this is not a problem with the debian
package as it occurs if I try to compile with the upstream source too.

\start
Date: Thu, 24 Mar 2005 00:24:08 -0500
From: Tim Daly
To: Balbir Thomas
Subject: Re: build failure on Debian Woody Solved -- Stray symbols in src/algebra/Makefile ! ??

Stray backslashes in the Makefile?  Well the Makefile is generated by
running the notangle program on the Makefile.pamphlet file.  The
notangle program is part of noweb.

Do you have a copy of noweb installed elsewhere on your machine? If
so, does your version occur before the axiom version of noweb? Axiom
has some patches to noweb so it is not the standard version.

Run notangle by hand on the Makefile.pamphlet file and see if it is
causing the problem. 

Before you start the axiom build there are two shell variables to be set:

export AXIOM =`pwd`/mnt/linux
export PATH=$AXIOM/bin:$PATH

This PATH spec should cause the axiom version of notangle to be used.

\start
Date: Thu, 24 Mar 2005 00:33:35 -0500
From: Bill Page
To: Balbir Thomas
Subject: RE: build failure on Debian Woody Solved -- Stray symbols in src/algebra/Makefile ! ??

On Wednesday, March 23, 2005 11:34 PM Balbir Thomas wrote:

> I managed to fix the build failure problem, on Debian/Woody
> described in my earlier post. 
>
> The problems seems to have been stray backslashes being placed
> before dollar signs. A few sample lines showing this are given
> below. This seems to happen only in src/algebra/Makefile . Making
> the substitution "s/\\\$/$/g" and restarting the build process
> fixes the problem.

> \${MID}/ABELGRP.spad: \${IN}/catdef.spad.pamphlet
>        \${TANGLE} -R"category ABELGRP AbelianGroup"\ ...
>
> I do not understand why this is happening. Apparently it does
> not happen on newer versions of debian as can be seen from the
> successfull builds on buildd.debian.org.  Please note this is not
> a problem with the debian package as it occurs if I try to compile
> with the upstream source too.

I can confirm that this does not happen on newer version of debian
or RedHat linux.

The example lines that you show above are actually generated by
a simple awk script in the chunks <<findSpadFiles>> and
<<findBootstrapFiles>> in the file src/algebra/Makefile.pamphlet.
It looks like this:

  <<findSpadFiles>>=

  egrep '<<(domain|package|category) .*>>=' *.spad.pamphlet | \
  awk -F: '{
    chunk=substr($2,3,length($2)-5);
    split(chunk,part," ");
    spadfile="\${MID}/"part[2]".spad";
    print spadfile": \${IN}/"$1;
    print "\t\${TANGLE} -R\""chunk"\" \${IN}/"$1">"spadfile;
    print "";
  }'

It seems that some versions of awk do not process the escaped \$ in
the same way as some others. (The gnu awk documentation actually
says that for posix implementations this behaviour is undefined.)
I think that strictly speaking the escape before $ is not needed
and we should probably remove these extra \.

\start
Date: Thu, 24 Mar 2005 01:11:29 -0500
From: Balbir Thomas
To: Tim Daly
Subject: Re: build failure on Debian Woody Solved -- Stray symbols in src/algebra/Makefile ! ??

Hi,

I was building with Camm's debian packages source. This does
set the environment variables correctly so the version of notangle
used is the one supplied by axiom even though I do have an
local version of notangle (part of the nowebm package on debian).
The build is still in progress.

PS: I am replying from my home computer (with dynamic IP) so
this may get rejected by the mailing list.

sincerely
b thomas

On Thu, Mar 24, 2005 at 12:24:08AM -0500, root wrote:
> Stray backslashes in the Makefile?  Well the Makefile is generated by
> running the notangle program on the Makefile.pamphlet file.  The
> notangle program is part of noweb.
> 
> Do you have a copy of noweb installed elsewhere on your machine? If
> so, does your version occur before the axiom version of noweb? Axiom
> has some patches to noweb so it is not the standard version.
> 
> Run notangle by hand on the Makefile.pamphlet file and see if it is
> causing the problem. 
> 
> Before you start the axiom build there are two shell variables to be set:
> 
> export AXIOM =`pwd`/mnt/linux
> export PATH=$AXIOM/bin:$PATH
> 
> This PATH spec should cause the axiom version of notangle to be used.
> 
> Tim

\start
Date: Thu, 24 Mar 2005 06:43:42 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#131 awk backslash causes failure in src/algebra/Makefile] (new) 

Hi,
Both the current cvs sources (Feb 1, release)
and 20050201 debian package fail to build
on Woody with the same error message given
below .

make[4]: *** No rule to make target
`/home/bt/archive/axiom/int/algebra/ABELGRP.o', needed by `src'.  Stop.
make[4]: Leaving directory `/home/bt/archive/axiom/src/algebra'
make[3]: *** [algebradir] Error 2
make[3]: Leaving directory `/home/bt/archive/axiom/src'
make[2]: *** [srcdir] Error 2
make[2]: Leaving directory `/home/bt/archive/axiom'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/bt/archive/axiom'
make: *** [build-stamp] Error 2

Any suggestions ?

PS: I posted this message before after trying to build
the feb release. This weekend I tried to compile the
new debian package with the same result.

==============================================================
Hi,
I managed to fix the build failure problem, on Debian/Woody
described in my earlier post. 

The problems seems to have been stray backslashes being placed
before dollar signs. A few sample lines showing this are given below.
This seems to happen only in src/algebra/Makefile . Making the
substitution "s/\\\$/$/g" and restarting the build process fixes
the problem.

\${MID}/ABELGRP.spad: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"category ABELGRP AbelianGroup"\${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.spad
\${MID}/ABELGRP.lsp: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"ABELGRP.lsp BOOTSTRAP"\${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.lsp

\${MID}/ABELGRP-.lsp: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"ABELGRP-.lsp BOOTSTRAP"\${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP-.lsp


I do not understand why this is happening. Apparently it does not happen on
newer versions of debian as can be seen from the successfull builds on
buildd.debian.org.  Please note this is not a problem with the debian
package as it occurs if I try to compile with the upstream source too.

sincerely
B Thomas

==================================================================
On Wednesday, March 23, 2005 11:34 PM Balbir Thomas wrote:

> I managed to fix the build failure problem, on Debian/Woody
> described in my earlier post. 
>
> The problems seems to have been stray backslashes being placed
> before dollar signs. A few sample lines showing this are given
> below. This seems to happen only in src/algebra/Makefile . Making
> the substitution "s/\\\$/$/g" and restarting the build process
> fixes the problem.

> \${MID}/ABELGRP.spad: \${IN}/catdef.spad.pamphlet
>        \${TANGLE} -R"category ABELGRP AbelianGroup"\ ...
>
> I do not understand why this is happening. Apparently it does
> not happen on newer versions of debian as can be seen from the
> successfull builds on buildd.debian.org.  Please note this is not
> a problem with the debian package as it occurs if I try to compile
> with the upstream source too.

I can confirm that this does not happen on newer version of debian
or RedHat linux.

The example lines that you show above are actually generated by
a simple awk script in the chunks <<findSpadFiles>> and
<<findBootstrapFiles>> in the file src/algebra/Makefile.pamphlet.
It looks like this:

  <<findSpadFiles>>=

  egrep '<<(domain|package|category) .*>>=' *.spad.pamphlet | \
  awk -F: '{
    chunk=substr($2,3,length($2)-5);
    split(chunk,part," ");
    spadfile="\${MID}/"part[2]".spad";
    print spadfile": \${IN}/"$1;
    print "\t\${TANGLE} -R\""chunk"\" \${IN}/"$1">"spadfile;
    print "";
  }'

It seems that some versions of awk do not process the escaped \$ in
the same way as some others. (The gnu awk documentation actually
says that for posix implementations this behaviour is undefined.)
I think that strictly speaking the escape before $ is not needed
and we should probably remove these extra \.

Regards,
Bill Page.

=======================================================
Hi,

I was building with Camm's debian packages source. This does
set the environment variables correctly so the version of notangle
used is the one supplied by axiom even though I do have an
local version of notangle (part of the nowebm package on debian).
The build is still in progress.

PS: I am replying from my home computer (with dynamic IP) so
this may get rejected by the mailing list.

sincerely
b thomas

On Thu, Mar 24, 2005 at 12:24:08AM -0500, root wrote:
> Stray backslashes in the Makefile?  Well the Makefile is generated by
> running the notangle program on the Makefile.pamphlet file.  The
> notangle program is part of noweb.
> 
> Do you have a copy of noweb installed elsewhere on your machine? If
> so, does your version occur before the axiom version of noweb? Axiom
> has some patches to noweb so it is not the standard version.
> 
> Run notangle by hand on the Makefile.pamphlet file and see if it is
> causing the problem. 
> 
> Before you start the axiom build there are two shell variables to be set:
> 
> export AXIOM =`pwd`/mnt/linux
> export PATH=$AXIOM/bin:$PATH
> 
> This PATH spec should cause the axiom version of notangle to be used.
> 
> Tim

=====================================================================

As Bill Page pointed out the problem is not in noweb
but in a shell script embedded in the src/algebra/Makefile.pamphlet
and the semantics of awk.

Which version of awk are you using? The configure script tries
to figure out which one you have. It prefers gawk, then nawk, and
defaults to awk. You can specify a particular awk version on the
command line thus:

make AWK=/usr/local/bin/gawk

We'll fix the makefile shell script at the next update (expected
on april 1).

\start
Date: Thu, 24 Mar 2005 08:17:31 -0500
From: Tim Daly
To: Balbir Thomas
Subject: Re: build failure on Debian Woody Solved -- Stray symbols in src/algebra/Makefile ! ??

As Bill Page pointed out the problem is not in noweb
but in a shell script embedded in the src/algebra/Makefile.pamphlet
and the semantics of awk.

Which version of awk are you using? The configure script tries
to figure out which one you have. It prefers gawk, then nawk, and
defaults to awk. You can specify a particular awk version on the
command line thus:

make AWK=/usr/local/bin/gawk

We'll fix the makefile shell script at the next update (expected
on april 1).

\start
Date: Thu, 24 Mar 2005 11:17:03 -0600
From: MathAction (unknown)
To: MathAction
Subject: [#130 SpecialFunction(Integer) doesn't return Expression Integer] Icomplete gamma function is missing

In DoubleFloatSpecialFunctions, incomplete gamma function is missing. If someone implements it, it's possible to add SpecialFunctionCategory
to the "Exports" of DoubleFloat (add all these functions... => I don't know why gamma is actually exported by DoubleFloat), unexpose DoubleFloatSpecialFunctions and may be SpecialFunction(Integer) will work as requested. The actual behavior is really annoying
<br>
Cheers

\start
Date: Thu, 24 Mar 2005 12:03:27 -0600
From: MathAction (test)
To: MathAction
Subject: [#122 Handling of power series] PATCH: Replace %i (indent) by %I

This patch replace all %i (format) by %I. Go to src/interp directory and type grep -r '%i\>' . 
It's not heavily tested but relatively simple (check it).
See above for details.
<pre>
diff -ur ../axiom-old/src/interp/format.boot.pamphlet src/interp/format.boot.pamphlet
--- ../axiom-old/src/interp/format.boot.pamphlet	2005-01-05 01:04:55.000000000 +0100
+++ src/interp/format.boot.pamphlet	2005-03-24 18:39:07.030278760 +0100
@@ -58,7 +58,7 @@
   sayMSG formatModemap old2NewModemaps displayTranModemap m
 
 sayModemapWithNumber(m,n) ==
-  msg := reverse cleanUpSegmentedMsg reverse ["%i","%i",'" ",
+  msg := reverse cleanUpSegmentedMsg reverse ["%I","%I",'" ",
     STRCONC(lbrkSch(),object2String n,rbrkSch()),
       :formatModemap displayTranModemap m,"%u","%u"]
   sayMSG flowSegmentedMsg(reverse msg,$LINELENGTH,3)
@@ -354,7 +354,7 @@
   $permitWhere : local := true
   $whereList: local := nil
   s:= form2String u
-  $whereList => concat(s,'%b,'"where",'%d,"%i",$whereList,"%u")
+  $whereList => concat(s,'%b,'"where",'%d,"%I",$whereList,"%u")
   s
 
 form2StringWithPrens form ==
@@ -482,10 +482,10 @@
     $permitWhere = true =>
       opList:= formatJoinKey(r,id)
       $whereList:= concat($whereList,"%l",$declVar,": ",
-        formJoin2 argl,'%b,'"with",'%d,"%i",opList,"%u")
+        formJoin2 argl,'%b,'"with",'%d,"%I",opList,"%u")
       formJoin2 argl
     opList:= formatJoinKey(r,id)
-    suffix := concat('%b,'"with",'%d,"%i",opList,"%u")
+    suffix := concat('%b,'"with",'%d,"%I",opList,"%u")
     concat(formJoin2 argl,suffix)
   formJoin2 u
 
diff -ur ../axiom-old/src/interp/i-syscmd.boot.pamphlet src/interp/i-syscmd.boot.pamphlet
--- ../axiom-old/src/interp/i-syscmd.boot.pamphlet	2005-01-30 13:04:38.000000000 +0100
+++ src/interp/i-syscmd.boot.pamphlet	2005-03-24 18:34:14.263786032 +0100
@@ -1823,7 +1823,7 @@
      '%l,'"   ",'%b,:blankList patterns,'%d]
   for [syn,:comm] in ls repeat
     if SUBSTRING(syn,0,1) = '"|" then syn := SUBSTRING(syn,1,NIL)
-    if syn = '"%i" then syn := '"%i "
+    if syn = '"%I" then syn := '"%I "
     wid := MAX(30 - (entryWidth syn),1)
     sayBrightly concat('%b,prefix,syn,'%d,
       fillerSpaces(wid,'"."),'" ",prefix,comm)
diff -ur ../axiom-old/src/interp/msgdb.boot.pamphlet src/interp/msgdb.boot.pamphlet
--- ../axiom-old/src/interp/msgdb.boot.pamphlet	2005-01-05 01:05:36.000000000 +0100
+++ src/interp/msgdb.boot.pamphlet	2005-03-24 18:35:57.886033056 +0100
@@ -28,7 +28,7 @@
    %ceon       turn on centering
    %d          turn off bright printing
    %f          user defined printing
-   %i          start indentation of 3 more spaces
+   %I          start indentation of 3 more spaces -- (2005) changed from %i (avoid conflict with complex i) 
    %l          start a new line
    %m          math-print an expression
    %rjoff      turn off right justification (actually ragged left)
@@ -254,7 +254,7 @@
   NREVERSE msg1
 
 
-SETANDFILEQ($msgdbPrims,'( %b %d %l %i %u %U %n %x %ce %rj "%U" "%b" "%d" "%l" "%i" "%u" "%U" "%n" "%x" "%ce" "%rj"))
+SETANDFILEQ($msgdbPrims,'( %b %d %l %I %u %U %n %x %ce %rj "%U" "%b" "%d" "%l" "%I" "%u" "%U" "%n" "%x" "%ce" "%rj"))
 SETANDFILEQ($msgdbPunct,'(_. _, _! _: _; _? _] _)  "." "," "!" ":" ";" "?" "]" ")"  ))
 SETANDFILEQ($msgdbNoBlanksBeforeGroup,['" ", " ", '"%", "%",_
                             :$msgdbPrims, :$msgdbPunct])
@@ -289,8 +289,8 @@
   blanks := ['" "," "]
   haveBlank := NIL
   prims :=
-    '(%b %d %l %i %u %m %ce %rj _
-     "%b" "%d" "%l" "%i" "%m" "%u" "%ce" "%rj")
+    '(%b %d %l %I %u %m %ce %rj _
+     "%b" "%d" "%l" "%I" "%m" "%u" "%ce" "%rj")
   msg1 := NIL
   for x in msg repeat
     if haveBlank and ((x in blanks) or (x in prims)) then
@@ -512,7 +512,7 @@
         actualMarg := potentialMarg
         nl := [f,'%l,:nl]
         lnl := 199999
-      f in '("%i" %i ) =>
+      f in '("%I" %I ) =>
         potentialMarg := potentialMarg + 3
         nl := [f,:nl]
       PAIRP(f) and CAR(f) in '("%t" %t) =>
@@ -652,7 +652,7 @@
   x = '"%l" =>
     sayNewLine()
     for i in 1..$MARG repeat sayString '" "
-  x = '"%i" =>
+  x = '"%I" =>
     $MARG := $MARG + 3
   x = '"%u" =>
     $MARG := $MARG - 3
@@ -679,7 +679,7 @@
   x = '"%l" =>
     sayString('"\\")
     for i in 1..$MARG repeat sayString '"\ "
-  x = '"%i" =>
+  x = '"%I" =>
     $MARG := $MARG + 3
   x = '"%u" =>
     $MARG := $MARG - 3
</pre>

\start
Date: Thu, 24 Mar 2005 13:39:59 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#132 Series expansion with complex doesn't print expansion point in type expression] 

??changed:
-<pre>
-diff -ur ../axiom-old/src/interp/format.boot.pamphlet src/interp/format.boot.pamphlet
---- ../axiom-old/src/interp/format.boot.pamphlet	2005-01-05 01:04:55.000000000 +0100
-+++ src/interp/format.boot.pamphlet	2005-03-24 18:39:07.030278760 +0100
-@@ -58,7 +58,7 @@
-   sayMSG formatModemap old2NewModemaps displayTranModemap m
- 
- sayModemapWithNumber(m,n) ==
--  msg := reverse cleanUpSegmentedMsg reverse ["%i","%i",'" ",
-+  msg := reverse cleanUpSegmentedMsg reverse ["%I","%I",'" ",
-     STRCONC(lbrkSch(),object2String n,rbrkSch()),
-       :formatModemap displayTranModemap m,"%u","%u"]
-   sayMSG flowSegmentedMsg(reverse msg,$LINELENGTH,3)
-@@ -354,7 +354,7 @@
-   $permitWhere : local := true
-   $whereList: local := nil
-   s:= form2String u
--  $whereList => concat(s,'%b,'"where",'%d,"%i",$whereList,"%u")
-+  $whereList => concat(s,'%b,'"where",'%d,"%I",$whereList,"%u")
-[87 more lines...]

\start
Date: Thu, 24 Mar 2005 13:42:39 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#132 Series expansion with complex doesn't print expansion point in type expression] split form #122

Severity: normal => critical 

\start
Date: Thu, 24 Mar 2005 13:38:48 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#132 Series expansion with complex doesn't print expansion point in type expression] (new) 

Original Date: Sun, 13 Mar 2005 08:44:43 -0600

\begin{axiom}
series(sin(x),x=%i)
\end{axiom}

<pre>
Type: UnivariatePuiseuxSeries?(Expression Complex Integer,x,)
                                                           ^^
</pre>
but for Integer for example
<pre>
Type: UnivariatePuiseuxSeries?(Expression Integer,x,0)
</pre>

>From unknown Sun Mar 20 14:30:14 -0600 2005
From: 
Date: Sun, 20 Mar 2005 14:30:14 -0600
Subject: With complex doesn't print expansion point (type)

<pre>
file:     msgdb.boot.pamphlet
function: brightPrint0

  x = '"%i" =>
    $MARG := $MARG + 3
------------------------
Each message may contain formatting codes and and parameter codes.
The formatting codes are:
   %b          turn on bright printing
   %ceoff      turn off centering
   %ceon       turn on centering
   %d          turn off bright printing
   %f          user defined printing
   %i          start indentation of 3 more spaces
   %l          start a new line
   %m          math-print an expression
   %rjoff      turn off right justification (actually ragged left)
   %rjon       turn on right justification (actually ragged left)
   %s          pretty-print as an S-expression
   %u          unindent 3 spaces
   %x#         insert # spaces
</pre>

>From unknown Sun Mar 20 14:33:53 -0600 2005
From: 
Date: Sun, 20 Mar 2005 14:33:53 -0600
Subject: With binary infix operator in expansion point,
	transform it to fortran (displayed type)

\begin{axiom}
series(sin(x),x=%pi/2)
series(sin(x),x=%e)
series(sin(x),x=%e+3)
series(sin(x),x=%i+7)
\end{axiom}
<pre>
file:                  format.boot.pamphlet
Infix Binary Operator: "=" "+" "-" "*" "/" "**" "^" (i-output.boot.pamphlet => function isBinaryInfix)
function:              form2String1 call fortexp0
 
   isBinaryInfix op => fortexp0 [op,:argl]

----------------------------------------
In fortPre1 (file:newfort.boot.pamphlet)

  fortPre1 e ==
    -- replace spad function names by Fortran equivalents
    -- where appropriate, replace integers by floats
    -- extract complex numbers
    -- replace powers of %e by calls to EXP
    -- replace x**2 by x*x etc.
    -- replace ROOT by either SQRT or **(1./ ... )
    -- replace N-ary by binary functions
    -- strip the '%' character off objects like %pi etc..
</pre> 

>From test Thu Mar 24 12:03:22 -0600 2005
From: test
Date: Thu, 24 Mar 2005 12:03:22 -0600
Subject: PATCH: Replace %i (indent) by %I

This patch replace all %i (format) by %I. Go to src/interp directory and type grep -r '%i\>' . 
It's not heavily tested but relatively simple (check it).
See above for details.
<pre>
diff -ur ../axiom-old/src/interp/format.boot.pamphlet src/interp/format.boot.pamphlet
--- ../axiom-old/src/interp/format.boot.pamphlet	2005-01-05 01:04:55.000000000 +0100
+++ src/interp/format.boot.pamphlet	2005-03-24 18:39:07.030278760 +0100
@@ -58,7 +58,7 @@
   sayMSG formatModemap old2NewModemaps displayTranModemap m
 
 sayModemapWithNumber(m,n) ==
-  msg := reverse cleanUpSegmentedMsg reverse ["%i","%i",'" ",
+  msg := reverse cleanUpSegmentedMsg reverse ["%I","%I",'" ",
     STRCONC(lbrkSch(),object2String n,rbrkSch()),
       :formatModemap displayTranModemap m,"%u","%u"]
   sayMSG flowSegmentedMsg(reverse msg,$LINELENGTH,3)
@@ -354,7 +354,7 @@
   $permitWhere : local := true
   $whereList: local := nil
   s:= form2String u
-  $whereList => concat(s,'%b,'"where",'%d,"%i",$whereList,"%u")
+  $whereList => concat(s,'%b,'"where",'%d,"%I",$whereList,"%u")
   s
 
 form2StringWithPrens form ==
@@ -482,10 +482,10 @@
     $permitWhere = true =>
       opList:= formatJoinKey(r,id)
       $whereList:= concat($whereList,"%l",$declVar,": ",
-        formJoin2 argl,'%b,'"with",'%d,"%i",opList,"%u")
+        formJoin2 argl,'%b,'"with",'%d,"%I",opList,"%u")
       formJoin2 argl
     opList:= formatJoinKey(r,id)
-    suffix := concat('%b,'"with",'%d,"%i",opList,"%u")
+    suffix := concat('%b,'"with",'%d,"%I",opList,"%u")
     concat(formJoin2 argl,suffix)
   formJoin2 u
 
diff -ur ../axiom-old/src/interp/i-syscmd.boot.pamphlet src/interp/i-syscmd.boot.pamphlet
--- ../axiom-old/src/interp/i-syscmd.boot.pamphlet	2005-01-30 13:04:38.000000000 +0100
+++ src/interp/i-syscmd.boot.pamphlet	2005-03-24 18:34:14.263786032 +0100
@@ -1823,7 +1823,7 @@
      '%l,'"   ",'%b,:blankList patterns,'%d]
   for [syn,:comm] in ls repeat
     if SUBSTRING(syn,0,1) = '"|" then syn := SUBSTRING(syn,1,NIL)
-    if syn = '"%i" then syn := '"%i "
+    if syn = '"%I" then syn := '"%I "
     wid := MAX(30 - (entryWidth syn),1)
     sayBrightly concat('%b,prefix,syn,'%d,
       fillerSpaces(wid,'"."),'" ",prefix,comm)
diff -ur ../axiom-old/src/interp/msgdb.boot.pamphlet src/interp/msgdb.boot.pamphlet
--- ../axiom-old/src/interp/msgdb.boot.pamphlet	2005-01-05 01:05:36.000000000 +0100
+++ src/interp/msgdb.boot.pamphlet	2005-03-24 18:35:57.886033056 +0100
@@ -28,7 +28,7 @@
    %ceon       turn on centering
    %d          turn off bright printing
    %f          user defined printing
-   %i          start indentation of 3 more spaces
+   %I          start indentation of 3 more spaces -- (2005) changed from %i (avoid conflict with complex i) 
    %l          start a new line
    %m          math-print an expression
    %rjoff      turn off right justification (actually ragged left)
@@ -254,7 +254,7 @@
   NREVERSE msg1
 
 
-SETANDFILEQ($msgdbPrims,'( %b %d %l %i %u %U %n %x %ce %rj "%U" "%b" "%d" "%l" "%i" "%u" "%U" "%n" "%x" "%ce" "%rj"))
+SETANDFILEQ($msgdbPrims,'( %b %d %l %I %u %U %n %x %ce %rj "%U" "%b" "%d" "%l" "%I" "%u" "%U" "%n" "%x" "%ce" "%rj"))
 SETANDFILEQ($msgdbPunct,'(_. _, _! _: _; _? _] _)  "." "," "!" ":" ";" "?" "]" ")"  ))
 SETANDFILEQ($msgdbNoBlanksBeforeGroup,['" ", " ", '"%", "%",_
                             :$msgdbPrims, :$msgdbPunct])
@@ -289,8 +289,8 @@
   blanks := ['" "," "]
   haveBlank := NIL
   prims :=
-    '(%b %d %l %i %u %m %ce %rj _
-     "%b" "%d" "%l" "%i" "%m" "%u" "%ce" "%rj")
+    '(%b %d %l %I %u %m %ce %rj _
+     "%b" "%d" "%l" "%I" "%m" "%u" "%ce" "%rj")
   msg1 := NIL
   for x in msg repeat
     if haveBlank and ((x in blanks) or (x in prims)) then
@@ -512,7 +512,7 @@
         actualMarg := potentialMarg
         nl := [f,'%l,:nl]
         lnl := 199999
-      f in '("%i" %i ) =>
+      f in '("%I" %I ) =>
         potentialMarg := potentialMarg + 3
         nl := [f,:nl]
       PAIRP(f) and CAR(f) in '("%t" %t) =>
@@ -652,7 +652,7 @@
   x = '"%l" =>
     sayNewLine()
     for i in 1..$MARG repeat sayString '" "
-  x = '"%i" =>
+  x = '"%I" =>
     $MARG := $MARG + 3
   x = '"%u" =>
     $MARG := $MARG - 3
@@ -679,7 +679,7 @@
   x = '"%l" =>
     sayString('"\\")
     for i in 1..$MARG repeat sayString '"\ "
-  x = '"%i" =>
+  x = '"%I" =>
     $MARG := $MARG + 3
   x = '"%u" =>
     $MARG := $MARG - 3
</pre>

\start
Date: Thu, 24 Mar 2005 14:48:29 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#122 Handling of power series] 

++added:
See also

  #132 -- Series expansion with complex doesn't print expansion point in type expression

\start
Date: Thu, 24 Mar 2005 17:25:56 -0500
From: Balbir Thomas
To: list
Subject: Re: build failure on Debian Woody Solved -- Stray symbols in src/algebra/Makefile ! ??

Hi,

>As Bill Page pointed out the problem is not in noweb
>but in a shell script embedded in the src/algebra/Makefile.pamphlet
>and the semantics of awk.
>
>Which version of awk are you using? The configure script tries
>to figure out which one you have. It prefers gawk, then nawk, and
>defaults to awk. You can specify a particular awk version on the
>command line thus:
>
I was using the version 3.1.0 of Gawk . The testing/unstable version
of gawk is 3.1.4. I have compiled this for debian stable and will
install and try to build again. This should tell us if gawk is 
the only problem. 

I was planning on making available the compiled deb packages for
others who use debian stable. So I hope gawk's new version is
not needed beyond compilation.

>make AWK=/usr/local/bin/gawk
>
>We'll fix the makefile shell script at the next update (expected
>on april 1).
>

Looks like build failed again with the error :
BOOT>cp: cannot create regular file
`/home/bt/archive/axiom/mnt/linux/algebra/RETRACT-.NRLIB/code.o': No such file
or directory
make[4]: *** [/home/bt/archive/axiom/int/algebra/RETRACT-.NRLIB/code.o] Error 1
make[4]: Leaving directory `/home/bt/archive/axiom/src/algebra'
make[3]: *** [algebradir] Error 2
make[3]: Leaving directory `/home/bt/archive/axiom/src'
make[2]: *** [srcdir] Error 2
make[2]: Leaving directory `/home/bt/archive/axiom'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/bt/archive/axiom'
make: *** [build-stamp] Error 2

This error occurs even though the file
/home/bt/archive/axiom/int/algebra/RETRACT-.NRLIB/code.o exists !

Rather than try to spend another day or two to figure out what is going on
I shall first try to build with the new gawk as it takes many hours to build
on my system. Hopefully this is another manifestation of gawk problems.

regards
b thomas

\start
Date: Thu, 24 Mar 2005 19:03:17 -0500
From: Balbir Thomas
To: list
Subject: *.NRLIB directories not created under ${OUT}

Hi,

As mentioned in my previous mail there is another error that
occurs when building axiom on Debian/woody :

BOOT>cp: cannot create regular file
`/home/bt/archive/axiom/mnt/linux/algebra/RETRACT-.NRLIB/code.o': No such file
or directory
make[4]: *** [/home/bt/archive/axiom/int/algebra/RETRACT-.NRLIB/code.o] Error 1
make[4]: Leaving directory `/home/bt/archive/axiom/src/algebra'
make[3]: *** [algebradir] Error 2
make[3]: Leaving directory `/home/bt/archive/axiom/src'
make[2]: *** [srcdir] Error 2
make[2]: Leaving directory `/home/bt/archive/axiom'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/bt/archive/axiom'
make: *** [build-stamp] Error 2

I think this is when src/algebra/Makefile is trying to process the rule:

${OUT}/%.o: ${MID}/%.NRLIB/code.o
        @ echo generic 1 -- making ${OUT}/$*.o from ${MID}/$*.NRLIB
        @ cp ${MID}/$*.NRLIB/code.o ${OUT}/$*.o


The problem is that ${OUT}/*.NRLIB directories have not been created at this
point so copying into them fails. I can't find were (which makefile) was 
supposed to create these directories. 

\start
Date: Thu, 24 Mar 2005 21:16:58 -0500
From: Balbir Thomas
To: list
Subject: Debian/Woody Build failure even with Gawk 3.1.4 [long mail ]

Hi,
The old problem of stray backslashes in src\algebra\Makefile
still occurs with the Debian testing/unstable version
of gawk (version 3.1.4) used on Debian/Stable platform.
The make version is 3.79.1. Make version on Debian/testing
stable is 3.80. Hence it is still not clear to me why
axiom can be built on Debian testing/unstable but not
on stable. There are no apparent build dependencies that
can not be fulfilled on Stable. 

Here is the same error message :

make[4]: *** No rule to make target
`/home/bt/archive/axiom-20050201/int/algebra/ABELGRP.o', needed by
`src'.  Stop.
make[4]: Leaving directory `/home/bt/archive/axiom-20050201/src/algebra'
make[3]: *** [algebradir] Error 2
make[3]: Leaving directory `/home/bt/archive/axiom-20050201/src'
make[2]: *** [srcdir] Error 2
make[2]: Leaving directory `/home/bt/archive/axiom-20050201'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/bt/archive/axiom-20050201'
make: *** [build-stamp] Error 2

Here is some sample lines from src/algebra/Makefile

\${MID}/ABELGRP.spad: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"category ABELGRP AbelianGroup" \${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.spad

\${MID}/ABELGRP.lsp: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"ABELGRP.lsp BOOTSTRAP" \${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.lsp

\${MID}/ABELGRP-.lsp: \${IN}/catdef.spad.pamphlet
        \${TANGLE} -R"ABELGRP-.lsp BOOTSTRAP" \${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP-.lsp


Also some very unusual behaviour with the build process when I do edit
src/algebra/Makefile to remove all backslashes before dollar signs.
On doing so the build can be restarted and all of algebra is built 
even the tests are run but then (as pointed out before) build fails 
with and error message :

BOOT>cp: cannot create regular file
`/home/bt/archive/axiom/mnt/linux/algebra/RETRACT-.NRLIB/code.o': No
such file or directory
make[4]: *** [/home/bt/archive/axiom/int/algebra/RETRACT-.NRLIB/code.o]
Error 1

The strange thing is that if I restart the build it continues one step
further every time I restart it. 

For instance after staring the build two or there time it now fails at

BOOT>cp: cannot create regular file
`/home/bt/archive/axiom/mnt/linux/algebra/ELTAGG-.NRLIB/code.o': No such
file or directory
make[4]: *** [/home/bt/archive/axiom/int/algebra/ELTAGG-.NRLIB/code.o]
Error 1

Then at :

BOOT>cp: cannot create regular file
`/home/bt/archive/axiom/mnt/linux/algebra/IEVALAB-.NRLIB/code.o': No
such file or directory
make[4]: *** [/home/bt/archive/axiom/int/algebra/IEVALAB-.NRLIB/code.o]
Error 1

and so on.

Now the build rule for this step is (if I understand correctly)

${OUT}/%.o: ${MID}/%.NRLIB/code.o
        @ echo generic 1 -- making ${OUT}/$*.o from ${MID}/$*.NRLIB
        @ cp ${MID}/$*.NRLIB/code.o ${OUT}/$*.o

where the variables are being defined as 
MID=${INT}/algebra
OUT=${MNT}/${SYS}/algebra

This means $* in the copy statement was translated as
RETRACT-.NRLIB/code !!!. But when the build was  restarted it did check
for the RETRACT.o in ${OUT} which was there from before (?) and so it 
went on to the next step. 

This is weird as hell :-) ! I doubt this is some serious corruption of
my linux distribution as I generally try to keep a clean Debian/Stable
distribution. Sould someone like to inspect I can put the whole
directory tree of the current state of axiom build online on my
homepage.

I'll continue working on this as time permits and see if I can figure out anything else.
I hope you will kindly bear with the nuisance of me posting about my successes or
failures :-). Though if some axiom developer is trying to build on
Debian/Stable I'll stop, as I am sure he/she is more able than me to
figure this out.

\start
Date: 25 Mar 2005 10:05:42 -0500
From: Camm Maguire
To: Balbir Thomas
Subject: Re: Debian/Woody Build failure even with Gawk 3.1.4 [ long mail ]

Greetings, and thanks for looking into this!  I suppose you want to
post on backports.org?

The Debian package builds with an external GCL, and the axiom
Build-Deps say gcl (>= 2.6.5-1).  The version of GCL in stable is
2.5.0....  Have you backported gcl too?

If so, perhaps you could post your full build log somewhere and I'll
look into it.

If you get stuck, and there is demand, I suppose I could do the
backport too as I have everything setup.  But it seems like sarge is
around the corner.

Take care,

Balbir Thomas writes:

> Hi,
> The old problem of stray backslashes in src\algebra\Makefile
> still occurs with the Debian testing/unstable version
> of gawk (version 3.1.4) used on Debian/Stable platform.
> The make version is 3.79.1. Make version on Debian/testing
> stable is 3.80. Hence it is still not clear to me why
> axiom can be built on Debian testing/unstable but not
> on stable. There are no apparent build dependencies that
> can not be fulfilled on Stable. 
> 
> Here is the same error message :
> 
> make[4]: *** No rule to make target
> `/home/bt/archive/axiom-20050201/int/algebra/ABELGRP.o', needed by
> `src'.  Stop.
> make[4]: Leaving directory `/home/bt/archive/axiom-20050201/src/algebra'
> make[3]: *** [algebradir] Error 2
> make[3]: Leaving directory `/home/bt/archive/axiom-20050201/src'
> make[2]: *** [srcdir] Error 2
> make[2]: Leaving directory `/home/bt/archive/axiom-20050201'
> make[1]: *** [all] Error 2
> make[1]: Leaving directory `/home/bt/archive/axiom-20050201'
> make: *** [build-stamp] Error 2
> 
> Here is some sample lines from src/algebra/Makefile
> 
> \${MID}/ABELGRP.spad: \${IN}/catdef.spad.pamphlet
>         \${TANGLE} -R"category ABELGRP AbelianGroup" \${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.spad
> 
> \${MID}/ABELGRP.lsp: \${IN}/catdef.spad.pamphlet
>         \${TANGLE} -R"ABELGRP.lsp BOOTSTRAP" \${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP.lsp
> 
> \${MID}/ABELGRP-.lsp: \${IN}/catdef.spad.pamphlet
>         \${TANGLE} -R"ABELGRP-.lsp BOOTSTRAP" \${IN}/catdef.spad.pamphlet>\${MID}/ABELGRP-.lsp
> 
> 
> Also some very unusual behaviour with the build process when I do edit
> src/algebra/Makefile to remove all backslashes before dollar signs.
> On doing so the build can be restarted and all of algebra is built 
> even the tests are run but then (as pointed out before) build fails 
> with and error message :
> 
> BOOT>cp: cannot create regular file
> `/home/bt/archive/axiom/mnt/linux/algebra/RETRACT-.NRLIB/code.o': No
> such file or directory
> make[4]: *** [/home/bt/archive/axiom/int/algebra/RETRACT-.NRLIB/code.o]
> Error 1
> 
> The strange thing is that if I restart the build it continues one step
> further every time I restart it. 
> 
> For instance after staring the build two or there time it now fails at
> 
> BOOT>cp: cannot create regular file
> `/home/bt/archive/axiom/mnt/linux/algebra/ELTAGG-.NRLIB/code.o': No such
> file or directory
> make[4]: *** [/home/bt/archive/axiom/int/algebra/ELTAGG-.NRLIB/code.o]
> Error 1
> 
> Then at :
> 
> BOOT>cp: cannot create regular file
> `/home/bt/archive/axiom/mnt/linux/algebra/IEVALAB-.NRLIB/code.o': No
> such file or directory
> make[4]: *** [/home/bt/archive/axiom/int/algebra/IEVALAB-.NRLIB/code.o]
> Error 1
> 
> and so on.
> 
> Now the build rule for this step is (if I understand correctly)
> 
> ${OUT}/%.o: ${MID}/%.NRLIB/code.o
>         @ echo generic 1 -- making ${OUT}/$*.o from ${MID}/$*.NRLIB
>         @ cp ${MID}/$*.NRLIB/code.o ${OUT}/$*.o
> 
> where the variables are being defined as 
> MID=${INT}/algebra
> OUT=${MNT}/${SYS}/algebra
> 
> This means $* in the copy statement was translated as
> RETRACT-.NRLIB/code !!!. But when the build was  restarted it did check
> for the RETRACT.o in ${OUT} which was there from before (?) and so it 
> went on to the next step. 
> 
> This is weird as hell :-) ! I doubt this is some serious corruption of
> my linux distribution as I generally try to keep a clean Debian/Stable
> distribution. Sould someone like to inspect I can put the whole
> directory tree of the current state of axiom build online on my
> homepage.
> 
> I'll continue working on this as time permits and see if I can figure out anything else.
> I hope you will kindly bear with the nuisance of me posting about my successes or
> failures :-). Though if some axiom developer is trying to build on
> Debian/Stable I'll stop, as I am sure he/she is more able than me to
> figure this out.

\start
Date: Fri, 25 Mar 2005 10:04:36 -0600
From: MathAction (billpage)
To: MathAction
Subject: [MathActionRSS] (new) 

<dtml-let 
 wikiUrl=wikiUrl
 pages=pages
>
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="&dtml-wikiUrl;">
<title>zopewiki.org : new pages</title>
<link>&dtml-wikiUrl;</link>
<description>
zopewiki.org : new pages
</description>
<sy:updatePeriod>daily</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2004-04-24T16:54:03Z</sy:updateBase>
<items>
<rdf:Seq>
<dtml-in pages sort=creation_time reverse size=15>
<dtml-if "not('SandBox' in getObject().ancestorsAsList())">
<rdf:li resource="&dtml-wikiUrl;/&dtml.url_quote-id;" />
</dtml-if>
</dtml-in>
</rdf:Seq>
</items>
</channel>
<dtml-in pages sort=creation_time reverse size=15>
<dtml-if "not('SandBox' in getObject().ancestorsAsList())">
<item rdf:about="&dtml-wikiUrl;/&dtml.url_quote-id;">
<title>&dtml-Title;</title>
<link>&dtml-wikiUrl;/&dtml.url_quote-id;</link>
<description><!![CDATA[<dtml-var "getObject().summary(1000) #summary #<-- from brain">]]></description>
</item>
</dtml-if>
</dtml-in>
</rdf:RDF>
</dtml-let>
<hr>

RSS feed for MathAction

 <a href="http://feedvalidator.org/check.cgi?url=http://page.axiom-developer.org/zope/mathaction/FrontPage/rss"><img border="0" src="valid-rss.png" alt="[Valid RSS]" title="Validate my RSS feed" width="88" height="31" /></a>

Based on http://zopewiki.org/ZopeWikiRSS.

\start
Date: Fri, 25 Mar 2005 12:39:45 -0500
From: Tim Daly
To: list
Subject: axiom-developer domain name

Well, considering that it appears to be useful I've registered the
axiom-developer.org domain name for the next 9 years. Looks like
we're in it for the long haul :-)

\start
Date: Fri, 25 Mar 2005 11:07:20 -0600
From: MathAction (billpage)
To: MathAction
Subject: [MathActionRSS] 

<a href="http://page.axiom-developer.org/zope/mathaction/pages_rss"
 alt="News Feed" title="Bookmark this feed">
RSS feed <img src="xml.gif"></a> for MathAction

RSS (an acronym for "Rich Site Summary" and later coined "Really Simple Syndication") is a way for web sites to summarize their content...

For information about RSS see:

  - http://www.mozilla.org/products/firefox/live-bookmarks.html

  - http://www.redhat.com/magazine/005mar05/features/rss/

 <a href="http://feedvalidator.org/check.cgi?url=http://page.axiom-developer.org/zope/mathaction/FrontPage/pages_rss"><img border="0" src="valid-rss.png" alt="[Valid RSS]" title="Validate my RSS feed" width="88" height="31" /></a>

++added:

\start
Date: Fri, 25 Mar 2005 10:47:57 -0600
From: MathAction (unknown)
To: MathAction
Subject: [#122 Handling of power series] PATCH: Temporary hack

In axiom the cercion of power series is really strange:
  . ExpressionToUnivariatePowerSeries (function: series,taylor,laurent...) return Any type. 
  . When this Any type is printed, the series is coerced. For example to UnivariatePuiseuxSeries.
  . This process of coercion is strange.
I will give some hint to understand this. First here is the actions that you have to do for a better understanding of this bug.
Here the interpreter has to coerce the series (EXPR (INT OR OTHER)), the variable  and the expansion point in type.
In Axiom trace all these functions: P2Uls P2Upxs P2Uts Expr2Up NDmp2domain Var2OtherPS Var2QF P2Us canCoerceLocal coerceIntTableOrFunction coerceIntTower canCoerce1 canCoerceTower canCoerce canCoerceFrom resolveTT1 resolveTTSpecial (you can had HasCate hasCaty hasCaty1 hasCate1 if you want to better understand
ofCategory bug (not parameterized ?)
<pre>
)tr P2Uls 
)tr P2Upxs 
)tr P2Uts 
)tr Expr2Up 
)tr NDmp2domain
)tr Var2OtherPS
)tr Var2QF
)tr P2Us
)tr canCoerceLocal
)tr coerceIntTableOrFunction
)tr coerceIntTower
)tr canCoerce1
)tr canCoerceTower
)tr canCoerce
)tr canCoerceFrom
)tr resolveTT1
)tr coerceInt
)tr algEqual
)tr resolveTTSpecial
</pre>
Now you can create power series integer: 
<pre>
a:=series(sin(x))
</pre>
Beware axiom will crash.
Now type a*1.0, restart do the same and type 1.0*a.
You will see that axiom in this process do not coerce all type (for example sometimes 0.0 (expansion point) remain Integer but of type EXPR FLOAT).
<pre>
Normally:
x in type is of type Symbol
0.0 (expansion point is of type Expression (type of internal representation of the power series). For example: EXPR FLOAT.
</pre>
Now you can restart and create 2 power series, one with integer the other with float:
<pre>
a:=series(sin(x))
Coerce it (see above):
a:= a::UnivariatePuiseuxSeries(Expression Integer,x,0)
b:= a::UnivariatePuiseuxSeries(Expression Float,x,0.0)
</pre>
You can do a*b restart do the same and b*a. This process of coercion involve some strange type and axiom coerce sometimes to
UnivariatePuiseuxSeries(UnivariatePuiseuxSeries) etc ...
This and the expansion point not really coerced trigger bug.
In boot code there is a function resolveTTSpecial and its commentary:
<pre>
  -- tries to resolve things that would otherwise get mangled in the
  -- rest of the resolve world. I'll leave it for Albi to fix those
  -- things. (RSS 1/-86)
</pre>
In this patch I use this function to express the resolved type. It' a temporary hack and I'm not sure that this patch is correct (see the code).
Second, I add two other tests: I check the equality of the Symbol(s) and the two expansion points.
Test it, check it, enhance it.

\start
Date: Fri, 25 Mar 2005 11:34:06 -0600
From: MathAction (billpage)
To: MathAction
Subject: [MathActionRSSedit] (new) 

<dtml-let
 wikiUrl=wikiUrl
 pages=pages 
>
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="&dtml-wikiUrl;">
<title>zopewiki.org : changed pages</title>
<link>&dtml-wikiUrl;</link>
<description>
zopewiki.org : changed pages
</description>
<sy:updatePeriod>daily</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<sy:updateBase>2004-04-24T16:54:03Z</sy:updateBase>
<items>
<rdf:Seq>
<dtml-in pages sort=last_edit_time reverse size=15>
<dtml-if "not('SandBox' in getObject().ancestorsAsList())">
<rdf:li resource="&dtml-wikiUrl;/&dtml.url_quote-id;" />
</dtml-if>
</dtml-in>
</rdf:Seq>
</items>
</channel>
<dtml-in pages sort=last_edit_time reverse size=15>
<dtml-if "not('SandBox' in getObject().ancestorsAsList())">
<item rdf:about="&dtml-wikiUrl;/&dtml.url_quote-id;">
<title>&dtml-Title;</title>
<link>&dtml-wikiUrl;/&dtml.url_quote-id;</link>
<description>
<![CDATA[Edited by  : &dtml-last_editor;<br />
Edited at  : &dtml-last_edit_time;<br />
Change note: &dtml-last_log;<br />]]></description>
</item>
</dtml-if>
</dtml-in>
</rdf:RDF>
</dtml-let>
<hr>

RSS feed for MathAction Edits

 This page generates an
"RSS feed":http://page.axiom-developer.org/zope/mathaction/changes_rss
or **recently modified pages**, showing the title, editor name, edit
time and the change note.

 <a href="http://feedvalidator.org/check.cgi?url=http://page.axiom-developer.org/zope/mathaction/changes_rss">
<img border="0" src="valid-rss.png" alt="[Valid RSS]" title="Validate my RSS feed" width="88" height="31" ></a>

\start
Date: Fri, 25 Mar 2005 12:04:17 -0600
From: MathAction (billpage)
To: MathAction
Subject: [#122 Handling of power series] please explain

I don't understand what you mean by reference to .axiom.input?
In what way is this file involved with the bug?  Please give a
detailed description and example of the remaining bug.

Did you intend to upload an example file called .axiom.input?
To do that you  must use 'edit'. If you do this, I suggest
that you choose a more descriptive and unique file name.

\start
Date: Fri, 25 Mar 2005 12:01:45 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomContributions] Enhanced Fraction domain

Here is a serie of patch to enhance computation that involves fraction integer.
Do
<pre>
download gcl source, decompress this archive apply gcl.patch (this patch come from gcl-2.6.5 but can probably be applied on 2.6.6).
recompress gcl, copy it to zips directory  (keep the same name)
remove gcldir and gcl-2.6.* in lsp directory
patch the interpreter with interp.patch. (change behavior of coercion of fraction(integer))
patch fraction.spad.pamphlet (handle fraction(integer) as integer i.e by gcl)
remove mnt/linux/algebra/FRAC.o, int/algebra/FRAC.NRLIB/code.o and int/algebra/FRAC.spad
type make
remove mnt/linux/algebra/FRAC.o, int/algebra/FRAC.NRLIB/code.o and int/algebra/FRAC.spad
type touch src/algebra/fraction.spad.pamphlet or open it in an editor and resave it
type make
Have fun
</pre>

This involve one patch (gcl.patch) backported from gcl-2.7.0-cvs. It 's a request made for use algorithm from libgmp in cancellation of
gcd in fraction.
Copying of this patch is GNU LIBRARY GENERAL PUBLIC LICENSE       Version 2, June 1991

\start
Date: Fri, 25 Mar 2005 12:13:43 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomContributions] Timing

This patch is just a code optimization and not a mathematical optimization (algorithm)
matrix(FRAC INT,50,50) * matrix(FRAC INT,50,50):
<pre>
before: 3.17 sec
after:  0.83 sec
</pre>
Factor: 3.8192771084
Check it, test it and enhance it, Have fun and regards

\start
Date: Fri, 25 Mar 2005 12:20:51 -0600
From: MathAction (unknown)
To: MathAction
Subject: [#122 Handling of power series] Adding 1.0 coercion in the file .axiom.input

If you add this text to the file .axiom.input (interpreted at the start of axiom) you will crash axiom:
<pre>
1.0::UnivariatePuiseuxSeries(Expression Float,x,0.0
</pre>

\start
Date: Fri, 25 Mar 2005 12:39:26 -0600
From: MathAction (unknown)
To: MathAction
Subject: [#132 Series expansion with complex doesn't print expansion point in type expression] Name of this issue

Bill, I think you can change the name of this issue. The problem concerns expansion point that involve binary operator too (for example 1+3*i).

\start
Date: Fri, 25 Mar 2005 14:23:53 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [User Interface] about jEdit and Axiom

++added:
  - [jEdit] http://www.jedit.org

    jEdit is a mature and well-designed programmer's text editor with over
    7 years of development behind it. While jEdit beats many expensive
    development tools for features and ease of use, it is released as free
    software with full source code, provided under the terms of the GNU
    General Public License. 

    - runs on Mac OS X, OS/2, Unix (linux), VMS and Windows

    - Folding and outlining for selectively hiding or expanding complex
      parts of of the text or program code <b><font color="green">
      - Works with both SPAD indented (pile) code and Aldor block structures
      </font></b>

    - supports file transfer and remote edit via SSH using SSH2 and SFTP

    - allows the user to run text from a buffer through an external process
      and capture the output (Hey, just like emacs :). <b><font color="green">
      - Works with Axiom! And on Windows too.</font></b>

    - very extensible and under active development.

\start
Date: 25 Mar 2005 23:45:12 +0100
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: axiom-developer domain name

Tim Daly writes:

| Well, considering that it appears to be useful I've registered the
| axiom-developer.org domain name for the next 9 years. Looks like
| we're in it for the long haul :-)

awesome!

-- Gaby

\start
Date: Sat, 26 Mar 2005 04:56:21 -0500
From: Balbir Thomas
To: Camm Maguire
Subject: Debian/Stable Packages Built + Summary of issues

Hi,
I did manage to build packages for Debian/Woody (Stable).
I have uploaded these at
http://www.scientificcomputing.net/debian/packages/axiom
I will try and keep this till sarge is released.  These
are on my home computer  so downloads may be slow. But I
doubt many wanting axiom on debian will insist on  using
stable :-)

I have not extensively tested this other than running a
few examples from the hypertex browser. But will ofcourse
be using it till sarge comes around.

There are essentially two issues in building axiom on 
debian stable.

1) The occurance of stray backslash characters in 
   src/algebra/Makefile  (i.e. \$ instead of $).
   Build progresses after making substitutions:
   's/\\\$/$/g'

2) Directories of the forms *.NRLIB are not created
   in mnt/linux/algebra. The is the second point
   where build fails. On creating these directories
   manually the  build progresses to completion.

   This failure corresponds to the pattern rule
   for "${MID}/%.o: ${MID}/%.lsp" in 
   src/algebra/Makefile

   (Please disregard what I said about the second
    failure in my previous mails, I was sleepy
    and confused as hell :-)

Two files build1.log and build2.log  at the above url
are the build logs ending in the first and second 
build failure.

Finally, thank you for all your paitence and efforts.

\start
Date: Sat, 26 Mar 2005 05:32:09 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#133 missing \begin{quote} in Chapter on "Using Types and Modes"] (new) 

There should be a \begin{quote} below
line 6840 of book.pamphlet i.e. at the
begining of chapter on "Using Types and Modes"

\start
Date: Sat, 26 Mar 2005 06:02:16 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomContributions] No

Work with all implementations of common lisp. I use lisp rational. I just asked to change some algorithms (euclidean) in gcl.

\start
Date: Sat, 26 Mar 2005 16:38:23 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#134 suse 9.2, previous version OK] (new) 

gcc -c -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer  -I/home/dsa/axiom/lsp/gcl-2.6.5/o -I../h -I../gcl-tk sfasl.c
In file included from sfasl.c:40:
sfaslbfd.c: In function `fasload':
sfaslbfd.c:266: error: structure has no member named `_raw_size'
sfaslbfd.c:291: error: structure has no member named `_raw_size'
sfaslbfd.c:356: error: structure has no member named `_raw_size'
make[4]: *** [sfasl.o] Error 1

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

gcc -v
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.4/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.4 (pre 3.3.5 20040809)

\start
Date: Sat, 26 Mar 2005 16:38:29 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#135 suse 9.2, previous version OK] (new) 

gcc -c -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer  -I/home/dsa/axiom/lsp/gcl-2.6.5/o -I../h -I../gcl-tk sfasl.c
In file included from sfasl.c:40:
sfaslbfd.c: In function `fasload':
sfaslbfd.c:266: error: structure has no member named `_raw_size'
sfaslbfd.c:291: error: structure has no member named `_raw_size'
sfaslbfd.c:356: error: structure has no member named `_raw_size'
make[4]: *** [sfasl.o] Error 1

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

gcc -v
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.4/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.4 (pre 3.3.5 20040809)

\start
Date: Sat, 26 Mar 2005 16:38:23 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#134 suse 9.2, previous version OK] (new) 

gcc -c -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer  -I/home/dsa/axiom/lsp/gcl-2.6.5/o -I../h -I../gcl-tk sfasl.c
In file included from sfasl.c:40:
sfaslbfd.c: In function `fasload':
sfaslbfd.c:266: error: structure has no member named `_raw_size'
sfaslbfd.c:291: error: structure has no member named `_raw_size'
sfaslbfd.c:356: error: structure has no member named `_raw_size'
make[4]: *** [sfasl.o] Error 1

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

gcc -v
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.4/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.4 (pre 3.3.5 20040809)

\start
Date: Sun, 27 Mar 2005 04:45:52 -0600
From: MathAction (matmota)
To: MathAction
Subject: [Yacas] (new) 

<p>From Yacas' <a href="yacas.sourceforge.net">web page</a>:
<blockquote>
 YACAS is an easy to use, general purpose Computer Algebra System, a program for symbolic manipulation of mathematical expressions. It uses its own programming language designed for symbolic as well as arbitrary-precision numerical computations. The system has a library of scripts that implement many of the symbolic algebra operations; new algorithms can be easily added to the library. YACAS comes with extensive documentation (320+ pages) covering the scripting language, the functionality that is already implemented in the system, and the algorithms we used.
</blockquote>
</p>

\start
Date: Sun, 27 Mar 2005 06:07:07 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomDownload] binary for redhat 9 doesn't work

Hello,  I followed the directions for using the binary for redhat 9, axiom-Feb2005-Redhat9-bin.tgz and I consistently get the message:  /home/axiom/mnt/linux/bin/axiom: line 1: hostname: command not found
The directory for Axiom, /home/axiom--main--1--patch-29/mnt/linux, does not exist.
Goodbye.

What's wrong?

\start
Date: Sun, 27 Mar 2005 10:13:42 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomDownload] axiom-Feb2005-Redhat9-bin.tgz

Check the first couple lines of the axiom command (use which axiom to find it).
Check that the AXIOM shell variable points to the right place.
(p.s. If you sign in I could help you directly. There is no identifying information here)

\start
Date: Sun, 27 Mar 2005 12:34:41 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#136 cercion of power series] (new) 

Original Date: Fri, 25 Mar 2005 10:47:55 -0600

In axiom the cercion of power series is really strange:

  - ExpressionToUnivariatePowerSeries (function: series,taylor,laurent...) return Any type. 

  - When this Any type is printed, the series is coerced. For example to UnivariatePuiseuxSeries.

  - This process of coercion is strange.

I will give some hint to understand this. First here is the actions that you have to do for a better understanding of this bug.
Here the interpreter has to coerce the series (EXPR (INT OR OTHER)), the variable  and the expansion point in type.
In Axiom trace all these functions: P2Uls P2Upxs P2Uts Expr2Up NDmp2domain Var2OtherPS Var2QF P2Us canCoerceLocal coerceIntTableOrFunction coerceIntTower canCoerce1 canCoerceTower canCoerce canCoerceFrom resolveTT1 resolveTTSpecial (you can had HasCate hasCaty hasCaty1 hasCate1 if you want to better understand ofCategory bug (not parameterized ?) ::

  )tr P2Uls 
  )tr P2Upxs 
  )tr P2Uts 
  )tr Expr2Up 
  )tr NDmp2domain
  )tr Var2OtherPS
  )tr Var2QF
  )tr P2Us
  )tr canCoerceLocal
  )tr coerceIntTableOrFunction
  )tr coerceIntTower
  )tr canCoerce1
  )tr canCoerceTower
  )tr canCoerce
  )tr canCoerceFrom
  )tr resolveTT1
  )tr coerceInt
  )tr algEqual
  )tr resolveTTSpecial

Now you can create power series integer::

  a:=series(sin(x))

Beware axiom will crash.
Now type::

  a*1.0

restart do the same and type:

1.0*a

You will see that axiom in this process do not coerce all type (for example sometimes 0.0 (expansion point) remain Integer but of type EXPR FLOAT).
Normally::

  x in type is of type Symbol
  0.0 (expansion point is of type Expression (type of internal representation of the power series). For example: EXPR FLOAT.

Now you can restart and create 2 power series, one with integer the other with float::

  a:=series(sin(x))

Coerce it (see above)::

  a:= a::UnivariatePuiseuxSeries(Expression Integer,x,0)
  b:= a::UnivariatePuiseuxSeries(Expression Float,x,0.0)

You can type::

  a*b

restart do the same type::

  b*a

This process of coercion involve some strange type and axiom coerce sometimes to
UnivariatePuiseuxSeries(UnivariatePuiseuxSeries) etc ...
This and the expansion point not really coerced trigger bug.
In boot code there is a function resolveTTSpecial and its commentary::

  -- tries to resolve things that would otherwise get mangled in the
  -- rest of the resolve world. I'll leave it for Albi to fix those
  -- things. (RSS 1/-86)

In this patch I use this function to express the resolved type. It' a temporary hack and I'm not sure that this patch is correct (see the code).
Second, I add two other tests: I check the equality of the Symbol(s) and the two expansion points.
Test it, check it, enhance it.
  Regards

<a href="power-series.patch">power-series.patch</a>

>From unknown Fri Mar 25 11:03:14 -0600 2005
From: unknown
Date: Fri, 25 Mar 2005 11:03:14 -0600
Subject: This result is cached

The previous patch change the resolved type. It's internally cached and resolveTTspecial is only invoked once.

>From unknown Fri Mar 25 11:08:50 -0600 2005
From: unknown
Date: Fri, 25 Mar 2005 11:08:50 -0600
Subject: .axiom.input

After the above patch applied one bug remain:

If you add this text to the file .axiom.input (interpreted at
the start of axiom) you will crash axiom::

  1.0::UnivariatePuiseuxSeries(Expression Float,x,0.0

\start
Date: Sun, 27 Mar 2005 16:32:04 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Enhanced Fraction Domain] What is strange?

What do you work with for 6 months? Do you mean this proposed patch?
Do you have any specific unit test programs to show that it works
properly?

Yes, Axiom library is written using spad code. Axiom itself,
including the spad compiler is written in lisp and one of the
versions of lisp that supports Axiom is GCL. This is not strange.

I wish you would take the time to explain what you are talking
about. Short sentences with no background background information
do not make any sense. I think your work deserves to be described
in detail so that other people will understand. Please provide a
detailed description.

\start
Date: Mon, 28 Mar 2005 08:04:21 -0500
From: Tim Daly
To: Mark Murray
Subject: Re: CVS?

Mark,

The sequence of updates is
  local disk -> 
    arch branch -> 
      arch main   ->
        cvs (savannah, sourceforge)

The local disk (mine, yours) has completely broken, partial changes.

The arch server has two types of changes, branch changes and main changes.

The arch branch changes are things like SBCL, BSD, etc which are major
efforts by other developers to improve or change Axiom. When the
branch group decides their version is stable it gets merged into main.

The arch main contains changes which will be released into the cvs servers.
This is supposed to happen on a monthly boundary (Feb, March, April, etc).

Pending major patches which are available now on arch and will be released
in the April version are the 2.6.6 change and the documentation changes.

My current local disk change is the BSD branch merge. This will likely 
show up on arch shortly after the April release to the cvs servers.
So in April we'll see the BSD branch merge on arch implying that, if it
works, it will be in the May release.

The monthly release cycle was agreed upon because we need to release
early, release often (thus 6 months is too long) and release quality
(thus immediately is too short). A release is a major piece of work
for me so more than monthly is not practical.

We're going to have a "sprint" day in April at the axiom conference.
After the morning session where we talk about future direction the
plan is to spend the day fixing outstanding issues from issuetracker.
These fixes will be on the arch server in May implying they will be
available in June.

\start
Date: Mon, 28 Mar 2005 13:45:39 +0100
From: Mark Murray
To: Tim Daly
Subject: Re: CVS? 

Tim,

OK, now I understand. Thanks! :-)

M

root writes:
> Mark,
> 
> The sequence of updates is
>   local disk -> 
>     arch branch -> 
>       arch main   ->
>         cvs (savannah, sourceforge)
> 
> The local disk (mine, yours) has completely broken, partial changes.
> 
> The arch server has two types of changes, branch changes and main changes.
> 
> The arch branch changes are things like SBCL, BSD, etc which are major
> efforts by other developers to improve or change Axiom. When the
> branch group decides their version is stable it gets merged into main.
> 
> The arch main contains changes which will be released into the cvs servers.
> This is supposed to happen on a monthly boundary (Feb, March, April, etc).
> 
> Pending major patches which are available now on arch and will be released
> in the April version are the 2.6.6 change and the documentation changes.
> 
> My current local disk change is the BSD branch merge. This will likely 
> show up on arch shortly after the April release to the cvs servers.
> So in April we'll see the BSD branch merge on arch implying that, if it
> works, it will be in the May release.
> 
> The monthly release cycle was agreed upon because we need to release
> early, release often (thus 6 months is too long) and release quality
> (thus immediately is too short). A release is a major piece of work
> for me so more than monthly is not practical.
> 
> We're going to have a "sprint" day in April at the axiom conference.
> After the morning session where we talk about future direction the
> plan is to spend the day fixing outstanding issues from issuetracker.
> These fixes will be on the arch server in May implying they will be
> available in June.

\start
Date: 28 Mar 2005 11:12:27 -0500
From: Camm Maguire
To: Balbir Thomas
Subject: Re: Debian/Stable Packages Built + Summary of issues

Greetings, and thanks for your work on this!  Nice website too.  We
apparently share quite a few interests.  

Its not clear to me why these problems don't appear in the package in
unstable. 

BTW, 2 platforms left before the latest axiom release makes it into
the forthcoming Debian sarge.  I may build by hand there if delays
persist.  m68k just finished successfully with > 1 week build time.

Take care,

Balbir Thomas writes:

> Hi,
> I did manage to build packages for Debian/Woody (Stable).
> I have uploaded these at
> http://www.scientificcomputing.net/debian/packages/axiom
> I will try and keep this till sarge is released.  These
> are on my home computer  so downloads may be slow. But I
> doubt many wanting axiom on debian will insist on  using
> stable :-)
> 
> I have not extensively tested this other than running a
> few examples from the hypertex browser. But will ofcourse
> be using it till sarge comes around.
> 
> There are essentially two issues in building axiom on 
> debian stable.
> 
> 1) The occurance of stray backslash characters in 
>    src/algebra/Makefile  (i.e. \$ instead of $).
>    Build progresses after making substitutions:
>    's/\\\$/$/g'
> 
> 2) Directories of the forms *.NRLIB are not created
>    in mnt/linux/algebra. The is the second point
>    where build fails. On creating these directories
>    manually the  build progresses to completion.
> 
>    This failure corresponds to the pattern rule
>    for "${MID}/%.o: ${MID}/%.lsp" in 
>    src/algebra/Makefile
> 
>    (Please disregard what I said about the second
>     failure in my previous mails, I was sleepy
>     and confused as hell :-)
> 
> Two files build1.log and build2.log  at the above url
> are the build logs ending in the first and second 
> build failure.
> 
> Finally, thank you for all your paitence and efforts.

\start
Date: Mon, 28 Mar 2005 12:10:44 -0600
From: MathAction (unknown)
To: MathAction
Subject: [Enhanced Fraction Domain] A little background

Bill and all,

While I haven't used nor fully digested the axiom related patches, the
author is apparently the same individual who so helpfully suggested an
improvement to GCL ratio arithmetic recently, which has been
implemented in CVS head (2.7.0).  Rational arithmetic is now much
faster in many regards, as GCL makes use of more functionality in the
highly optimized gmp library.  The bulk of the axiom patch appears to
be intended to call the lisp arithmetic functions directly --
apparently the spad compilation process results in a number of layers
between axiom and lisp here (not verified).  This is of course not
particular to any implementation of lisp, it is just that one can at
least expect significant performance advantages when GCL is the lisp.
There are still calls to cancelGcd -- perhaps it would be useful to
bring forward the gmp library function GCL uses internally for this
purpose.

\start
Date: Mon, 28 Mar 2005 20:43:47 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Debian/Stable Packages Built + Summary of issues
Cc: Balbir Thomas

Camm,

Balbir has posted his changes and there are two blocks of GCL specific
code that I do not understand (and thus am having trouble merging).
There are changes to two makefiles that help solve some issue with GCL.
Do you remember making these changes? What do they do?

\start
Date: Mon, 28 Mar 2005 19:27:28 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomDownload] I guess you mean dvi with Windows?

> is there a possibility using the dvi-reader of e.g. the miktex

I guess that you are referring to is using dvi for documentation
files on Windows instead of PDF? Yes this is possible, in fact it
is the default for the linux versions and was also for the previous
Windows version. The decision to use PDF for the most recent Windows
version was based on the presumption that most windows users do not
have MikTex (or equivalent LaTeX package) installed.

Earlier on this page it says:

>  All 1,800+ dvi files documenting the algebra and other parts
> of the system have been converted to PDF format. The use of PDF
> is the main reason for the increase in size. I would like to know
> the opinion of people who download this file whether conversion
> to PDF is a good idea. Is it more convenient? Would you prefer to
> save space and download time by omitting the files or is dvi format
> acceptible to most Windows users?

So far only one person has made any comment about this. They said
that PDF was a good idea. Perhaps other people would like to
"vote" for returning to use of dvi on Windows?

\start
Date: 28 Mar 2005 20:53:30 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Debian/Stable Packages Built + Summary of issues
Cc: Balbir Thomas

Greetings!  Not sure to which pieces you are referring -- could you
post them?  I have a few debian specific patches that are designed 1)
to enable a build with an external system GCL, and 2) to build with
compiler::link as is required at present on on ia64 mips hppa and
alpha.  Is this what we are discussing?

BTW, did you get my abstract?  Is this still a go?

Take care,

Tim Daly writes:

> Camm,
> 
> Balbir has posted his changes and there are two blocks of GCL specific
> code that I do not understand (and thus am having trouble merging).
> There are changes to two makefiles that help solve some issue with GCL.
> Do you remember making these changes? What do they do?

\start
Date: Mon, 28 Mar 2005 23:04:44 -0500
From: Balbir Thomas
To: Camm Maguire
Subject: Re: Debian/Stable Packages Built + Summary of issues

Hi,

I think there is some misunderstanding here. I have not really
fixed the problems that occur during the debian/stable build.
It is fairly straight forward to modify debian/rules
so that 1) src/algebra/Makefile is cleaned up using sed
2) all *.NRLIB directories are created under mnt/linux/algebra.
If I am expected to submit a patch to this effect I will gladly
do so. But this does not solve the problem, other than make
debian's build process cater to them. However I doubt
if this is a good idea considering the problem does not
occur on newer debian versions.

regards
b thomas

On Mon, Mar 28, 2005 at 08:53:30PM -0500, Camm Maguire wrote:
> Greetings!  Not sure to which pieces you are referring -- could you
> post them?  I have a few debian specific patches that are designed 1)
> to enable a build with an external system GCL, and 2) to build with
> compiler::link as is required at present on on ia64 mips hppa and
> alpha.  Is this what we are discussing?
> 
> BTW, did you get my abstract?  Is this still a go?
> 
> Take care,
> 
> Tim Daly writes:
> 
> > Camm,
> > 
> > Balbir has posted his changes and there are two blocks of GCL specific
> > code that I do not understand (and thus am having trouble merging).
> > There are changes to two makefiles that help solve some issue with GCL.
> > Do you remember making these changes? What do they do?
> > 

\start
Date: Tue, 29 Mar 2005 03:48:11 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Debian/Stable Packages Built + Summary of issues
Cc: Balbir Thomas

Camm,

Yes, the conference is still a go. Visit the Axiom conference website at
www.caissny.org

\start
Date: Tue, 29 Mar 2005 03:57:53 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Debian/Stable Packages Built + Summary of issues
Cc: Balbir Thomas

Camm,

in src/interp/Makefile.pamphlet in the axiom--BSD branch the attached
two blocks of code exist. I need to move them out of the Makefile into
a lisp file, call them with reasonable parameters, make them load-time
conditional blocks based on GCL, write non-GCL versiosn and document why
they are needed and what they do. This is rather hard as I'm not even
sure what the problem is :-)

Other than these two blocks of code I've merged all of the other BSD
changes back into my local tree.


======================================================================
======================================================================
======================================================================

	@ (cd ${OBJ}/${SYS}/bin ; \
	   echo '(progn \
		(setq si::*collect-binary-modules* t) \
		(load "${OUT}/makedep.lisp") \
		(compiler::link \
			(remove-duplicates si::*binary-modules* :test (quote equal)) \
			"$(DEPSYS)" \
			(format nil "\
				(setq si::*collect-binary-modules* t) \
				(let ((si::*load-path* (cons ~S si::*load-path*))\
					(si::*load-types* ~S))\
					(compiler::emit-fn t))\
				(load \"$(OUT)/makedep.lisp\")\
				(gbc t)\
				(when si::*binary-modules* \
					(error si::*binary-modules*))\
				(setq si::collect-binary-modules* nil si::*binary-modules* nil)\
				(gbc t)\
				(when (fboundp (quote si::sgc-on)) (si::sgc-on t))\
				(setq compiler::*default-system-p* t)\
			" si::*system-directory* (quote (list ".lsp")))\
			"" \
			nil))' | $(LISPSYS))


======================================================================
======================================================================
======================================================================

	  echo '(progn \
			(setq si::*collect-binary-modules* t)\
			(setq x si::*system-directory*)\
			(load "${OUT}/makeint.lisp")\
			(setq si::*system-directory* x)\
			(unintern (quote x))\
			(compiler::link \
				(remove-duplicates si::*binary-modules* :test (quote equal))\
				"$(SAVESYS)" \
				(format nil "\
					(let ((si::*load-path* (cons ~S si::*load-path*))\
						(si::*load-types* ~S))\
						(compiler::emit-fn t))\
					 (setq si::*collect-binary-modules* t)\
					 (setq x si::*system-directory*)\
					 (load \"$(OUT)/makeint.lisp\")\
					 (setq si::*system-directory* x)\
					 (unintern (quote x))\
					 (when si::*binary-modules* \
						(error si::*binary-modules*))\
					(setq si::collect-binary-modules* nil si::*binary-modules* nil)\
					(gbc t)\
					(when (fboundp (quote si::sgc-on)) (si::sgc-on t))\
					(setq compiler::*default-system-p* t)\
				" si::*system-directory* (quote (list ".lsp")))\
			"$(OBJ)/$(SYS)/lib/sockio-c.o $(OBJ)/$(SYS)/lib/cfuns-c.o $(OBJ)/$(SYS)/lib/libspad.a" \
			nil))' | $(LISPSYS))


\start
Date: 29 Mar 2005 10:34:34 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Debian/Stable Packages Built + Summary of issues
Cc: Balbir Thomas

Greetings!

Tim Daly writes:

> Camm,
> 
> in src/interp/Makefile.pamphlet in the axiom--BSD branch the attached
> two blocks of code exist. I need to move them out of the Makefile into
> a lisp file, call them with reasonable parameters, make them load-time
> conditional blocks based on GCL, write non-GCL versiosn and document why
> they are needed and what they do. This is rather hard as I'm not even
> sure what the problem is :-)
> 

Indeed!  While I'm not sure of the specific requirements on BSD, I am
guessing that they went with this code to be uniform across many
platforms which presumably include at least some of ia64 mips hppa and
alpha.   In short, this code below is not needed for other
architectures, whether on Linux of xBSD.

There are two issues as mentioned earlier:

1) build with external GCL.  Debian and xBSD presumably prefer this
   for modularity.

2) avoid si::save-system as presently required only on ia64 mips hppa
   and alpha, but works elsewhere too.  Debian only does this where
   required, xBSD appears to be doing it everywhere.  si::save-system
   is not only easier on build resources, much easier to use, and much
   more faithful to the spirit of lisp, but it is also what GCL would
   like to extend going forward, though this will doubtlessly take
   time.   The alternative, compiler::link, makes the image via ld,
   which of course is much more widely tested and ported, but requires
   that the heap be regenerated from scratch on each image save.

I'll repost here the three patches we use in Debian, one of which
includes the below, with comments:

=============================================================================
patch.all
=============================================================================

--- ./src/graph/view3D/globals.h.orig	2005-01-04 23:58:20.000000000 +0000
+++ ./src/graph/view3D/globals.h	2005-02-14 18:30:37.000000000 +0000
@@ -132,6 +132,8 @@
 extern char             propertyName[];
 extern char             propertyBuffer[];
 
+#undef R1
+#define R1 RR1
 extern float            transform[4][4], transform1[4][4],
                         R[4][4], R1[4][4], S[4][4], T[4][4], I[4][4];
 extern float            vxmax,vxmin,vymax,vymin,


*******************************************************
R1 used internally on arm:
*******************************************************

--- ./src/algebra/Makefile.pamphlet.orig	2005-01-30 12:03:09.000000000 +0000
+++ ./src/algebra/Makefile.pamphlet	2005-02-15 00:01:26.000000000 +0000
@@ -1598,7 +1598,7 @@
 	@ echo generic 3 -- making ${MID}/$*.o from ${MID}/$*.lsp
 	@ (cd ${MID} ; \
 	echo '(progn (in-package (quote boot)) (compile-file "$*.lsp" :output-file "$*.o"))' | ${DEPSYS} )
-	@ cp ${MID}/$*.o ${OUT}/$*.o
+	@ mkdir -p $$(dirname $(OUT)/$*.o) && cp ${MID}/$*.o ${OUT}/$*.o
 
 @
 <<genericSPADfiles>>=

*******************************************************
Had trouble with directories being created
*******************************************************

=============================================================================
patch.nosave (ia36 m68k arm ppc sparc s390 amd64)
=============================================================================
--- ./lsp/Makefile.pamphlet.orig	2005-01-30 12:03:08.000000000 +0000
+++ ./lsp/Makefile.pamphlet	2005-02-14 18:34:30.000000000 +0000
@@ -706,15 +706,7 @@
 	@echo 1 building ${LSP} ${GCLVERSION}
 
 gcldir: 
-	@echo 2 building ${GCLVERSION}
-	@tar -zxf ${ZIPS}/${GCLVERSION}.tgz
-<<gcl-2.6.5.socket.patch>>
-<<gcl-2.6.5.libspad.patch>>
-<<gcl-2.6.5.toploop.patch>>
-<<gcl-2.6.5.h.gmp_wrappers.h.patch>>
-<<gcl-2.6.5.tail-recursive.patch>>
-<<gcl-2.6.5.collectfn.fix>>
-<<gclConfigureMake>>
+	echo '(compiler::link nil "${OUT}/lisp" (format nil "(progn (let ((*load-path* (cons ~S *load-path*))) (compiler::emit-fn t))(when (fboundp (quote si::sgc-on)) (si::sgc-on t)))" si::*system-directory*) "${OBJ}/${SYS}/lib/cfuns-c.o ${OBJ}/${SYS}/lib/sockio-c.o ${OBJ}/${SYS}/lib/libspad.a")' | gcl
 	@echo 13 finished system build on `date` | tee >gcldir


*******************************************************
This is basically equivalent to your manipulation of the EXTRAS
makefile variable in the local gcl build tree, which of course is not
available when using GCL externally.  Here is the code expanded:

(compiler::link  ;; produce a new image using ld
        nil      ;; including no new compiled lisp modules
         "${OUT}/lisp"   ;; to this path
        (format nil      ;; Running this command in the new image to
                         ;;     recreate the heap
                "(progn 
                        (let ((*load-path* (cons ~S *load-path*)))  ;;  autoload gcl_collectfn and turn 
                                (compiler::emit-fn t))              ;;    on function tabulation
                        (when (fboundp (quote si::sgc-on)) (si::sgc-on t)))"  ;; Turn on sgc gbc algorithm where present
                si::*system-directory*) 

        ;; Link in these C objects and libraries
        "${OBJ}/${SYS}/lib/cfuns-c.o ${OBJ}/${SYS}/lib/sockio-c.o ${OBJ}/${SYS}/lib/libspad.a"
)
*******************************************************
 
 ccldir: ${LSP}/ccl/Makefile
--- ./src/interp/Makefile.pamphlet.orig	2005-01-30 12:04:38.000000000 +0000
+++ ./src/interp/Makefile.pamphlet	2005-02-14 18:37:17.000000000 +0000
@@ -672,8 +672,10 @@
 	@ echo '#+:akcl (setq compiler::*suppress-compiler-notes* t)' >> ${OUT}/makeint.lisp
 	@ echo '#+:akcl (si::gbc-time 0)' >> ${OUT}/makeint.lisp
 	@ echo '#+:akcl (setq si::*system-directory* "${SPAD}/bin/")' >> ${OUT}/makeint.lisp
+#	@ (cd ${OBJ}/${SYS}/bin ; \
+#	  echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t) (user::spad-save "${SAVESYS}"))' | ${LISPSYS} )
 	@ (cd ${OBJ}/${SYS}/bin ; \
-	  echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t) (user::spad-save "${SAVESYS}"))' | ${LISPSYS} )
+	  echo '(progn (gbc t) (setq x si::*system-directory*)(load "${OUT}/makeint.lisp") (setq si::*system-directory* x) (unintern (quote x))(gbc t)(user::spad-save "${SAVESYS}"))' | ${LISPSYS} )
 	@ echo 6 ${SAVESYS} created
 	@ cp ${SAVESYS} ${AXIOMSYS}
 	@ echo 6a ${AXIOMSYS} created

*******************************************************
This is entirely to preserve the si::*system-directory* variable,
which is needed to find certain files on an extnerally installed GCL
system.
*******************************************************


=============================================================================
patch.save  (ia64 alpha mips hppa)
=============================================================================



--- ./lsp/Makefile.pamphlet.orig	2005-01-30 12:03:08.000000000 +0000
+++ ./lsp/Makefile.pamphlet	2005-02-14 18:39:30.000000000 +0000
@@ -706,15 +706,7 @@
 	@echo 1 building ${LSP} ${GCLVERSION}
 
 gcldir: 
-	@echo 2 building ${GCLVERSION}
-	@tar -zxf ${ZIPS}/${GCLVERSION}.tgz
-<<gcl-2.6.5.socket.patch>>
-<<gcl-2.6.5.libspad.patch>>
-<<gcl-2.6.5.toploop.patch>>
-<<gcl-2.6.5.h.gmp_wrappers.h.patch>>
-<<gcl-2.6.5.tail-recursive.patch>>
-<<gcl-2.6.5.collectfn.fix>>
-<<gclConfigureMake>>
+	echo '(compiler::link nil "${OUT}/lisp" (format nil "(progn (let ((*load-path* (cons ~S *load-path*))(si::*load-types* ~S)) (compiler::emit-fn t))(when (fboundp (quote si::sgc-on)) (si::sgc-on t))(setq compiler::*default-system-p* t))" si::*system-directory* (quote (list ".lsp"))) "${OBJ}/${SYS}/lib/cfuns-c.o ${OBJ}/${SYS}/lib/sockio-c.o ${OBJ}/${SYS}/lib/libspad.a")' | gcl
 	@echo 13 finished system build on `date` | tee >gcldir
 
 ccldir: ${LSP}/ccl/Makefile

*******************************************************
This is the same as the above linking in of libspad.a but 
   a) turns on compiler::*default-system-p*  -- lisp files to be
      linked with ld must be compiled with the :system-p t flag
   b) loads gcl_collectfn.lsp instead of gcl_collectfn.o.  On these
      systems, fasloading is via dlopen which cannot be preserved
      across image saves.  Any binary modules desired in a new image
      must go through compiler::link, alas, at present
=============================================================================

--- ./src/algebra/Lattice.pamphlet.orig	2005-01-04 23:45:59.000000000 +0000
+++ ./src/algebra/Lattice.pamphlet	2005-02-14 18:45:10.000000000 +0000
@@ -39620,13 +39620,14 @@
 	@ cp -p ${SRC}/doc/gloss.text ${LIB}
 	@ cp -p ${SRC}/doc/topics.data ${MID}
 	@ echo rebuilding daase files
-	@ (cd ${MID} ; \
-	   echo ')set out le 200' >/tmp/tmp.input ; \
-	   echo ')fin' >>/tmp/tmp.input ; \
-	   echo '(make-databases "" (QUOTE ("unix")))' >>/tmp/tmp.input ; \
-	   echo '(bye)' >>/tmp/tmp.input ; \
-	   cat /tmp/tmp.input | ${INTERPSYS} ; \
-	   rm -f /tmp/tmp.input )
+#	@ (cd ${MID} ; \
+#	   echo ')set out le 200' >/tmp/tmp.input ; \
+#	   echo ')fin' >>/tmp/tmp.input ; \
+#	   echo '(make-databases "" (QUOTE ("unix")))' >>/tmp/tmp.input ; \
+#	   echo '(bye)' >>/tmp/tmp.input ; \
+#	   cat /tmp/tmp.input | ${INTERPSYS} ; \
+#	   rm -f /tmp/tmp.input )
+	@ (cp ${SRC}/../debian/*.daase ${MID})
 	@ echo If all went well, go-ahead Mike and do a db-install as well !
 db-install:
@@ -39758,7 +39759,8 @@
 	@ echo rebuilding databases...
 	@ cp ${SRC}/doc/gloss.text ${MID}
 	@ cp ${SRC}/doc/topics.data ${MID}
-	@ (cd ${MID} ; echo ')lisp (make-databases "" nil)' | ${INTERPSYS} )
+#	@ (cd ${MID} ; echo ')lisp (make-databases "" nil)' | ${INTERPSYS} )
+	@ (cp ${SRC}/../debian/*.daase ${MID})
 
 check:
 	@ echo Checking that INTERP.EXPOSED and NRLIBs are consistent
--- ./src/etc/Makefile.pamphlet.orig	2005-01-30 12:03:12.000000000 +0000
+++ ./src/etc/Makefile.pamphlet	2005-02-14 18:47:16.000000000 +0000
@@ -33,9 +33,10 @@
 	@ cp ${SRC}/doc/gloss.text ${INT}/algebra
 	@ cp ${SRC}/doc/topics.data ${INT}/algebra
 	@ cp ${SRC}/doc/topics.data ${INT}/algebra
-	@ (cd ${INT}/algebra ; \
-           echo ')lisp (make-databases "" nil)' | ${INTERPSYS} )
-	@ cp ${INT}/algebra/*.daase ${MNT}/${SYS}/algebra
+#	@ (cd ${INT}/algebra ; \
+#           echo ')lisp (make-databases "" nil)' | ${INTERPSYS} )
+#	@ cp ${INT}/algebra/*.daase ${MNT}/${SYS}/algebra
+	@ (cp ${SRC}/../debian/*.daase ${MNT}/${SYS}/algebra)
 
 @
 \section{summary}

 

*******************************************************
On these systems using dlopen, only 1024 files can be loaded in a
given session.  We cannot rebuild the databases here therefore, so
they are copied from versions generated and saved on an i386 build
*******************************************************




--- ./src/boot/Makefile.pamphlet.orig	2005-01-30 12:03:11.000000000 +0000
+++ ./src/boot/Makefile.pamphlet	2005-02-14 18:50:14.000000000 +0000
@@ -1151,7 +1151,8 @@
 expansion. Adding a single quote symbol will break this expansion.
 
 <<environment>>= 
-CMD0=	(progn (mapcar (function (lambda (x) (load  x))) (quote (${OBJS1}))) (system::save-system "${SAVESYS}"))
+#CMD0=	(progn (mapcar (function (lambda (x) (load  x))) (quote (${OBJS1}))) (system::save-system "${SAVESYS}"))
+CMD0=	(compiler::link (quote (${OBJS1})) "${SAVESYS}" (format nil "(let ((*load-path* (cons ~S *load-path*))(si::*load-types* ~S)) (compiler::emit-fn t)) (when (fboundp (quote si::sgc-on)) (si::sgc-on t)) (setq compiler::*default-system-p* t)" si::*system-directory* (quote  (list ".lsp"))))
  
 @
 \subsection{boothdr.lisp \cite{1}}


*******************************************************
Here is the compiler::link version of the boot image creation.  It is
the same as the lisp image creation, except that the list of compiled
lisp objects is supplied in the second argument.
*******************************************************


--- ./src/interp/Makefile.pamphlet.orig	2005-01-30 12:04:38.000000000 +0000
+++ ./src/interp/Makefile.pamphlet	2005-02-14 18:53:20.000000000 +0000
@@ -619,8 +619,31 @@
 	@ echo '(load "${OUT}/c-util")' >> ${OUT}/makedep.lisp
 	@ echo '(unless (probe-file "${OUT}/g-util.${O}") (compile-file "${OUT}/g-util.${LISP}" :output-file "${OUT}/g-util.${O}"))' >> ${OUT}/makedep.lisp
 	@ echo '(load "${OUT}/g-util")' >> ${OUT}/makedep.lisp
+#	@ (cd ${MNT}/${SYS}/bin ; \
+#	   echo '(progn (load "${OUT}/makedep.lisp") (spad-save "${DEPSYS}"))' | ${LISPSYS})
 	@ (cd ${MNT}/${SYS}/bin ; \
-	   echo '(progn (load "${OUT}/makedep.lisp") (spad-save "${DEPSYS}"))' | ${LISPSYS})
+	echo '(progn \
+		(setq si::*collect-binary-modules* t) \
+		(load "${OUT}/makedep.lisp") \
+		(compiler::link \
+			(remove-duplicates si::*binary-modules* :test (quote equal)) \
+			"$(DEPSYS)" \
+			(format nil "\
+				(setq si::*collect-binary-modules* t) \
+				(let ((si::*load-path* (cons ~S si::*load-path*))\
+                                     (si::*load-types* ~S))\
+					(compiler::emit-fn t))\
+				(load \"$(OUT)/makedep.lisp\")\
+				(gbc t)\
+				(when si::*binary-modules* \
+					(error si::*binary-modules*))\
+				(setq si::collect-binary-modules* nil si::*binary-modules* nil)\
+				(gbc t)\
+				(when (fboundp (quote si::sgc-on)) (si::sgc-on t))\
+				(setq compiler::*default-system-p* t)\
+			" si::*system-directory* (quote (list ".lsp")))\
+			"" \
+			nil))' | $(LISPSYS))
 	@ echo 4 ${DEPSYS} created
 

*******************************************************
Here is the compiler::link version of the depsys creation, unpacked
and commented:

(progn 
  (setq si::*collect-binary-modules* t)  ;; When this is set, si::*binary-modules* contains 
                                         ;;  a list of all fasloaded .o files
  (load "${OUT}/makedep.lisp")           ;; Run the depsys creation stuff
  (compiler::link                        ;; Link an image with ld
   (remove-duplicates si::*binary-modules* :test (quote equal)) ;; Supply the list of all loaded .o files to ld here.
   "$(DEPSYS)"                           ;; Save the image here

                                         ;; Run the string below in the saved image to recreate the heap, 
                                         ;;  redirecting all calls to (load foo.o) where foo.o is already linked in
                                         ;;  to a mere initialization of the module.  GCL will report "Initializing ..."
                                         ;;  instead of "loading ..."
   (format nil "                          
		(setq si::*collect-binary-modules* t)  ;;  Collect loaded .o files again to check for errors
		(let ((si::*load-path* (cons ~S si::*load-path*))  ;; Turn on function profiling using 
                      (si::*load-types* ~S))                       ;;   gcl_collectfn.lsp instead of gcl_collectfn.o
			(compiler::emit-fn t))
		(load "$(OUT)/makedep.lisp")           ;;  Run the depsys creation stuff again, redirecting loads
                                                       ;;    of already linked files to initializations instead
		(gbc t)
		(when si::*binary-modules*             ;;  Make sure we didn't really load any .o file
			(error si::*binary-modules*))
		(setq si::collect-binary-modules* nil si::*binary-modules* nil)  ;; All the below the same as usual
		(gbc t)
		(when (fboundp (quote si::sgc-on)) (si::sgc-on t))
		(setq compiler::*default-system-p* t)
	" si::*system-directory* (quote (list ".lsp")))
	"" 
	nil))
*******************************************************


 @
@@ -672,8 +695,36 @@
 	@ echo '#+:akcl (setq compiler::*suppress-compiler-notes* t)' >> ${OUT}/makeint.lisp
 	@ echo '#+:akcl (si::gbc-time 0)' >> ${OUT}/makeint.lisp
 	@ echo '#+:akcl (setq si::*system-directory* "${SPAD}/bin/")' >> ${OUT}/makeint.lisp
+#	@ (cd ${OBJ}/${SYS}/bin ; \
+#	  echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t) (user::spad-save "${SAVESYS}"))' | ${LISPSYS} )
 	@ (cd ${OBJ}/${SYS}/bin ; \
-	  echo '(progn (gbc t) (load "${OUT}/makeint.lisp") (gbc t) (user::spad-save "${SAVESYS}"))' | ${LISPSYS} )
+	  echo '(progn \
+			(setq si::*collect-binary-modules* t)\
+			(setq x si::*system-directory*)\
+			(load "${OUT}/makeint.lisp")\
+			(setq si::*system-directory* x)\
+			(unintern (quote x))\
+			(compiler::link \
+				(remove-duplicates si::*binary-modules* :test (quote equal))\
+				"$(SAVESYS)" \
+				(format nil "\
+					(let ((si::*load-path* (cons ~S si::*load-path*))\
+                                             (si::*load-types* ~S))\
+						(compiler::emit-fn t))\
+					 (setq si::*collect-binary-modules* t)\
+					 (setq x si::*system-directory*)\
+					 (load \"$(OUT)/makeint.lisp\")\
+					 (setq si::*system-directory* x)\
+					 (unintern (quote x))\
+					 (when si::*binary-modules* \
+						(error si::*binary-modules*))\
+					(setq si::collect-binary-modules* nil si::*binary-modules* nil)\
+					(gbc t)\
+					(when (fboundp (quote si::sgc-on)) (si::sgc-on t))\
+					(setq compiler::*default-system-p* nil)\
+				" si::*system-directory* (quote (list ".lsp")))\
+			"$(OBJ)/$(SYS)/lib/sockio-c.o $(OBJ)/$(SYS)/lib/cfuns-c.o $(OBJ)/$(SYS)/lib/libspad.a" \
+			nil))' | $(LISPSYS))
 	@ echo 6 ${SAVESYS} created
 	@ cp ${SAVESYS} ${AXIOMSYS}
 	@ echo 6a ${AXIOMSYS} created

*******************************************************
Here is the compiler::link version of the interpsys creation, which is
identical in structure to the depsys creation commented above.
*******************************************************


--- ./src/interp/nlib.lisp.pamphlet.orig	2005-01-05 00:06:03.000000000 +0000
+++ ./src/interp/nlib.lisp.pamphlet	2005-02-14 18:55:00.000000000 +0000
@@ -295,7 +295,16 @@
 (defun rpackfile (filespec)
   (setq filespec (make-filename filespec))
   (if (string= (pathname-type filespec) "NRLIB")
-      (recompile-lib-file-if-necessary (concat (namestring filespec) "/code.lsp"))
+      (let* ((base (pathname-name filespec))
+	     (code (concatenate 'string (namestring filespec) "/code.lsp"))
+	     (temp (concatenate 'string (namestring filespec) "/" base ".lsp"))
+	     (o (make-pathname :type "o")))
+	(si::system (format nil "cp ~S ~S" code temp))
+	(let ((compiler::*default-system-p* t)) (recompile-lib-file-if-necessary temp))
+	(si::system (format nil "mv ~S ~S~%" 
+			    (namestring (merge-pathnames o temp))
+			    (namestring (merge-pathnames o code)))))
+    ;(recompile-lib-file-if-necessary (concat (namestring filespec) "/code.lsp"))
   ;; only pack non libraries to avoid lucid file handling problems    
     (let* ((rstream (rdefiostream (list (cons 'file filespec) (cons 'mode 'input))))
 	   (nstream nil)

*******************************************************
This is just a redirection of each code.lisp to a unique name, which
is needed when using compiler::link, as ld will insist that all
function names be unique, and GCL compiles init functions for each .o
file of the form init_filename.  We're working on a better way to do
this in 2.7.0.
*******************************************************

Hope this is clarifying.  Again, these blocks are only necessary at
present on ia64 mips alpha and hppa, though can be used elsewhere.  We
intend this to be a temporary situation.  The conventional
si::save-system dump is preferrable in many respects where available.
On 2.7.0, we have a feature :native-reloc which indicates when this
workaround is required.I can discuss development ideas we have in this
direction if interested.

Take care,

=============================================================================

> Other than these two blocks of code I've merged all of the other BSD
> changes back into my local tree.
> 
> 
> ======================================================================
> ======================================================================
> ======================================================================
> 
> 	@ (cd ${OBJ}/${SYS}/bin ; \
> 	   echo '(progn \
> 		(setq si::*collect-binary-modules* t) \
> 		(load "${OUT}/makedep.lisp") \
> 		(compiler::link \
> 			(remove-duplicates si::*binary-modules* :test (quote equal)) \
> 			"$(DEPSYS)" \
> 			(format nil "\
> 				(setq si::*collect-binary-modules* t) \
> 				(let ((si::*load-path* (cons ~S si::*load-path*))\
> 					(si::*load-types* ~S))\
> 					(compiler::emit-fn t))\
> 				(load \"$(OUT)/makedep.lisp\")\
> 				(gbc t)\
> 				(when si::*binary-modules* \
> 					(error si::*binary-modules*))\
> 				(setq si::collect-binary-modules* nil si::*binary-modules* nil)\
> 				(gbc t)\
> 				(when (fboundp (quote si::sgc-on)) (si::sgc-on t))\
> 				(setq compiler::*default-system-p* t)\
> 			" si::*system-directory* (quote (list ".lsp")))\
> 			"" \
> 			nil))' | $(LISPSYS))
> 
> 
> ======================================================================
> ======================================================================
> ======================================================================
> 
> 	  echo '(progn \
> 			(setq si::*collect-binary-modules* t)\
> 			(setq x si::*system-directory*)\
> 			(load "${OUT}/makeint.lisp")\
> 			(setq si::*system-directory* x)\
> 			(unintern (quote x))\
> 			(compiler::link \
> 				(remove-duplicates si::*binary-modules* :test (quote equal))\
> 				"$(SAVESYS)" \
> 				(format nil "\
> 					(let ((si::*load-path* (cons ~S si::*load-path*))\
> 						(si::*load-types* ~S))\
> 						(compiler::emit-fn t))\
> 					 (setq si::*collect-binary-modules* t)\
> 					 (setq x si::*system-directory*)\
> 					 (load \"$(OUT)/makeint.lisp\")\
> 					 (setq si::*system-directory* x)\
> 					 (unintern (quote x))\
> 					 (when si::*binary-modules* \
> 						(error si::*binary-modules*))\
> 					(setq si::collect-binary-modules* nil si::*binary-modules* nil)\
> 					(gbc t)\
> 					(when (fboundp (quote si::sgc-on)) (si::sgc-on t))\
> 					(setq compiler::*default-system-p* t)\
> 				" si::*system-directory* (quote (list ".lsp")))\
> 			"$(OBJ)/$(SYS)/lib/sockio-c.o $(OBJ)/$(SYS)/lib/cfuns-c.o $(OBJ)/$(SYS)/lib/libspad.a" \
> 			nil))' | $(LISPSYS))
> 

\start
Date: 29 Mar 2005 10:35:35 -0500
From: Camm Maguire
To: Balbir Thomas
Subject: Re: Debian/Stable Packages Built + Summary of issues
Cc: Balbir Thomas

Greetings!

Balbir Thomas writes:

> Hi,
> 
> I think there is some misunderstanding here. I have not really
> fixed the problems that occur during the debian/stable build.
> It is fairly straight forward to modify debian/rules
> so that 1) src/algebra/Makefile is cleaned up using sed
> 2) all *.NRLIB directories are created under mnt/linux/algebra.
> If I am expected to submit a patch to this effect I will gladly
> do so. But this does not solve the problem, other than make

Thanks, but I agree this is not necessary.  I think Tim was referring
to the xBSD stuff posted separately.

Take care,

> debian's build process cater to them. However I doubt
> if this is a good idea considering the problem does not
> occur on newer debian versions.
> 
> regards
> b thomas
> 
> On Mon, Mar 28, 2005 at 08:53:30PM -0500, Camm Maguire wrote:
> > Greetings!  Not sure to which pieces you are referring -- could you
> > post them?  I have a few debian specific patches that are designed 1)
> > to enable a build with an external system GCL, and 2) to build with
> > compiler::link as is required at present on on ia64 mips hppa and
> > alpha.  Is this what we are discussing?
> > 
> > BTW, did you get my abstract?  Is this still a go?
> > 
> > Take care,
> > 
> > Tim Daly writes:
> > 
> > > Camm,
> > > 
> > > Balbir has posted his changes and there are two blocks of GCL specific
> > > code that I do not understand (and thus am having trouble merging).
> > > There are changes to two makefiles that help solve some issue with GCL.
> > > Do you remember making these changes? What do they do?

\start
Date: Tue, 29 Mar 2005 10:33:20 -0600
From: MathAction (unknown)
To: MathAction
Subject: [PlayingTogether] 

\begin{axiom}
   series( log(exp(x) + 1), x = 0 )
\end{axiom}

\start
Date: Tue, 29 Mar 2005 13:04:05 -0600
From: MathAction (unknown)
To: MathAction
Subject: [#127 Building axiom from source fails on my Fedora Core 3] 

It seems to work if you use 'setarch i386 -X make' instead of just make.
Looks like the execstack problem again. Until gcl is fixed, there seems
to be no other way around.

Gerard Milmeister

\start
Date: Wed, 30 Mar 2005 01:51:59 -0600
From: MathAction (jim kraai)
To: MathAction
Subject: [Axiom-mail] New to Axiom: Implement 'Balanced' FiniteField ?

Greetings,

(I'm more of a pencil-n-paper math guy.)

A BalancedFiniteField representation of an integer n would be:
  the same as FiniteField (base) if n <= floor(n/2)
  else base - floor(n/2)

Examples:

base of 4     base of 5 
n  FF BFF     n  FF BFF 
----------    ----------
0  0   0      0  0   0  
1  1   1      1  1   1  
2  2   2      2  2   2  
3  3  -1      3  3  -2  
4  0   0      4  0  -1  
5  1   1      5  1   0  
              6  0   0  
                        
After reading the book chapters on Packages, Categorys, and Domains, I find 
that I'm no more clear on which is an effective way to get this output.

Thanks for any help,

--jim

\start
Date: Wed, 30 Mar 2005 04:17:59 -0600
From: MathAction (Martin Rubey)
To: MathAction
Subject: [Axiom-mail] New to Axiom: Implement 'Balanced' FiniteField ?

It will roughly work as follows:


)abbrev domain BAL Balanced
Balanced(n:PositiveInteger):Exports == Implementation where
 
  Exports == with
    coerce: PrimeField n -> $
    coerce: $ -> OutputForm

--    coerce: $ -> PrimeField n

  Implementation == add
    Rep := Integer

    coerce(a: PrimeField n):$ == convert(a)@Integer - n
    coerce(x:%):OutputForm == coerce(x)$Rep

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

If you need explanation, ask for it. (No time right now)

Martin

jim kraai writes:
 > Greetings,
 > 
 > (I'm more of a pencil-n-paper math guy.)
 > 
 > A BalancedFiniteField representation of an integer n would be:
 >   the same as FiniteField (base) if n <= floor(n/2)
 >   else base - floor(n/2)
 > 
 > Examples:
 > 
 > base of 4     base of 5 
 > n  FF BFF     n  FF BFF 
 > ----------    ----------
 > 0  0   0      0  0   0  
 > 1  1   1      1  1   1  
 > 2  2   2      2  2   2  
 > 3  3  -1      3  3  -2  
 > 4  0   0      4  0  -1  
 > 5  1   1      5  1   0  
 >               6  0   0  
 >                         
 > After reading the book chapters on Packages, Categorys, and Domains, I find 
 > that I'm no more clear on which is an effective way to get this output.
 > 
 > Thanks for any help,
 > 

\start
Date: Wed, 30 Mar 2005 06:10:04 -0600
From: MathAction (billpage)
To: MathAction
Subject: [BalancedFiniteField] (new) 

From: jim kraai
Date: Wed, 30 Mar 2005 01:51:52 -0600
Subject: New to Axiom:  Implement 'Balanced' FiniteField ?

Greetings,

(I'm more of a pencil-n-paper math guy.)

A BalancedFiniteField representation of an integer n would be:
  the same as FiniteField (base) if n <= floor(n/2)
  else base - floor(n/2)

Examples::

  base of 4     base of 5 
  n  FF BFF     n  FF BFF 
  ----------    ----------
  0  0   0      0  0   0  
  1  1   1      1  1   1  
  2  2   2      2  2   2  
  3  3  -1      3  3  -2  
  4  0   0      4  0  -1  
  5  1   1      5  1   0  
                6  0   0  
                        
After reading the book chapters on Packages, Categorys, and Domains, I find 
that I'm no more clear on which is an effective way to get this output.

Thanks for any help,

--jim

<hr />

Perhaps this experimental code below will help. The new domain is based
on a simplified version of ZMOD. Notice that the definition of "balanced"
has been incorporated into the coerce function, taking care to avoid
division since it is not defined in these domains. But I am not certain
that this definition is exactly equivalent to Jim's definition above.

Are index and lookup correct for this representation?

\begin{axiom}
)abbrev domain BFF BalancedFiniteField
++ BalancedFiniteField(base) is based on ZMOD IntegerMod
BalancedFiniteField(p:PositiveInteger):
 Join(CommutativeRing, Finite, ConvertibleTo Integer, StepThrough) == add
    size()           == p
    characteristic() == p
    lookup x == ( x=0 => p; (convert(x)@Integer) :: PositiveInteger)

    Rep:= Integer

    convert(x:%):Integer == convert(x)$Rep
    coerce(n:Integer):%  == (mulmod(2,n,2*p)<=p =>
                              positiveRemainder(n, p);
                            (-positiveRemainder(p-n, p))::Integer)
                            
    coerce(x):OutputForm == coerce(x)$Rep
    0                    == 0$Rep
    1                    == 1$Rep
    init                 == 0$Rep
    nextItem(n)          ==
                              m:=n+1
                              m=0 => "failed"
                              m
    x = y                == x =$Rep y
    x:% * y:%            == mulmod(x, y, p)
    n:Integer * x:%      == mulmod(positiveRemainder(n::Rep, p), x, p)
    x + y                == addmod(x, y, p)
    x - y                == submod(x, y, p)
    random()             == random(p)$Rep
    index a              == positiveRemainder(a::Rep, p)
    - x                  == (zero? x => 0; p -$Rep x)
    x:% ** n:NonNegativeInteger == powmod(x, n::Rep, p)

    recip x ==
       (c1, c2, g) := extendedEuclidean(x, p)$Rep
       not (g = 1) => "failed"
       positiveRemainder(c1, p)

\end{axiom}

\begin{axiom}
for i in 0..5 repeat
  output([i,(i::ZMOD(4)),(i::BFF(4))])
\end{axiom}
\begin{axiom}
for i in 0..6 repeat
  output([i,i::ZMOD(5),i::BFF(5)])
\end{axiom}

Perhaps addition, subtraction and multiplication need to be examined
more closely.

\begin{axiom}
(-1::BFF(5))+(1::BFF(5))
(-1::BFF(5))-(1::BFF(5))
(1::BFF(5))+(1::BFF(5))
(2::BFF(5))*(3::BFF(5))
\end{axiom}

\start
Date: Wed, 30 Mar 2005 07:13:40 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [BalancedFiniteField] 

Alternatively::

  )abbrev domain BFF BalancedFiniteField
  BalancedFiniteField(p:PositiveInteger):Exports == Implementation where
    Exports == Join(FiniteFieldCategory, FiniteAlgebraicExtensionField($), 
                    ConvertibleTo(Integer)) with
      coerce: % -> OutputForm
    Implementation ==  InnerPrimeField(p) add
      if not prime?(p)\$IntegerPrimesPackage(Integer) then
        error "Argument to prime field must be a prime"
      coerce(x:%):OutputForm == 
        n:=convert(x)@Integer
        if mulmod(2,n,2*p)<=p 
        then positiveRemainder(n, p)::OutputForm
        else -positiveRemainder(p-n, p)::OutputForm

\start
Date: Wed, 30 Mar 2005 12:09:36 -0600
From: MathAction (Page, Bill)
To: MathAction
Subject: [Axiom-mail] New to Axiom: Implement 'Balanced' FiniteField ?

Jim,

You might find the following web page usefule

http://page.axiom-developer.org/zope/mathaction/BalancedFiniteField

\start
Date: Wed, 30 Mar 2005 14:06:40 -0500
From: Bill Page
To: Tim Daly
Subject: piping axiom commands to sman

Tim,

Can you think of any reason why sending command to sman via
a pipe might not work? Or can you get it to work and I am
just doing something wrong? :)

I use this method on MathAction right now to send commands
to AXIOMsys with no problems. In the near future once I have
Axiom graphics running on MathAction, I will need to start
sman instead of AXIOMsys in order to setup the process handling
for graphics. But when I try to pipe commands to sman, even
with -noht -noclef options, sman just issues to prompts and
waits. It does not seem to try to read from stdin. If I try
to key in )quit and yes, etc. There is no reaction and I must
eventually kill the process(es).

It seems to me that sman must be doing something quite strange,
incompatible and old fashioned ...  Any ideas?

Regards,
Bill Page.

\start
Date: Wed, 30 Mar 2005 20:21:42 -0500
From: Tim Daly
To: Bill Page
Subject: Re: piping axiom commands to sman

Bill, 

I see the behavior you mentioned (I tried it too).
I'll try to figure out a way around it.

\start
Date: Wed, 30 Mar 2005 21:52:42 -0500
From: Tim Daly
To: Paul Leopardi
Subject: Clifford Algebra presentation

Paul,

I came across your presentation "Quick Introduction to Clifford Algebras".
I'm the lead developer on Axiom, an open source computer algebra system
(http://page.axiom-developer.org). I'm documenting our clifford algebra
package and I'd like permission to quote your work as part of the 
documentation. Your glucat software is under the LGPL license but there
is no license associated with your presentation so I'm asking for explicit
permission.

\start
Date: Thu, 31 Mar 2005 07:24:14 -0500
From: Tim Daly
To: Paul Leopardi
Subject: Re: Clifford Algebra presentation
Cc: Ian Sloan

Paul,

>Paul Leopardi wrote

>Thanks for the email message. You have my permission to quote. Apart from the 
>references to my presentation, you may want to consider the following work:

>Pertti Lounesto, "Introduction to Clifford algebras," in Lectures on Clifford 
>(geometric) algebras and applications, 1--29, BirkhĂ¤user Boston, Boston, MA, 
>2004. 

Thanks for the permission and references.

>I do have a reviewed paper which contains similar content and much more. It is
>Paul Leopardi, "A generalized FFT for Clifford algebras", Bull. Belg. Math. 
>Soc. Simon Stevin  11 (2005), no. 5, 663-688
>http://ProjectEuclid.org:80/Dienst/UI/1.0/Summarize/euclid.bbms/1110205626

I saw your FFT paper which is quite interesting for another idea 
unrelated to the clifford algebra work. If I get the time I'll look
at that paper also.


I'm working with Bertfried Fauser to try and upgrade Axiom's clifford
algebra package. Since I'm not a domain expert I've been trying to
learn the material by documenting the existing code. Once I get a
good explanation of the existing work I'll be in a much stronger
position to make progress. Plus it is important to marry the literature
with the source code. This will strengthen both in the long run as the
literature makes the theory available and the code is the reduction to
practice.

I've picked up a book by Chris Doran and Anthony Lasenby "Geometric
Algebra for Physicists" Cambridge University Press 2003 ISBN 0-521-48022-1
which has sent me off into learning a bit of physics so I can understand
it better. But it is a useful book.

Clifford algebras seem to be a very hot topic among the physicists
these days so it's important to build support for this ability in axiom.
Since I'm not a physicist by training I've had to go learn a bit about
the wave equation, feynman diagrams, etc. in order to make (somewhat
glacial) progress.

Do you happen to have an email address for Pertti?

\start
Date: Thu, 31 Mar 2005 11:46:10 -0600
From: MathAction (anonymous)
To: MathAction
Subject: [#138 asin(complex(1.0,0.0))] (new) 

In trigcat.spad.pamphlet:
<br/>
asin x == atan(x/sqrt(1-x**2))
<br>
\begin{axiom}
asin(1.0)
asin(complex(1.0,0.0))
\end{axiom}

Bug from savannah.

