\start
Date: Thu, 1 Dec 2005 03:17:00 -0500
From: Tim Daly
To: Bill Page
Subject: [helpdesk@rosehosting.com: [RHH #FKL-86268-984]: move Axiom to shared dedicated server]

Bill,

Axiom-developer has been moved from a shared-virtual server 
(basically vmware-ish) to a shared dedicated server. the
shared dedicated server is a dual-processor hyper-threaded
machine with only 4 customers so we basically get a full
processor and a gig of memory to ourselves.

Hopefully this fixes the problem. Let me know.

------- Start of forwarded message -------
Date: Wed, 30 Nov 2005 23:26:03 -0600
From: "RH Helpdesk" <helpdesk@rosehosting.com>
Subject: [RHH #FKL-86268-984]: move Axiom to shared dedicated server


This has been completed.

Admin
RoseHosting.com


On Wed, 30 Nov 2005 18:01:11 -0600, Tim Daly wrote:
> IP: 72.23.23.52
> 
> Please move the axiom-developer.org
> domain (209.135.140.38) from a shared
> virtual server to a shared dedicated 
> server and send me mail when the
> process completes.
> 
> Tim Daly
> Axiom Lead Developer

------- End of forwarded message -------

\start
Date: Wed, 30 Nov 2005 23:20:15 +0100
From: Ralf Hemmecke
To: Eitan Gurari
Subject: Re: ALLPROSE --> tex4ht --> html

Hi Eitan,

I must admit that I don't quite understand the script htlatex.
It basically has the form

latex ...
latex ...
latex ...
tex4ht ...
t4ht ...

I am somehow missing a call to bibtex and also a call to makeindex.

Is there a script that lets me run just one "latex" part (with the 
argument from "htlatex") so that I could call makeindex and bibtex 
myself followed by further "latex" calls and tex4ht+t4ht.

I am somehow complaining about a nice interface. What I would expect is 
a script (htlatexonce) that just contains

latex ... '\makeatletter\def\HCode{...' $1

and another one (htlatextail) that does

htlatexonce "$*"
tex4ht ...
t4ht ...

Your "htlatex" is then

htlatexonce...
htlatexonce...
htlatextail

Of course I could just provide a script that is similar to htlatex and 
adds bibtex and makeindex (or whatever else I might need to run 
inbetween). But then you might modify htlatex in a new version of tex4ht 
and my code might not work anymore because your TeX code on the "latex" 
line is a bit different.

I am grateful for any hints. Maybe I don't understand something here.

Thanks in advance

\start
Date: Thu, 1 Dec 2005 07:47:03 -0500
From: Eitan Gurari
To: Ralf Hemmecke
Subject: Re: ALLPROSE --> tex4ht --> html

Ralf,

Some users devised scripts along the following lines.

     latex ...
     bibtex...    call, if needed
     makeindex... call, if needed
     latex ...    repeat until the dvi file doesn't change
     tex4ht ...
     t4ht ...

I never tried those scripts, but I believe I have one somewhere in the
emails I got.  I'll try to find it forward the code to you (in about
3--4 weeks).

-eitan



 > I must admit that I don't quite understand the script htlatex.
 > It basically has the form
 > 
 > latex ...
 > latex ...
 > latex ...
 > tex4ht ...
 > t4ht ...
 > 
 > I am somehow missing a call to bibtex and also a call to makeindex.
 > 
 > Is there a script that lets me run just one "latex" part (with the 
 > argument from "htlatex") so that I could call makeindex and bibtex 
 > myself followed by further "latex" calls and tex4ht+t4ht.
 > 
 > I am somehow complaining about a nice interface. What I would expect is 
 > a script (htlatexonce) that just contains
 > 
 > latex ... '\makeatletter\def\HCode{...' $1
 > 
 > and another one (htlatextail) that does
 > 
 > htlatexonce "$*"
 > tex4ht ...
 > t4ht ...
 > 
 > Your "htlatex" is then
 > 
 > htlatexonce...
 > htlatexonce...
 > htlatextail
 > 
 > Of course I could just provide a script that is similar to htlatex and 
 > adds bibtex and makeindex (or whatever else I might need to run 
 > inbetween). But then you might modify htlatex in a new version of tex4ht 
 > and my code might not work anymore because your TeX code on the "latex" 
 > line is a bit different.
 > 
 > I am grateful for any hints. Maybe I don't understand something here.

\start
Date: Thu, 01 Dec 2005 14:10:05 +0100
From: Ralf Hemmecke
To: Eitan Gurari
Subject: Re: ALLPROSE --> tex4ht --> html

Well, that is not my point. I could write those simple things myself. 
The problem is that there is no reliable way to get access to the TeX 
string that appears inside all the htlatex like scripts.

If I get access to that and also to the parameters of tex4ht and t4ht, 
that would make me happy. For now I could simply extract them from 
htlatex and hardcode them into my own script, but that will break my 
code whenever you decide to change something so I need a reliable API.

Ralf

Eitan Gurari wrote:
> Ralf,
> 
> Some users devised scripts along the following lines.
> 
>      latex ...
>      bibtex...    call, if needed
>      makeindex... call, if needed
>      latex ...    repeat until the dvi file doesn't change
>      tex4ht ...
>      t4ht ...
> 
> I never tried those scripts, but I believe I have one somewhere in the
> emails I got.  I'll try to find it forward the code to you (in about
> 3--4 weeks).

\start
Date: Thu, 01 Dec 2005 15:18:56 -0600
From: Jay Belanger
To: list
Subject: Re: hear this...

Tim Daly writes:

> http://www.itconversations.com/shows/detail169.html
>
> download the MP3 and listen to it. great stuff.

Would downloading the transcript and reading it work?
When I first saw the title, I wondered what earthquakes had to do with
open source, but then I read more carefully.  The talk is fascinating.
It appears that Axiom is the only major project that I know of that is
putting the source into open source.
Which reminds me:  I thought it odd that on the noweb web page, where
it lists projects using noweb, Axiom isn't mentioned.  Also, I recall
reading that the noweb in Axiom is a patched version of the official
noweb, but the patches weren't accepted as part of noweb.  Why not?

\start
Date: Thu, 1 Dec 2005 14:25:03 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Leo

Bill, I remember a year or so ago you mentioned an interest in the Leo
tool as a potentially powerful tool for literate programming.  I looked
at the website and confess I'm as much in the dark as when I started,
but I find that interesting rather than discouraging since I felt the
same way about Lisp the first time I saw it :-).  I have a feeling if I
were to grasp the essentials of Leo there is a lot of power and maybe
something truly NEW in editing abilities there.  (Of course, I'm sure
like all things computer related Emacs can be made to do it if it's
useful ;-)

Since you have looked at it, I was wondering if you could offer any
insights on what its potential advantages are.  IIRC Tim wasn't real
crazy about it so maybe it's not a very good match for Axiom, but I was
wondering if you had followed up with it at all.

\start
Date: Thu, 1 Dec 2005 18:48:32 -0500
From: Eitan Gurari
To: Ralf Hemmecke
Subject: Re: ALLPROSE --> tex4ht --> html
Cc: Eitan Gurari

Ralf,

Looks like I misunderstood your question. Try

    \ifOption{foo}{...true part...}{...false part...}

-eitan


 > Well, that is not my point. I could write those simple things myself. 
 > The problem is that there is no reliable way to get access to the TeX 
 > string that appears inside all the htlatex like scripts.
 > 
 > If I get access to that and also to the parameters of tex4ht and t4ht, 
 > that would make me happy. For now I could simply extract them from 
 > htlatex and hardcode them into my own script, but that will break my 
 > code whenever you decide to change something so I need a reliable API.


 > > Some users devised scripts along the following lines.
 > > 
 > >      latex ...
 > >      bibtex...    call, if needed
 > >      makeindex... call, if needed
 > >      latex ...    repeat until the dvi file doesn't change
 > >      tex4ht ...
 > >      t4ht ...
 > > 
 > > I never tried those scripts, but I believe I have one somewhere in the
 > > emails I got.  I'll try to find it forward the code to you (in about
 > > 3--4 weeks).

\start
Date: Thu, 1 Dec 2005 22:28:39 -0500
From: Bill Page
To: Tim Daly
Subject: RE: [helpdesk@rosehosting.com: [RHH #FKL-86268-984]: move Axiom to shared dedicated server]

Tim,

On December 1, 2005 3:17 AM you wrote:
> 
> Axiom-developer has been moved from a shared-virtual server 
> (basically vmware-ish) to a shared dedicated server. the
> shared dedicated server is a dual-processor hyper-threaded
> machine with only 4 customers so we basically get a full
> processor and a gig of memory to ourselves.
> 
> Hopefully this fixes the problem. Let me know.
> 

Thanks. So far this is great!

The machine is actual a quad-processor and even a single
threaded operation (using only one processor) seems to be at
least twice as fast on the old server.

With a quad processor, there is one more thing that I can do
to improve performance - it is possible to run more than one
zope instance, accessing the same zope database. This has some
advantages over just allowing zope to run more threads because
of a limitation in the way threads are handled in Python. It
might take me a day or so to setup an 2nd zope instance, so
I will wait on that for now and just see how it goes.

Some yesterday when I was having a lot of trouble with the
old server I changed the robots.txt file to block all search
engines and spiders.

User-agent: *
Disallow: /

These robots have become particularly aggressive lately -
you just have to look at the web statistics to see where a
lot of the cpu cycles where going.

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

Recently their access rate was frequently overrunning the
server's capacity. With the modified robots.txt that was
slowed down a lot (but not stopped since there are some
robots out there that do not play nicely).

This morning when I had a spare moment and after reading
your email about the new server, I temporarily opened up
access to the search robots again. I was surprised to see
them all suddenly "jump" onto the new server and it wasn't
long before they had overrun the zope process again! So even
with this machine is still have to be a little careful.
Adding another zope instance would help prevent this.

Today I did a couple of quick things that might have improved
the zope performance a little: 1) I did a re-pack of the zope
database. Normally this is done once a week on Monday morning
around 00:05 AM. 2) I re-built the catalogue indexes for both
the wiki and the portal. This second one might have been more
beneficial than I originally thought.

I have also cut-back the robots.txt to be more selective
about what we allow the search engines to do.

User-agent: MSNbot
Disallow: /

User-agent: *
Disallow: /SandBox
Disallow: /zope/mathaction/SandBox
Disallow: /bibliography
Disallow: /zope/Plone/bibliography
Disallow: /refs/axiombib
Disallow: /zope/Plone/refs/axiombib
Disallow: /refs/redbib
Disallow: /zope/Plone/refs/redbib

--------

Some explanations about the contents of robots.txt:

I did not see much point in allowing the Microsoft Network
MSNbot in (which is one of the robots that has been quite
aggressive on our site) since we are already be aggressively
scanned by Googlebot.

The /SandBox pages are supposed to be just drafts anyway
so I don't think we want this indexed externally in any case.

The /bibliography pages involve a lot of cpu processing
each time they are accessed and I have not found anyway to
make this more efficient yet, so for now I have blocked
robot access to them.

Right now this seems enough keep things in check but as time
goes on, I might have to add more items to the disallow
list. (It's a bit awkward that the robots.txt standard only
allows Disallow commands and not Allow commands ... )

If anyone has any suggestions about how to optimize the
robots.txt file, I would be very glad to receive them.

Finally, Tim. I am still concerned about the fact that you
(personally) seem to be bearing all the cost of running the
axiom-developer.org server. I expect that this new configuration
is going to cost significantly more since it is dedicated
server. Let's talk about what we can do to make this more
equitable.

Thanks again for setting this up.

Regards,
Bill Page.

> 
> ------- Start of forwarded message -------
> Date: Wed, 30 Nov 2005 23:26:03 -0600
> From: "RH Helpdesk" <helpdesk@rosehosting.com>
> Subject: [RHH #FKL-86268-984]: move Axiom to shared dedicated server
> Reply-To: "RH Helpdesk" <helpdesk@rosehosting.com>
> 
> 
> This has been completed.
> 
> Admin
> RoseHosting.com
> 
> 
> On Wed, 30 Nov 2005 18:01:11 -0600, Tim Daly wrote:
> > IP: 72.23.23.52
> > 
> > Please move the axiom-developer.org
> > domain (209.135.140.38) from a shared
> > virtual server to a shared dedicated 
> > server and send me mail when the
> > process completes.

\start
Date: Thu, 1 Dec 2005 22:44:25 -0500
From: Bill Page
To: Bill Page, Tim Daly
Subject: re: [helpdesk@rosehosting.com:	[RHH#FKL-86268-984]: move Axiom to shared dedicated server]

On December 1, 2005 10:29 PM I wrote:
> 
> The machine is actual a quad-processor and even a single
> threaded operation (using only one processor) seems to be at
> least twice as fast on the old server.
> 

That should have read:

"at least twice as fast as on the old server."

In other words I think the processors on the new machine
are about twice as fast. Or at least we are getting to see
about twice as much of them as we did on the old virtual
server... I never did like "vmware" much.

\start
Date: Fri, 02 Dec 2005 12:04:02 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomCommunity] Axiom meeting ideas

Axiom Meeting

  We are planning the [next Axiom meeting]. Please contribute your
ideas and suggestions.

The [Axiom meeting 2005] was held in New York City, April 22, 2005.

\start
Date: Fri, 2 Dec 2005 14:50:41 -0500
From: Bill Page
To: Bill Page
Subject: search engines accessing MathAction websites

On December 1, 2005 10:29 PM I wrote:
> Subject: RE: [helpdesk@rosehosting.com: 
> [RHH#FKL-86268-984]: move Axiom to shared dedicated server]
> 
> ... 
> I have also cut-back the robots.txt to be more selective
> about what we allow the search engines to do.
> ...

After thinking about this a little more I realized that one of
the things that causes a higher access rate for the robot search
engines and spiders is that we now have multiple virtual urls for
the same MathAction web sites:

http://page.axiom-developer.org  (wiki and portal)
http://www.axiom-developer.org  (wiki and portal)
http://wiki.axiom-developer.org 
http://portal.axiom-developer.org

Since the robots can not tell which of these urls map to which
web sites, it is a result it is possible that we are being
scanned 3 times for the same content!

So today, I made url specific urls that block all robots from the
first two urls but allow full indexing of both the wiki and the
portal (except for bibliography and SandBox pages):

User-agent: *
Disallow: /SandBox
Disallow: /bibliography
Disallow: /refs/axiombib
Disallow: /refs/redbib

-------

I also changed

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

to map directly to http://wiki.axiom-developer.org

So far, this seems to have resulted in significantly lower rate
of access by these robots.

As a result, the performance of the MathAction websites now
seems to me to be very fast. When you have some time, please
try the Axiom wiki and portal sites and comment on how fast
(or slow) they seem to you. Your comments on these changes are
welcome.

\start
Date: Fri, 2 Dec 2005 14:54:45 -0500
From: Bill Page
To: list
Subject: RE: search engines accessing MathAction websites

I wrote:

> 
> So today, I made url specific urls that block all robots from the
> first two urls but allow full indexing of both the wiki and the
> portal (except for bibliography and SandBox pages):
> 
> User-agent: *
> Disallow: /SandBox
> Disallow: /bibliography
> Disallow: /refs/axiombib
> Disallow: /refs/redbib
> 

I meant:

  So today, I made url specific robots.txt files that block all
  robots from the ...

\start
Date: Fri, 2 Dec 2005 19:16:25 -0500
From: Tim Daly
To: list
Subject: surely this must be a joke

French Government Lobbied to Ban Free Software

http://www.fsffrance.org/news/article2005-11-25.en.html

If not, lets hope that the lead developers of algebra software
in france are willing to give up the title and pass it on to
someone else as well as hosting their software elsewhere.

France is a great source of computer algebra experts and they
have several beautiful computer algebra packages. 

We could host them on axiom-developer if needed and give the
pro-forma official title of lead developer to someone who does
not live in france.

\start
Date: Sat, 3 Dec 2005 01:14:35 +0100
From: Pierre Doucy
To: Tim Daly
Subject: Re: surely this must be a joke

Actually, what I understand is that they want to assimilate to
conterfeiting the fact of "editing, distributing, or promoting any
software that might be used to allow access to information protected
by intellectual property rights"

Although completely silly, its does not exactly mean banning open
source software at large (but for instance, it would mean banning web
browsers because you can potentially use it to illegally download
MP3s...)

Although some of our legislators are complete morons when it comes to
high tech (I know some of them personally), especially when law
proposals are lobbied by big companies, but I believe it just has no
chance of becoming law. Way too much businesses would be harmed, and
lawmakers understand that.

Just my 2 cents...

Pierre

On 12/3/05, Tim Daly wrote:
> French Government Lobbied to Ban Free Software
>
> http://www.fsffrance.org/news/article2005-11-25.en.html
>
>
> If not, lets hope that the lead developers of algebra software
> in france are willing to give up the title and pass it on to
> someone else as well as hosting their software elsewhere.
>
> France is a great source of computer algebra experts and they
> have several beautiful computer algebra packages.
>
> We could host them on axiom-developer if needed and give the
> pro-forma official title of lead developer to someone who does
> not live in france.

\start
Date: Sat, 03 Dec 2005 06:30:38 -0600
From: MathAction (unknown)
To: MathAction
Subject: [WishList] Better Graphics

Rotating a 3d graph is not easy with mouse. I need to keep the the mouse button pressed till I get the current viewing angle.
MuPad 3.1 for Windows has very good and intuitive  graphics

\start
Date: Sat, 03 Dec 2005 08:20:57 -0500
From: Eugene Surowitz
To: Pierre Doucy
Subject: Re: surely this must be a joke

Actually this should be taken very seriously.

I strongly suggest that everyone interested in the fate of
open software should subscribe to the Electronic Frontier Foundation's
newletter at

> The Electronic Frontier Foundation
> 454 Shotwell Street
> San Francisco CA 94110-1914 USA
> +1 415 436 9333 (voice)
> +1 415 436 9993 (fax)
>   <http://www.eff.org/>	

There is much more seriously going on than French faux pas.

Cheers, Gene

Pierre Doucy wrote:
> Actually, what I understand is that they want to assimilate to
> conterfeiting the fact of "editing, distributing, or promoting any
> software that might be used to allow access to information protected
> by intellectual property rights"
> 
> Although completely silly, its does not exactly mean banning open
> source software at large (but for instance, it would mean banning web
> browsers because you can potentially use it to illegally download
> MP3s...)
> 
> Although some of our legislators are complete morons when it comes to
> high tech (I know some of them personally), especially when law
> proposals are lobbied by big companies, but I believe it just has no
> chance of becoming law. Way too much businesses would be harmed, and
> lawmakers understand that.
> 
> Just my 2 cents...
> 
> Pierre
> 
> On 12/3/05, Tim Daly wrote:
>> French Government Lobbied to Ban Free Software
>>
>> http://www.fsffrance.org/news/article2005-11-25.en.html
>>
>>
>> If not, lets hope that the lead developers of algebra software
>> in france are willing to give up the title and pass it on to
>> someone else as well as hosting their software elsewhere.
>>
>> France is a great source of computer algebra experts and they
>> have several beautiful computer algebra packages.
>>
>> We could host them on axiom-developer if needed and give the
>> pro-forma official title of lead developer to someone who does
>> not live in france.

\start
Date: 03 Dec 2005 17:22:54 +0100
From: Martin Rubey
To: list
Subject: Re: AXIOM available on MacOS-X ?

The following message is a courtesy copy of an article
that has been posted to sci.math.symbolic as well.

Jean Guillaume Pyraksos <wissme@hotmail.com> writes:

> The subject says all :-)
> And the answer is ?...

As far as I know: nearly... I copy this to axiom-developer, since they know
more about these issues there.

\start
Date: 03 Dec 2005 17:26:02 +0100
From: Martin Rubey
To: list
Subject: Axiom on Mac OS X

Dear all,

people keep asking whether Axiom runs on Mac OS X already. I think it is quite
a shame that I don't know an answer...

Martin

PS: Unfortunately, I'm ultra-busy right now so that I cannot participate
currently. This will change hopefully before Christmas.

\start
Date: Sat, 3 Dec 2005 12:48:33 -0500
From: Tim Daly
To: Martin Rubey
Subject: re: AXIOM available on MacOS-X ?

I recently purchase (last friday) a apple iBook with OS-X 10.4
and am in the process of doing the port.

Tim Daly

\start
Date: Sat, 03 Dec 2005 11:30:57 -0600
From: MathAction (billpage)
To: MathAction
Subject: [FrontPage] FrontPage Navigation boxes

As you can see, the new FrontPage design has been installed on
the Axiom Wiki. Normally we have disabled comments on the FrontPage,
but since this is a new design, I will leave comments enabled for a
while to give other people a chance to comment.

Since this site is a wiki all pages on this site can be customized
by the user however the FrontPage itself is controlled. If you are
thinking that having the navigation boxes would be nice on all pages,
this is possible but it would be a big change. Using this style on
a few other selected pages would not be hard. But which pages?

On the other hand, if you like this style of navigation then you
might also want to check the Axiom Portal

http://portal.axiom-developer.org

which uses this three column format with a navigation left sidebar
throughout.

\start
Date: Sat, 3 Dec 2005 11:49:59 -0800
From: Bob McElrath
To: Martin Rubey
Subject: Re: Axiom on Mac OS X

Martin Rubey [Martin Rubey] wrote:
> Dear all,
> 
> people keep asking whether Axiom runs on Mac OS X already. I think it is quite
> a shame that I don't know an answer...

Some people here in our physics department have tried, and the answer
seems to be no.  Unfortunately I don't have access to a mac to test.

\start
Date: Sat, 03 Dec 2005 16:38:38 -0500
From: William Sit
To: Tim Daly
Subject: learning Lisp

Hi Tim:

Some naive questions. I know how to enter a lisp command under Axiom interpreter

)lisp '(aa bb cc)

but is there a way to read a lisp program and run it? Is there a way to run a
lisp session interactively without having to prefix every line with )lisp?
Is it "safe" to run lisp command in an experimental fashion -- I am concerned
with scope?

If not under Axiom, what is your recommendation for an environment to learn
lisp?

\start
Date: Sat, 3 Dec 2005 16:54:47 -0500
From: Bill Page
To: William Sit
Subject: RE: learning Lisp

William,

On December 3, 2005 4:39 PM you wrote:

>
> Some naive questions. I know how to enter a lisp command
> under Axiom interpreter
>
> )lisp '(aa bb cc)
>
> but is there a way to read a lisp program and run it? Is
> there a way to run a lisp session interactively without
> having to prefix every line with )lisp?

The simplist way to "get into lisp" from within Axiom is the
')fin' command. See page 1018 of the Axiom book (book2.pdf):

1.10 )fin
Command Description:
This command is used by Axiom developers to leave the Axiom
system and return to the underlying Common Lisp system. To
return to Axiom, issue the "(|spad|)" function call to
Common Lisp.

> Is it "safe" to run lisp command in an experimental fashion
> -- I am concerned with scope?
>
> If not under Axiom, what is your recommendation for an
> environment to learn lisp?
>

Of course you can run GCL (which is the lisp used in the
current distribution of Axiom) stand alone. If you built
Axiom from source then you should be able to find gcl itself
here:

./lsp/gcl-2.6.7/unixport/saved_gcl

But for really learning lisp the "modern way" you might be
better off with a more ANSI compliant lisp like clisp plus
some the usual lisp programmer tools like emacs and Slime.

----------

I have been thinking about adding a section to the MathAction
web site specifically about lisp, learning lisp, lisp as
used in Axiom etc. If you have any ideas about this as someone
who knows Axiom and wants to learn more about lisp, I would
be very interested.

\start
Date: Sat, 03 Dec 2005 23:14:24 +0100
From: Jens Axel Segaard
To: list
Subject: Re: learning Lisp

William Sit wrote:

> If not under Axiom, what is your recommendation for an environment to learn
> lisp?

Perhaps "Practical Common Lisp" has an answer.

     <http://www.gigamonkeys.com/book/>

If not, i'm sure comp.lang.lisp will be helpful.

\start
Date: Sat, 03 Dec 2005 15:20:56 -0800
From: Ed Borasky
To: list
Subject: re: learning Lisp

I'll second this nomination ... I have the hard-copy version. Of course 
I know more about Lisp than I do about Axiom at the moment :) If you're 
on a Linux system, there are four reasonable Lisp implementations to 
choose from, all different but converging towards ANSI compatibility.

GCL has some compile-time flags that bring it closer to ANSI 
compatibility, and it has "readline" support built in. My recollection 
is that it benchmarks faster than the other three on the "toy Lisp 
program" benchmarks, but I don't know how it compares on real 
applications like Axiom.

The other three are Clisp, CMUCL and SBCL. Clisp also has "readline" 
built in. It's probably also the best choice if you want to be able to 
work with both Linux and Windows. It is in CygWin, and there may be a 
native Windows version as well.

CMUCL is Carnegie Mellon University Common Lisp. It doesn't have 
"readline" and doesn't do Windows, but it's faster than GCL on some 
benchmarks and is the only open source Lisp that reliably handles some 
of the music software from CCRMA. There's an open source wrapper that 
provides "readline" support if you need it.

SBCL is "Steel Bank Common Lisp". "Steel Bank" is a play on the words 
"Carnegie Mellon"; Carnegie was a steel magnate and Mellon was a banker. 
:) It's a more or less complete re-write of CMUCL and is the youngest of 
the bunch. The current release I have is 0.9.7, and I think it runs on 
Windows, or at least will at some point in the not too distant future.

Jens Axel Søgaard wrote:

> William Sit wrote:
>
>> If not under Axiom, what is your recommendation for an environment to 
>> learn
>> lisp?
>
>
> Perhaps "Practical Common Lisp" has an answer.
>
>     <http://www.gigamonkeys.com/book/>
>
> If not, i'm sure comp.lang.lisp will be helpful.
>

\start
Date: Sat, 3 Dec 2005 18:22:15 -0500
From: Bill Page
To: Jens Axel Segaard
Subject: Re: learning Lisp

On December 3, 2005 5:14 PM Jens Axel S=F8gaard wrote:
>
> William Sit wrote:
>
> > If not under Axiom, what is your recommendation for an
> > environment to learn lisp?
>
> Perhaps "Practical Common Lisp" has an answer.
>
>      <http://www.gigamonkeys.com/book/>
>

I think this is a great book to read if you want to understand
how "2nd generation" lisp programmers think and work. You might
recall this is the same book recommended by Tim Daly Jr a few
weeks ago. After learning that the author of this book, Peter
Seibel, was another 2nd generation lisp programmer who had
started out "hacking perl" I just couldn't resist buying the
printed version. :)

Seibel recommends that you start here:

http://www.gigamonkeys.com/book/lispbox/
http://common-lisp.net/project/lispbox

\start
Date: Sat, 03 Dec 2005 15:51:56 -0800
From: Ed Borasky
To: list
Subject: re: learning Lisp

Bill Page wrote:

>I think this is a great book to read if you want to understand
>how "2nd generation" lisp programmers think and work.
>
I'm more of a 1st generation Lisp programmer -- I learned on Lisp 1.5 
and haven't really gotten into that "new-fangled" stuff like objects, 
slots, etc. One of these days I suppose I should learn how macros work.

<ducking>

\start
Date: Sat, 3 Dec 2005 20:59:32 -0500
From: Tim Daly
To: William Sit
Subject: Re: learning Lisp

> Some naive questions. 
> I know how to enter a lisp command under Axiom interpreter
> 
> )lisp '(aa bb cc)
> 
> but is there a way to read a lisp program and run it? Is there a way to run a
> lisp session interactively without having to prefix every line with )lisp?
> Is it "safe" to run lisp command in an experimental fashion -- I am concerned
> with scope?
> 
> If not under Axiom, what is your recommendation for an environment to learn
> lisp?
> 

to run a lisp command you can use )lisp.
if you want to run a lot of them from the command line do:

 --> )lisp (setq $dalymode t)
 --> (+ 2 3)
 --> (defun foo (x y) (+ x y))
 --> (foo 2 3)
 --> 2 + 3

$dalymode says: 

  if the first character is a '(' 
    then it is lisp
    else it is axiom

to disable it do:
 --> (setq $dalymode nil)

i wrote this change to the interpreter because i tend to use lisp a lot
during maintenance. it breaks some syntax but you can work around that.
it is just a personal hack and hence isn't documented anywhere (yet).


if you really want to "drop" into lisp do:

  --> )fin
BOOT>

  and now you are talking only to lisp at a lisp command prompt in
  the boot package. to restart axiom type:

BOOT>(restart)


\start
Date: Sat, 03 Dec 2005 23:23:56 -0800
From: Ed Borasky
To: list
Subject: re: learning Lisp

Another resource:

http://www.onlamp.com/pub/wlg/8397

\start
Date: Sun, 04 Dec 2005 13:35:17 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] Excellent

I really like this new look.  My only comment would perhaps be that the

/mathaction/
FrontPage 

text doesn't really add much, and sort of conveys the impression of being
"unfinished" or "unpolished."  Just a thought - there may be good reasons
for having it there.  If I were to suggest an alternative it would be:

Axiom - a Computer Algebra System

\start
Date: Mon, 5 Dec 2005 00:18:56 -0500
From: Tim Daly
To: Camm Maguire
Subject: Axiom on MACOSX... gettext issue

Camm,

I'm porting Axiom to the MAC OSX and have run into a GCL build problem.

If I type 

 ./configure

it all runs along fine until 

checking for libintl.h... no
configure: error: libintl.h (gettext) not found

This include file lives in /sw/include/libintl.h which I believe is
the FINK software location.

On linux I could edit ld.so.conf and get it to work but not on the MAC.
Where is the appropriate place to tell GCL about these libraries?
Should I use LD_LIBRARY_PATH or is there a standard configure option
I don't know about?

\start
Date: Mon, 05 Dec 2005 04:01:28 -0500
From: William Sit
To: Bill Page
Subject: re: learning Lisp
Cc: Jens Axel Segaard,

Dear Bill, Jens, Ed and Tim:

Thanks for your pointers. 
More naive questions:

Bill Page wrote:
> The simplist way to "get into lisp" from within Axiom is the
> ')fin' command. See page 1018 of the Axiom book (book2.pdf):
> 
> 1.10 )fin

Ok, that gets me into Boot. I was able to type a lisp expression and it got
evaluated. Now what? How do I read in a lisp file to evaluate a list of Lisp
expressions? Can I create a separate name-space (without having to prefix each
name with something like myname- )? (something like with prefix myname-?)


I downloaded lispbox, as recommended by you all, and installed the Windows
version. After some tries, I got it to start runemacs.exe (there was some
problem with paths, the usual trouble), and to a *scratch* buffer where it says:

; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.

I am not interested in editing in emacs (as a last resort, I can cut and paste
into an emacs buffer), but rather how to run a process (lisp).  As far as I
know, it is only an edit buffer. Supposedly, lisp is already running? There is
no "prompt" to enter a lisp expression and everything I entered was treated like
text.

I did spend some time reading help and Emacs manual, but they are all for
editing and I got lost quickly. I tried the compile under tools and it says

make -k test.l
make: Nothing to be done for `test.l'.

Compilation finished at Mon Dec 05 02:39:29

test.l has one line:
(defun f (x) (car x))

Can someone point me to the key-strokes for compile REPL (see below)?

Tim wrote:
> to run a lisp command you can use )lisp.
> if you want to run a lot of them from the command line do:
> 
>  --> )lisp (setq $dalymode t)
> $dalymode says:
> 
>   if the first character is a '('
>     then it is lisp
>     else it is axiom

That is nice. Your instructions are exactly what I was looking for. I can read
in a file (on Linux, but on Windows, there is the path problems). Is there any
danger I overwrite any system definitions? The functions defined survive after
(setq $dalymode nil) and another (setq $dalymode t), which is nice also. Are
these functions then available in Axiom somehow?

Bill Page wrote:
> I have been thinking about adding a section to the MathAction
> web site specifically about lisp, learning lisp, lisp as
> used in Axiom etc. If you have any ideas about this as someone
> who knows Axiom and wants to learn more about lisp, I would
> be very interested.

That is a very good idea, especially the connection between lisp and Axiom.

I think I may be a very bad example since I am very clumsy with Linux, Emacs. I
prefer to learn by trial and error once I know the mechanics of the REPL. I do
not worry about the programming aspect or the editing aspect, only the
interface. So, for me, I think a brief description of how the interactive loop
goes is most important to get me started. (So under the Axiom environment, Tim's
secret mode instructions is already enough for me.) Specifically: I suggest the
page for learning lisp to include:

 The lisp environment you recommend, and why you recommend it
 how to start the lisp environment (including installation if not Axiom)
 how to quit the lisp environment
 how to interactively enter a lisp expression to get it evaluated
 how to read in a file of lisp expressions and get them evaluated
 how to save a session and if possible, reload a saved one to continue
(recomputing is ok)
 how to compile lisp libraries and have them loaded at start
 how to learn about lisp built-in functions

I think these are not specific to lisp at all and people should not have to read
a lot to start having some fun to experiment with a language. It should be like
a new "game": Easy to start playing, harder to master. As to learning lisp,
there are many books and good references and the page may list a recommended
few, but this is not as important as information on the environment to run lisp.
It would be nice to have the above available for each lisp environment
recommended.

\start
Date: Mon, 05 Dec 2005 14:35:24 +0100
From: Ralf Hemmecke
To: William Sit
Subject: re: learning Lisp
Cc: Jens Axel Segaard

William Sit wrote:
> I am not interested in editing in emacs (as a last resort, I can cut and paste
> into an emacs buffer), but rather how to run a process (lisp).  As far as I
> know, it is only an edit buffer. Supposedly, lisp is already running? There is
> no "prompt" to enter a lisp expression and everything I entered was treated like
> text.

If you are in Emacs, type

M-x lisp-interaction-mode

and hit RETURN.

(Here M-x is either ESC key and then "x" key or the "Alt" key and the 
"x" key together.)

That turns your buffer into a LISP buffer (which *scratch* normally is 
if you haven't deleted it). Now you type a LISP expression.

(defun f (x) (car x))

go with the cursor at the end of the line and hit Ctrl-j. That will 
evaluate that line.

Sorry, that is all I know, but perhaps it helps.

\start
Date: Mon, 05 Dec 2005 15:15:45 +0100
From: Kai Kaminski
To: William Sit
Subject: re: learning Lisp

William Sit writes:

> Bill Page wrote:
>> The simplist way to "get into lisp" from within Axiom is the
>> ')fin' command. See page 1018 of the Axiom book (book2.pdf):
>> 
>> 1.10 )fin
>
> Ok, that gets me into Boot. I was able to type a lisp expression and it got
> evaluated. Now what? How do I read in a lisp file to evaluate a list of Lisp
> expressions? Can I create a separate name-space (without having to prefix each
> name with something like myname- )? (something like with prefix myname-?)
It gives you a Lisp prompt. The 'BOOT' indicates that you are in the
BOOT package. Packages are Common Lisp's way to avoid using 'myname-'
prefixes. They can be a bit tricky at first. I can recommend Erann
Gat's "Complete Idiot's Guide to Common Lisp Packages"
(http://www.flownet.com/gat/packages.pdf).

To read in a Lisp file, say foo.lisp, type in (load "foo").

> I downloaded lispbox, as recommended by you all, and installed the Windows
> version. After some tries, I got it to start runemacs.exe (there was some
> problem with paths, the usual trouble), and to a *scratch* buffer where it says:
>
> ; This buffer is for notes you don't want to save, and for Lisp evaluation.
> ;; If you want to create a file, visit that file with C-x C-f,
> ;; then enter the text in that file's own buffer.
>
> I am not interested in editing in emacs (as a last resort, I can cut and paste
> into an emacs buffer), but rather how to run a process (lisp).  As far as I
> know, it is only an edit buffer. Supposedly, lisp is already running? There is
> no "prompt" to enter a lisp expression and everything I entered was treated like
> text.
That is the standard Emacs scratch buffer, it has nothing to to with
Lispbox. I've never used Lispbox, but presumably type M-x slime RET
(M-x means hold down the Meta (Alt) key and then press x. After that
enter slime and hit return) will start up Slime (the *S*uperior
*L*isp *I*nteraction *M*ode for *E*macs). That will give you a REPL.

You might really want to reconsider and use Emacs for editing as
well. Not only is it fairly smart about editing Lisp code, Slime also
provides a few convenience functions. For example, pressing C-c C-c
compiles the toplevel-form the cursor is currently at. C-c C-k
compiles the current buffer and loads it. If you need documentation
for a Lisp function, put the cursor on its name and press C-c C-d
h. The easiest way to learn how to use Slime might be watching the
Slime video by Marco Baringer (see common-lisp.net, Latest News, Slime
movie).

> I did spend some time reading help and Emacs manual, but they are all for
> editing and I got lost quickly. I tried the compile under tools and it says
The Emacs help will be mostly useless as far as using Slime is
concerned. You'll have to consult Lispbox-specific documentation. The
compile command is mostly meant for languages like C/C++, where you
use makefiles. Lisp doesn't really have the edit-compile-run cycle.

Again I would urge you to watch the Slime movie. Not only does it show
how to use Slime, it also demonstrates how Lisp works.

> Bill Page wrote:
>> I have been thinking about adding a section to the MathAction
>> web site specifically about lisp, learning lisp, lisp as
>> used in Axiom etc. If you have any ideas about this as someone
>> who knows Axiom and wants to learn more about lisp, I would
>> be very interested.
>
> That is a very good idea, especially the connection between lisp and Axiom.
>
> I think I may be a very bad example since I am very clumsy with Linux, Emacs. I
> prefer to learn by trial and error once I know the mechanics of the REPL. I do
> not worry about the programming aspect or the editing aspect, only the
> interface. So, for me, I think a brief description of how the interactive loop
> goes is most important to get me started. (So under the Axiom environment, Tim's
> secret mode instructions is already enough for me.) Specifically: I suggest the
> page for learning lisp to include:
>
>  The lisp environment you recommend, and why you recommend it
>  how to start the lisp environment (including installation if not Axiom)
>  how to quit the lisp environment
Usually (quit) should do the job.

>  how to interactively enter a lisp expression to get it evaluated
>  how to read in a file of lisp expressions and get them evaluated
(load filename) usually works.

>  how to save a session and if possible, reload a saved one to continue
> (recomputing is ok)
This depends on the Lisp implementation.

>  how to compile lisp libraries and have them loaded at start
This depends on the Lisp environment and the library. Most new open
source Lisp libraries use ASDF (Another System Definition Facility) or
something similar. If ASDF is installed and loaded, loading another
library is usually as easy as typing (asdf:oos 'asdf:load-op
'my-library) (Slime supports a shortcut for this). There is even
asdf-install which can install certain libraries for
you. Unfortunately these tools cannot be used with Axiom at the
moment, because GCL doesn't support ASDF(*).

>  how to learn about lisp built-in functions
Download the Lisp HyperSpec
(http://www.lispworks.com/documentation/HyperSpec/). As mentioned
above, Slime offers a shortcut to load the documentation for the
symbol under the cursor (either within Emacs using one of the Emacs
browser packages or in an external web browser).

\start
Date: Mon, 05 Dec 2005 15:22:25 +0100
From: Ralf Hemmecke
To: William Sit
Subject: re: learning Lisp
Cc: Jens Axel Segaard

William Sit wrote:
>>>  --> )lisp (setq $dalymode t)
>> $dalymode says:
>>
>>   if the first character is a '('
>>     then it is lisp
>>     else it is axiom
> 
> That is nice. Your instructions are exactly what I was looking for. I can read
> in a file (on Linux, but on Windows, there is the path problems). Is there any
> danger I overwrite any system definitions? The functions defined survive after
> (setq $dalymode nil) and another (setq $dalymode t), which is nice also. Are
> these functions then available in Axiom somehow?

Could somebody enlighten me... Why would an ordinary Axiom user ever 
want to enter LISP commands into Axiom? What would be reasonable things 
that cannot be done in the SPAD interpreter itself?

\start
Date: 05 Dec 2005 09:35:06 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Axiom on MACOSX... gettext issue

Greetings!

Here is the envionment I souce before running configure and make on
the macosx box to which I have access:

export PATH=/sw/bin:/sw/sbin:/usr/local/bin:$PATH # I don't think these are actually
export LIBRARY_PATH=/sw/lib
export C_INCLUDE_PATH=/sw/include
export CPPFLAGS="-no-cpp-precomp"


I believe Aurelien has put some useful stuff in README.macosx.

Please let me know if problems persist.  I'm testing an axiom 20050901
build on 2.6.8pre myself at the moment as well.

Take care,

Tim Daly writes:

> Camm,
> 
> I'm porting Axiom to the MAC OSX and have run into a GCL build problem.
> 
> If I type 
> 
>  ./configure
> 
> it all runs along fine until 
> 
> checking for libintl.h... no
> configure: error: libintl.h (gettext) not found
> 
> This include file lives in /sw/include/libintl.h which I believe is
> the FINK software location.
> 
> On linux I could edit ld.so.conf and get it to work but not on the MAC.
> Where is the appropriate place to tell GCL about these libraries?
> Should I use LD_LIBRARY_PATH or is there a standard configure option
> I don't know about?

\start
Date: Mon, 5 Dec 2005 09:38:38 -0500
From: Bill Page
To: William Sit
Subject: re: learning Lisp
Cc:  Jens Axel Segaard

On December 5, 2005 4:01 AM William Sit wrote:
> ...
> Bill Page wrote:
> > The simplest way to "get into lisp" from within Axiom is the
> > ')fin' command. See page 1018 of the Axiom book (book2.pdf):
> >
> > 1.10 )fin
>
> Ok, that gets me into Boot.

No, that is not quite correct. )fin *does* get you into lisp.
You are in the boot 'package' by default. That is all that the
prompt

  BOOT>

means. You can change to some other package via

  (in-package 'xxx)

  XXX>

In lisp packages provide unique namespaces by prefixing the
package name to symbols so you can write:

BOOT>(setq zzz 1)
1
BOOT>(in-package :xxx)
#<"XXX" package>
XXX>(setq zzz 2)
2
XXX>zzz
2
XXX>(in-package :boot)
#<"BOOT" package>
BOOT>zzz
1
BOOT>

------

So now you have two different symbols boot::zzz and xxx::zzz with
different values.

BOOT>xxx::zzz
2
BOOT>boot::zzz
1

> I was able to type a lisp expression and it got evaluated.
> Now what?

:) well, the rest of lisp, of course! I really strongly
recommend consulting a book such as

http://www.gigamonkeys.com/book/

For information about lisp packages read

http://www.gigamonkeys.com/book/programming-in-the-large-packages-and-sym=
bol
s.html

But you must be aware in a few cases that the version of gcl that
is used in Axiom is not quite ANSI common lisp.

> How do I read in a lisp file to evaluate a list of Lisp
> expressions?

A good place to start reading is here:

http://www.gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.ht=
ml

You need to find out about the lisp command

  (load "hello.lisp")

> Can I create a separate name-space (without having to prefix
> each name with something like myname- )? (something like with
> prefix myname-?)
>

Yes, certainly. See the stuff about packages above.

>
> I downloaded lispbox, as recommended by you all, and
> installed the Windows version. After some tries, I got it
> to start runemacs.exe (there was some problem with paths,
> the usual trouble), and to a *scratch* buffer where it says:
>
> ; This buffer is for notes you don't want to save, and for
> Lisp evaluation.
> ;; If you want to create a file, visit that file with C-x C-f,
> ;; then enter the text in that file's own buffer.
>
> I am not interested in editing in emacs (as a last resort, I
> can cut and paste into an emacs buffer), but rather how to run
> a process (lisp).  As far as I know, it is only an edit buffer.
> Supposedly, lisp is already running? There is no "prompt" to
> enter a lisp expression and everything I entered was treated
> like text.

If you are not an emacs users then I do sympathize with you.
But here again Peter Seibel's book should be a big help to
you.

>
> I did spend some time reading help and Emacs manual, but
> they are all for editing and I got lost quickly.

If you are just getting started with emacs then I certainly
would not recommend that you start by reading the manual. :)
Seriously. It is much better to use a reference that has a
specific purpose like Seibel's book.

>
> Tim wrote:
> > to run a lisp command you can use )lisp.
> > if you want to run a lot of them from the command line do:
> >
> >  --> )lisp (setq $dalymode t)
> > $dalymode says:
> >
> >   if the first character is a '('
> >     then it is lisp
> >     else it is axiom
>
> That is nice. Your instructions are exactly what I was
> looking for. I can read in a file (on Linux, but on Windows,
> there is the path problems). Is there any danger I overwrite
> any system definitions? The functions defined survive after
> (setq $dalymode nil) and another (setq $dalymode t), which is
> nice also. Are these functions then available in Axiom somehow?

Yes but function names in Axiom always have the syntax |name|
with vertical bars on each side.

>
> Bill Page wrote:
> > I have been thinking about adding a section to the MathAction
> > web site specifically about lisp, learning lisp, lisp as
> > used in Axiom etc. If you have any ideas about this as someone
> > who knows Axiom and wants to learn more about lisp, I would
> > be very interested.
>
> That is a very good idea, especially the connection between
> lisp and Axiom.

Good. Then perhaps with your help (This email is already the
right kind of help.) then let's do it.

>
> I think I may be a very bad example since I am very clumsy
> with Linux, Emacs.

As far as I am concerned that makes you both typical and
perfect as an example.

> I prefer to learn by trial and error once I know the mechanics
> of the REPL. I do not worry about the programming aspect or the
> editing aspect, only the interface. So, for me, I think a brief
> description of how the interactive loop goes is most important
> to get me started. (So under the Axiom environment, Tim's
> secret mode instructions is already enough for me.)

I really "hate" that this is a "secret mode". I do not think
there should be any secret modes like this hidden in Axiom. If
it is desirable to be able to input lisp expressions in the
Axiom interpreter, then there should be a simple and open way
to achieve this. For example:

  )set input mode lisp

or something like that.

> Specifically: I suggest the page for learning lisp to include:
>
>  The lisp environment you recommend, and why you recommend it
>  how to start the lisp environment (including installation if
>  not Axiom) how to quit the lisp environment

Because we are talking specifically about lisp in the context
of Axiom and at present there is no recommended way to use "modern"
tools like SLIME in Axiom, I would be content to discuss just the
use of ')fin' and ')set input mode lisp'.

>  how to interactively enter a lisp expression to get it evaluated

Page 1 of any lisp book usually has

(+ 1 1)

>  how to read in a file of lisp expressions and get them evaluated
>  how to save a session and if possible, reload a saved one to
>  continue (recomputing is ok)

We almost covered that above. There is enough additional detail
in chapter 2 of Siebel's book.

>  how to compile lisp libraries and have them loaded at start
>  how to learn about lisp built-in functions
>
> I think these are not specific to lisp at all and people
> should not have to read a lot to start having some fun to
> experiment with a language.

I agree that it is desirable to have enough information on one
web page or two to get started and even to progress to a fairly
deep level in the way lisp is used in Axiom.

> It should be like a new "game": Easy to start playing, harder
> to master. As to learning lisp, there are many books and good
> references and the page may list a recommended few, but this is
> not as important as information on the environment to run lisp.

Agreed.

> It would be nice to have the above available for each lisp
> environment recommended.
>

Unless you really want to learn "modern" lisp, then I think
the lisp modes in Axiom are enough.

\start
Date: Mon, 5 Dec 2005 11:00:16 -0500
From: Bill Page
To: William Sit
Subject: Re: learning Lisp
Cc:  Jens Axel Segaard,

On December 5, 2005 4:01 AM William Sit wrote:
> ...
> Tim wrote:
> > to run a lisp command you can use )lisp.
> > if you want to run a lot of them from the command line do:
> >
> >  --> )lisp (setq $dalymode t)
> > $dalymode says:
> >
> >   if the first character is a '('
> >     then it is lisp
> >     else it is axiom
>
> That is nice. Your instructions are exactly what I was looking
> for. I can read in a file (on Linux, but on Windows, there is
> the path problems).

To what "path problems" are you referring on Windows?

What command do you use to "read in a file"?

(load "xxx.lisp")

or

)read xxx.input

The first one works for me on Windows. But I can't seem to make
the second one work with lisp commands in "dalymode".

\start
Date: Mon, 05 Dec 2005 10:55:28 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] 

\begin{axiom}
    integrate(1/(a+z^3), z=0..1,"noPole")
    \end{axiom}

\start
Date: Mon, 5 Dec 2005 09:17:26 -0800 (PST)
From: Cliff Yapp
To: Bill Page, William Sit
Subject: re: learning Lisp
Cc: Jens Axel Segaard

--- Bill Page wrote:

> Because we are talking specifically about lisp in the context
> of Axiom and at present there is no recommended way to use
> "modern" tools like SLIME in Axiom, I would be content to 
> discuss just the use of ')fin' and ')set input mode lisp'.

Funny you should mention SLIME :-).

While I cannot yet attest to all the utility this might have, I was
able (with a lot of help) to combine SLIME and Maxima in a rather
interesting way a while back.  The main problem was it required
threading, and I don't know where GCL stands on threads.

In CMUCL with Maxima, here was what I did:
http://www.math.utexas.edu/pipermail/maxima/2005/010325.html

Here is a screenshot showing the final setup I wound up trying:
http://maxima.sourceforge.net/debugging_maxima_and_lisp_code.png

On the left is a window with Maxima code, and below it is a Maxima
REPL.  On the left is a lisp source file related to the .mac file
(needed some low level definitions, IIRC) and below it a SLIME Lisp
REPL connected to the same running Maxima image that was displaying the
Maxima REPL in the left window.  So I could:

a) input commands in the Maxima REPL and investigate the changed image
with SLIME
b) input lisp commands into the SLIME REPL and use the Maxima REPL to
test the results at a high level without having to reload or anything
c) Presumably I could have sent code blocks of either mac or lisp code
to the image from the files, although I don't think I tried that

I'm not an expert SLIME user (I too need to sit down and watch the
movie) so there is doubtless a lot more I can do.  CMUCL is SLIME's
best Lisp, IIRC - advanced things like xref work best there.  I don't
think GCL was a major target for them yet due to its ANSI issues:
http://common-lisp.net/pipermail/slime-devel/2005-April/003392.html

Supported lisps are listed here:
http://common-lisp.net/project/slime/doc/html/slime_3.html#SEC3

So SLIME will make more sense when we are ANSI compliant, since we can
then run on CMUCL and other well supported Lisps.

For Windows+SLIME, Bill Clementson has some instructions in his blog:
http://bc.tech.coop/blog/040306.html

Postulating a powerful Axiom Emacs mode, this might be a really really
nice way to debug both Aldor/Spad code and the Lisp code, all at once
in real time :-).

BTY, anybody had any news on the state of Aldor?

\start
Date: Mon, 5 Dec 2005 10:46:59 -0800 (PST)
From: Cliff Yapp
To: Bill Page, William Sit
Subject: Re: learning Lisp
Cc: Jens Axel Segaard

> Here is a screenshot showing the final setup I wound up trying:
> http://maxima.sourceforge.net/debugging_maxima_and_lisp_code.png
> 
> On the left is a window with Maxima code, and below it is a 
> Maxima REPL.  On the left is a lisp source file related to 
> the .mac file (needed some low level definitions, IIRC) and 
> below it a SLIME Lisp REPL connected to the same running 
> Maxima image that was displaying the Maxima REPL in the left 
> window. 

Er - sorry, the lisp file and SLIME REPL are on the right in that
image.

\start
Date: Mon, 05 Dec 2005 20:13:11 +0100
From: Michel Lavaud
To: Ralf Hemmecke
Subject: re: article "standard" header/footer

On 28 Nov 2005 at 14:42, Ralf Hemmecke wrote:

> Just one quick comment... there are several places where you use TeX
> syntax. I'd prefer to promote LaTeX (it's \newpage instead of \eject).
> In fact I don't like to see \eject at all.

This is incorrect. \eject is a valid LaTeX command, for all versions of La=
TeX.
It is defined in lplain.tex (for LaTeX 2.09) and in latex.ltx (for LaTeX2e=
).
\newpage is different from \eject, it is not a substitute to it. So, if Ti=
m uses
 \eject and it gives the result he wants, then he is correct.

> \begin{thebibliography}{99}
> \bibitem{1} nothing
> \end{thebibliography}
> 
> It is old technology.

What do you mean by "old technology" ? These are also valid LaTeX commands=
,
in all versions of LaTeX

\start
Date: Mon, 05 Dec 2005 21:05:02 +0100
From: Ralf Hemmecke
To: Michel Lavaud
Subject: re: article "standard" header/footer

Hi Michel,

Michel Lavaud wrote:
> On 28 Nov 2005 at 14:42, Ralf Hemmecke wrote:
> 
>> Just one quick comment... there are several places where you use TeX
>> syntax. I'd prefer to promote LaTeX (it's \newpage instead of \eject).
>> In fact I don't like to see \eject at all.

> This is incorrect. \eject is a valid LaTeX command, for all versions of LaTeX.
> It is defined in lplain.tex (for LaTeX 2.09) and in latex.ltx (for LaTeX2e).
> \newpage is different from \eject, it is not a substitute to it. So, if Tim uses
>  \eject and it gives the result he wants, then he is correct.

OK, I was incorrect with \eject. It is in latex.ltx and, therefore a 
LaTeX command.

But I still don't like to see it in a LaTeX document, especially not in 
places like

\documentclass{article}
\usepackage{src/scripts/tex/axiom}
\begin{document}
\title{The Top Level Makefile}
\author{Timothy Daly}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject
\section{General Makefile Structure}

If one really likes to have the output like that then the command 
"\tableofcontent" and/or the environment "abstract" should be redefined 
via a style file. Even if that costs a little more effort in writing 
those styles, it separates style from contents. That was the point I 
wanted to make.

>> \begin{thebibliography}{99}
>> \bibitem{1} nothing
>> \end{thebibliography}
>>
>> It is old technology.
> 
> What do you mean by "old technology" ? These are also valid LaTeX commands,
> in all versions of LaTeX

Of course, you are correct, but it is much better to use BibTeX. There 
is simply more structure in a BibTeX file than in a usual 
"thebibliography" environment.

If you rather like to maintain such environments instead of a BibTeX 
file, fine with me, but I wouldn't like to do this.

\start
Date: Mon, 5 Dec 2005 13:33:19 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Units and dimensions - more background to do, but now with a guide

Heh - just when you think you've gotten most of the useful references
for your job, you find something new.  There is an extremely useful
paper that was published last year by a group at Sun Microsystems that
seems to have followed many of the same threads I've been looking at,
and has not only interesting content but a VERY useful reference
section :-).  There's even a mention of the problem with economic
conversions in the reference review :-).

http://portal.acm.org/citation.cfm?id=1028976.1029008#

Just so I remember, here's the bibtex entry:

@inproceedings{1029008,
 author = {Eric Allen and David Chase and Victor Luchangco and
Jan-Willem Maessen and Guy L. Steele, Jr.},
 title = {Object-oriented units of measurement},
 booktitle = {OOPSLA '04: Proceedings of the 19th annual ACM SIGPLAN
conference on Object-oriented programming, systems, languages, and
applications},
 year = {2004},
 isbn = {1-58113-831-9},
 pages = {384--403},
 location = {Vancouver, BC, Canada},
 doi = {http://doi.acm.org/10.1145/1028976.1029008},
 publisher = {ACM Press},
 address = {New York, NY, USA},
 }

\start
Date: Mon, 5 Dec 2005 21:44:42 -0500
From: Bill Page
To: William Sit
Subject: re: learning Lisp

William,

On December 5, 2005 9:39 AM I wrote:
> ... 
> >
> > Bill Page wrote:
> > > I have been thinking about adding a section to the MathAction
> > > web site specifically about lisp, learning lisp, lisp as
> > > used in Axiom etc. If you have any ideas about this as someone
> > > who knows Axiom and wants to learn more about lisp, I would
> > > be very interested.
> William Sit wrote:
> >
> > That is a very good idea, especially the connection between
> > lisp and Axiom.
> 
> Good. Then perhaps with your help (This email is already the
> right kind of help.) then let's do it.
> ...

I tried this on MathAction:

\begin{axiom}
)lisp (setq $dalymode 't)
(defun foo (x y) (+ x y))
(foo 2 3)
\end{axiom}

but it doesn't work because what comes between the \begin{axiom}
and the \end{axiom} on MathAction is saved in a file, e.g.
called 'section_n.input' and then executed via the command
')read section_n.input'. Unfortunately it seems the 'dalymode'
does not apply to the ')read' command.

In order to illustrate "live" use of lisp on MathAction I think
I need to invent a new enviroment like this:

\begin{lisp}
(defun foo (x y)
  (+ x y))
(foo 2 3)
\end{lisp}

The text between \begin{lisp} and \end{lisp} would be saved to
a file called, e.g. 'section_n.lisp' and then executed with the
command ')lisp (load section_n.lisp)'. This would allow Axiom
interpreter commands, spad/aldor compiles and full multi-line
lisp expressions to appear on the same web page.

\start
Date: Mon, 5 Dec 2005 23:21:58 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: re: learning Lisp
Cc: Jens Axel Segaard

> Could somebody enlighten me... Why would an ordinary Axiom user ever 
> want to enter LISP commands into Axiom? What would be reasonable things 
> that cannot be done in the SPAD interpreter itself?

an ordinary user wouldn't want to do this (which is why it isn't documented)
but it is useful for two other class of users, the person doing maintenance
on the interpreter and the advanced spad programmer who is writing $LISP
based functions.

\start
Date: Mon, 5 Dec 2005 22:46:26 -0500
From: Bill Page
To: Tim Daly
Subject: Re: learning Lisp

Tim,

On December 5, 2005 11:22 PM you wrote:
> 
> Ralf Hemmecke wrote: 
> > Could somebody enlighten me... Why would an ordinary Axiom 
> > user ever want to enter LISP commands into Axiom? What would
> > be reasonable things that cannot be done in the SPAD interpreter
> > itself?
> 
> an ordinary user wouldn't want to do this (which is why it 
> isn't documented)

I know you know that that is a *very* poor reason for not
documenting it! :)

> but it is useful for two other class of users, the person 
> doing maintenance on the interpreter and the advanced spad
> programmer who is writing $LISP based functions.
> 

If I set $dalymode then:

(xxx ...)

is just a shorthand for

)lisp (xxx ...)

isn't it? So this is just a matter of convenience, not a
significant new kind of functionality for the interpreter. But
$dalymode cannot be set true always because there is a small
possibility that (xxx ...) should really be interpreted as an
Axiom expression, right?

\start
Date: Tue, 6 Dec 2005 01:16:06 -0500
From: Tim Daly
To: Bill Page
Subject: web-based editing from IBM

fyi... see the article

http://www.groklaw.net/article.php?story051205161942401

and note the paragraph

Rather than create an analog to Microsoft Office, IBM is offering
editors for creating documents, spreadsheets or presentations within a
Web browser. Documents are delivered via a Web portal and stored in
shared directories. Access control and document management tools allow
people to share and edit documents with others.

so the wiki-web-future you're advocating (and volunteering) is getting
ever stronger.

\start
Date: Tue, 06 Dec 2005 01:13:22 -0500
From: William Sit
To: Bill Page
Subject: re: learning Lisp

Bill Page wrote:
> 
> Tim,
> 
> On December 5, 2005 11:22 PM you wrote:
> > an ordinary user wouldn't want to do this (which is why it
> > isn't documented)
> 
> I know you know that that is a *very* poor reason for not
> documenting it! :)

Now that this is in the "open", perhaps should change $dalymode to $lispmode?

> > but it is useful for two other class of users, the person
> > doing maintenance on the interpreter and the advanced spad
> > programmer who is writing $LISP based functions.
> >
> 
> If I set $dalymode then:
> 
> (xxx ...)
> 
> is just a shorthand for
> 
> )lisp (xxx ...)
> 
> isn't it? So this is just a matter of convenience, not a
> significant new kind of functionality for the interpreter. But
> $dalymode cannot be set true always because there is a small
> possibility that (xxx ...) should really be interpreted as an
> Axiom expression, right?


The convenience is useful, but I also believe it is not robust in the Axiom
environment. Also, must EVERY lisp expression begin with a left paren? For
example, the quoted expression '(aa bb cc) would have to be entered more
clumsily as (list 'aa 'bb 'cc), if it appears at the beginning, right?

Also, as conjectured in another email (or see Sandbox Lisp), not every entry
point to the Interpreter is intercepted to make this conversion.

\start
Date: Tue, 06 Dec 2005 01:24:59 -0500
From: William Sit
To: Cliff Yapp
Subject: Re: Units and dimensions - more background to do, but now with a guide

CY wrote:

> http://portal.acm.org/citation.cfm?id=1028976.1029008#

Great find! We should discuss this after digesting the paper. If you have time,
I'll appreciate you summarizing the paper (executive summary? :-)

\start
Date: Tue, 06 Dec 2005 01:34:18 -0500
From: William Sit
To: Bill Page
Subject: re: learning Lisp
Cc: Jens Axel Segaard

Bill Page wrote:
> > William Sit wrote:
> > I can read in a file (on Linux, but on Windows, there is
> > the path problems).
> 
> To what "path problems" are you referring on Windows?
> 
> What command do you use to "read in a file"?
> 
> (load "xxx.lisp")
> 
> or
> 
> )read xxx.input
 
I used )read and it always complain. I vaguely recall that it worked once and I
think it now does not work because of updates in XP. I did not try (load ...)
under Windows (and now I tried it, the file apparently was read in, but exactly
what is done with it, I don't know).  As I pointed out, even under Linux, the
file is not fed to the Interpreter correctly (but it presumably was read in).

> 
> The first one works for me on Windows. But I can't seem to make
> the second one work with lisp commands in "dalymode".
>
Did you get all the lisp expressions evaluated when the file is read?

\start
Date: Tue, 06 Dec 2005 02:22:41 -0500
From: William Sit
To: Bill Page
Subject: re: learning Lisp
Cc: Jens Axel Segaard

Bill Page wrote:
> 
> The simplest way to "get into lisp" from within Axiom is the
> ')fin' command. See page 1018 of the Axiom book (book2.pdf):
>
> 1.10 )fin

> > William Sit wrote:
> > Ok, that gets me into Boot.
> 
> No, that is not quite correct. )fin *does* get you into lisp.
> You are in the boot 'package' by default. [snipped]

Thanks for explaining that. Sorry I was lazy to look things up. Honestly, I try
to avoid learning BOOT! (It's not yet time to learn it; lisp comes first).

> > I was able to type a lisp expression and it got evaluated.
> > Now what?
> 
> :) well, the rest of lisp, of course! I really strongly
> recommend [snipped]

Will bear these in mind. Thanks.

> > How do I read in a lisp file to evaluate a list of Lisp
> > expressions?
> 
> A good place to start reading is here:
> 
> http://www.gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.html
> 
> You need to find out about the lisp command
> 
>   (load "hello.lisp")
> 
> > Can I create a separate name-space (without having to prefix
> > each name with something like myname- )? (something like with
> > prefix myname-?)
> >
> 
> Yes, certainly. See the stuff about packages above.

This is good. Thanks.
 
> >
> > I downloaded lispbox, as recommended by you all, and
> > installed the Windows version. After some tries, I got it
> > to start runemacs.exe (there was some problem with paths,
> > the usual trouble), and to a *scratch* buffer where it says:
> 
>  ; This buffer is for notes you don't want to save, and for
>  Lisp evaluation.
>  ;; If you want to create a file, visit that file with C-x C-f,
>  ;; then enter the text in that file's own buffer.

That much I know. I actually had "learned" emacs commands many times, but they
never stick because I do not use emacs often enough. My favorite editor is PE2
(very old fashioned), combined with a Gateway2000 programmable keyboard.

[snipped]

> It is much better to use a reference that has a
> specific purpose like Seibel's book.

Will look at that.

> > Are these [lisp] functions then available in Axiom somehow?
> 
> Yes but function names in Axiom always have the syntax |name|
> with vertical bars on each side.

Ah, I noticed that, of course (it just didn't ring a bell).

[snipped]

> I really "hate" that this is a "secret mode". I do not think
> there should be any secret modes like this hidden in Axiom. If
> it is desirable to be able to input lisp expressions in the
> Axiom interpreter, then there should be a simple and open way
> to achieve this. For example:
> 
>   )set input mode lisp
> 
> or something like that.

If by this command we drop actually into lisp environment (like BOOT) that would
be more robust then passing through the Interpreter. May be a LISP) lisp package
(probably there already)?
What is the simplest way to create a lisp package? (OK, I should read ...)
 
> > Specifically: I suggest the page for learning lisp to include:
> >
> >  The lisp environment you recommend, and why you recommend it
> >  how to start the lisp environment (including installation if
> >  not Axiom) how to quit the lisp environment
> 
> Because we are talking specifically about lisp in the context
> of Axiom and at present there is no recommended way to use "modern"
> tools like SLIME in Axiom, I would be content to discuss just the
> use of ')fin' and ')set input mode lisp'.

No, I meant things like lispbox environment, outside Axiom, since it was
recommended.
 
> >  how to interactively enter a lisp expression to get it evaluated
> 
> Page 1 of any lisp book usually has
> 
> (+ 1 1)

No, I don't mean lisp syntax. I mean how to get to something like a prompt where
you can begin to enter a lisp expression and then what key (for example ctrl-j
under emacs? I still have not get through that!) combo to get it evaluated.
 
[snipped]

> > It would be nice to have the above available for each lisp
> > environment recommended.
> >
> 
> Unless you really want to learn "modern" lisp, then I think
> the lisp modes in Axiom are enough.

Yes, I probably would start with just the Axiom environment once I learned the
REPL mechanics. Then depending on what I find lisp to be useful for, I may
explore other development environments.

Actually what gets me into Lisp is not the dicussions here (of course, it has
influence, but I know about that long ago and never has the incentive to learn
lisp). I came upon Gregory Chaitin's Algorithmic Information Theory by chance
(actually through a joke, attached below) who had written a lisp program to
compute Omega which he ran on a similated Lisp Interpreter written in
Mathematica (probably version 2 or 3). It seems his Lisp Interpreter code does
not work without modification and I have not yet figured out how to upgrade
(port) it.  I would like to learn something about AIT, lisp, Mathematica, and
Axiom at the same time with this study.

And now, for the joke that led me into this.

William
---
Enjoy this... 
  
Queen Elizabeth and Dolly Parton 
die on the same day and they both go
before an Angel to find out if they'll be admitted to Heaven. 

Unfortunately, there's only one space left that day, 
so the Angel must decide which of them gets in. 
The Angel asks Dolly if there's some particular  reason why she
should go to Heaven.

Dolly takes off her top and  says, 
 "Look at these, they're the most perfect breasts 
God ever created, and  I'm sure it will please God to 
be able to see them every day, for  eternity."

The Angel thanks Dolly, and asks Her Majesty the same  question. 
The Queen takes a bottle of Perrier out of her purse, 
shakes it up, and gargles. Then, she spits into a toilet and pulls the lever. 

The Angel says, "OK, your Majesty, you may go in." 

Dolly is outraged and asks, "What was that all about? 
I show you two of God's own perfect creations and you turn me down. 
She spits into a commode and she gets in! 
Would you explain that to  me?"

"Sorry, Dolly," says the Angel, "but even in Heaven, 

a royal flush beats a pair ...

no matter how big they are."

\start
Date: Tue, 6 Dec 2005 08:23:21 -0500
From: Bill Page
To: William Sit
Subject: re: learning Lisp

On December 6, 2005 1:11 AM William Sit wrote:
>
> Bill Page wrote: 
> > In order to illustrate "live" use of lisp on MathAction I think
> > I need to invent a new enviroment like this:
> >
> > \begin{lisp}
> > (defun foo (x y)
> >   (+ x y))
> > (foo 2 3)
> > \end{lisp}
> >
> > The text between \begin{lisp} and \end{lisp} would be saved to
> > a file called, e.g. 'section_n.lisp' and then executed with the
> > command ')lisp (load section_n.lisp)'. This would allow Axiom
> > interpreter commands, spad/aldor compiles and full multi-line
> > lisp expressions to appear on the same web page.
> >
> > Comments?
>
> I tried:
>
> file test2.lisp now containing some lisp commands
>
> (1)->)lisp (load "test2.lisp")
> (1)->
> Value = T
> (1)->
>
> and this is independent of what is in the file! None of the
> functions defined in the file is defined afterwards.

Are you sure? This works for me:

File: hello.lisp:

(defun hello-world ()
  (format t "hello, world"))

(hello-world)

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

File: hello.input:

)lisp (load "hello.lisp")
)lisp (hello-world)

---------

(1) -> )read hello.input
)lisp (load "hello.lisp")

hello, world
Value = T
)lisp (hello-world)

hello, world
Value = NIL
(1) ->

----------

\start
Date: Tue, 6 Dec 2005 06:12:16 -0800 (PST)
From: Cliff Yapp
To: William Sit
Subject: Re: Units and dimensions - more background to do, but now with a guide

--- William Sit wrote:

> CY wrote:
> 
> > http://portal.acm.org/citation.cfm?id=1028976.1029008#
> 
> Great find! We should discuss this after digesting the paper. 
> If you have time, I'll appreciate you summarizing the paper 
> (executive summary? :-)

I'll see what I can do, after I get done digesting it.  Kind of neat
that Sun was looking into this :-).  Isn't Guy Steele a significant
figure in early lisp?

\start
Date: Tue, 6 Dec 2005 11:00:49 -0500
From: Tim Daly
To: William Sit
Subject: re: learning Lisp
Cc: Jens Axel Segaard

ok, this conversation has gone WAY off the rails ...

1) the $dalymode is a HACK to allow easier maintenance of the system.
   it is NOT a general purpose mechanism and it needs one of those
   hallway signs (like slippery floor) to make people aware that it
   INTENTIONALLY breaks the interpreter in certain well-known ways
   to allow ease of use for MAINTENANCE. If you're gonna unscrew the
   pipes you've got to expect that the plumbing is broken. there is
   no plan to ever make this part of the standard.

2) the BOOT package has nothing to do with the boot language. the
   BOOT package is a way to isolate certain axiom names from certain
   common lisp names. there is a concatenate function in lisp and
   one in the boot language. to distinguish these two names so they
   don't collide each name lives in a separate hash table. the lisp
   concatenate is really USER:CONCATENATE and the boot version is
   BOOT:CONCATENATE. the "package name" prefix is the name of the
   hash table to look up the function symbol. so being in the BOOT
   package means to look in the BOOT package hash table to find the
   symbol corresponding to a name. to change to the "standard"
   package type:
     (in-packge "USER")
   to change back type
     (in-package "BOOT")

3) the commands
     )read file.input
     )lisp (load "file.lisp")
   work on two different levels that have NOTHING to do with each other.
   the ")read" command reads AXIOM expressions from an input stream.
   the "(load" command reads LISP expressions from an input stream.

4) the |foo| naming convention isn't really a naming convention. the
   BOOT language is case sensitive. by default lisp uses uppercase only.
   the lisp syntax for escaping special characters in a symbol name is
   to surround it with vertical bars. if you define a function in BOOT
   using lower case with
       foo == 
   it becomes equivalent to 
       (defun |foo| 
   however if you define a BOOT function name in uppercase as in
       BAR ==
   it becomes equivalent to
       (defun bar 
   without the escape characters.

5) Lisp functions are always available in Axiom and are used in the
   algebra (grep for $LISP). However it is strongly recommended that
   you don't do this as it implies you know the EXACT LISP  internal
   representation of the object you are manipulating. Don't try this
   at home.

6) everything in axiom is just lisp code. there is no magic anywhere.
   sure, it looks funny but it's really just lisp. once you understand
   that it all makes sense (well, after 10 years or so).

7) there are "flavors" of lisp. axiom is written in common lisp version 1.
   the standard has moved since axiom was written but in a mostly 
   upward compatible way. the lisp in Emacs is another, older lisp.

since there is general confusion about all of this perhaps it is best
to learn lisp in a raw lisp image. when you build axiom you'll find a
raw lisp image that has been built and can be used. if you build axiom at
    (yourpage)/axiom
then do
    (yourpage)/axiom/obj/linux/bin/lisp
and you'll get a clean, non-axiom lisp image where you can work.

\start
Date: Tue, 6 Dec 2005 11:38:40 -0500
From: Bill Page
To: Tim Daly
Subject: Re: learning Lisp

On December 6, 2005 11:01 AM Tim Daly wrote:
> 
> ok, this conversation has gone WAY off the rails ...
> 

I don't know why you say that. It seems right-on to me. The
information you provide below is very useful.

> 1) the $dalymode is a HACK to allow easier maintenance of the
>    system. it is NOT a general purpose mechanism and it needs one
>    of those hallway signs (like slippery floor) to make people
>    aware that it INTENTIONALLY breaks the interpreter in certain
>    well-known ways to allow ease of use for MAINTENANCE. If you're
>    gonna unscrew the pipes you've got to expect that the plumbing
>    is broken. there is no plan to ever make this part of the
>    standard.

I STRONGLY disagree with this attitude. It is the purpose of
all documentation to act as "hallway signs" when necessary. I
don't think $dalymode is any more of a HACK than any other
debugging/maintenance option already defined in Axiom. And as
far as I can see from the Axiom source code, $dalymode is just
a short-cut for an Axiom command that *is* already documented

  )lisp ...

So I don't see what the big deal is. If we are going to keep
this short-cut, then let's just document it properly once and
for all.

> 
> 2) the BOOT package has nothing to do with the boot language.
>    the BOOT package is a way to isolate certain axiom names
>    from certain common lisp names. ...

That is clear and has already been explained, I think.

>    to change to the "standard"  package type:
>      (in-packge "USER")
>    to change back type
>      (in-package "BOOT")
> 

Can you explain what is the difference? Which package is used
for what? In what sense is "USER" standard? What other packages
are defined in Axiom?

> 3) the commands
>      )read file.input
>      )lisp (load "file.lisp")
>    work on two different levels that have NOTHING to do with 
>    each other.
>    the ")read" command reads AXIOM expressions from an input
>    stream.
>    the "(load" command reads LISP expressions from an input
>    stream.
>

Of course but why doesn't $dalymode allow the same short-cut
for )lisp inside ')read'?

> 4) the |foo| naming convention isn't really a naming convention.
>    the BOOT language is case sensitive. by default lisp uses
>    uppercase only. the lisp syntax for escaping special characters
>    in a symbol name is to surround it with vertical bars. if you
>    define a function in BOOT using lower case with
>        foo == 
>    it becomes equivalent to 
>        (defun |foo| 
>    however if you define a BOOT function name in uppercase as in
>        BAR ==
>    it becomes equivalent to
>        (defun bar 
>    without the escape characters.

Ok, that is important to know. Generally Boot functions are written
with at least one lower case letter so they always appear as |...|.
So we can write:

(1) -> )fin
(defun foo1 (x y)
   (+ x y))

(defun |foo2| (x y)
   (+ x y))

(restart)

(1) -> FOO1(1,2)$Lisp

   (1)  3
                                     Type: SExpression
(2) -> foo2(1,2)$Lisp

   (2)  3
                                     Type: SExpression

> 
> 5) Lisp functions are always available in Axiom and are used in
>    the algebra (grep for $LISP). However it is strongly recommended
>    that you don't do this as it implies you know the EXACT LISP
>    internal representation of the object you are manipulating.
>    Don't try this at home.
>

Au contraire. The is the axiom-developer list ... Please try this at
home! Try to understand it. Try to help maintain and improve Axiom.

 
> 6) everything in axiom is just lisp code. there is no magic
>    anywhere.  sure, it looks funny but it's really just lisp.
>    once you understand that it all makes sense (well, after 10
>    years or so).

Well, that is a considerable exaggeration I think. Make
perfectly good sense to me and I've only been doing this
seriously for 2 years. :)

> 
> 7) there are "flavors" of lisp. axiom is written in common 
>    lisp version 1. the standard has moved since axiom was
>    written but in a mostly upward compatible way. the lisp
>    in Emacs is another, older lisp.
>

These days "Common Lisp" usually means ANSI Common Lisp, right?
Is there a more exact way to refer to the current standard?
 
> since there is general confusion about all of this perhaps it
> is best to learn lisp in a raw lisp image. when you build
> axiom you'll find a raw lisp image that has been built and
> can be used. if you build axiom at
>     (yourpage)/axiom
> then do
>     (yourpage)/axiom/obj/linux/bin/lisp
> and you'll get a clean, non-axiom lisp image where you can
> work.
> 

That is ok, but I do not think that it reduces the confusion
much in the mind of someone new to lisp who already knows
Axiom. All we really need is a good explanation of how lisp
is used in Axiom. What you have written above is great and
would only occupy a couple of paragraphs on a web page
introducing lisp to Axiom developers.

\start
Date: Tue, 6 Dec 2005 12:51:10 -0500
From: Tim Daly
To: Bill Page
Subject: re: learning Lisp

> Can you explain what is the difference? Which package is used
> for what? In what sense is "USER" standard? What other packages
> are defined in Axiom?
> 

This covers the package system which is too long to explain:

Steele, Guy L., "Common Lisp The Language", Second Edition,
chapter 11, "Packages" ISBN 0-13-152414-3

Seibel, Peter, "Practical Common Lisp" chapter 21
ISBN 1-59059-239-5

as for axiom's use see:

src/interp/sys-pkg.lisp.pamphlet

\start
Date: Tue, 6 Dec 2005 13:14:23 -0500
From: Tim Daly
To: Bill Page
Subject: re: learning Lisp

> Of course but why doesn't $dalymode allow the same short-cut
> for )lisp inside ')read'?

because $dalymode only works from the input command prompt and not
from files. it's not architected, it's just a hack. if we think this
is useful then it should be architected but it's only there because,
as a developer, i spend almost all my time hacking the lisp code,
tracing, rewriting, and redefining functions and then testing them at
the axiom level. personally i don't think there is a general need for
such features and therefore it is just for maintenance workers. just
like the phone line repairman can make phone calls from the top of the
phone pole and pretend it comes from your house so he doesn't have to
climb down and use your phone for testing.

there is no need to read lisp code from files as i always work
in emacs and the code is in the other buffer. thus i would never
have known that it won't work from files. it's like discovering
that your answering machine won't work at the top of the phone pole.

there are several maintenance tools in axiom. see the file
src/interp/monitor.lisp.pamphlet which is a general purpose tool for
monitoring lisp functions. it knows how to monitor algebra function
calls. i use it to collect and analyze the performance of interpreter
and algebra code but it assumes you know what an NRLIB is, why
interp.exposed exists, etc. it also assumes you know how algebra
name-mangling works since it reports algebra statistics in their
underlying lisp name forms. and since i know that it hacks the :cond
param on trace i can make it do much more than statistical counts.
unlike the other lisp code i wrote this one is actually documented.

but there is so much more to document before we get to the low
level maintenance code.

\start
Date: Tue, 6 Dec 2005 13:36:32 -0500
From: Tim Daly
To: list
Subject: interesting free algebra text

http://www.johnwoodwark.com/inge/docs/icg.pdf

for those who want to carve out an interesting algebra area
(similar to cliff's units work). most interesting is the whole
question of intervals. ideally we should be able to define
functions with the proviso that it is only defined over a
given interval, as in:

     sin(x) suchthat x in [0.3..0.4]

there is a suchthat domain that i originally wrote to address
exactly this. it was part of the "proviso" effort. provisos are
the things you see trailing expressions like

    1/x provided x <> 0

and are a general purpose way of addressing functions. from my
research i discovered that almost all (about 80%) of the common
proviso forms written in textbooks can be expressed in terms of
intervals.

symbolic intervals open up an interesting area of research (guaranteed
to generate lots of PhDs). computationally they generate a graph.

consider the problem of computing a function symbolically and you
do a division by x somewhere along the path of computation. at that point
the computation splits into three parts:

     f(x) suchthat x in [x < 0]
     f(x) suchthat x in [x = 0]
     f(x) suchthat x in [x > 0]

further computation should carry these provisos. another division, say by
y, can generate 3 more branches:

     f(x) suchthat x in [x < 0] and y in [y < 0]
     f(x) suchthat x in [x = 0] and y in [y < 0]
     f(x) suchthat x in [x > 0] and y in [y < 0]

     f(x) suchthat x in [x < 0] and y in [y = 0]
     f(x) suchthat x in [x = 0] and y in [y = 0]
     f(x) suchthat x in [x > 0] and y in [y = 0]

     f(x) suchthat x in [x < 0] and y in [y > 0]
     f(x) suchthat x in [x = 0] and y in [y > 0]
     f(x) suchthat x in [x > 0] and y in [y > 0]

these can sometimes recombine when either you can prove that the
interval collapses, that the function is continuous at the point,
etc.

the introduction of provisos based on symbolic intervals can
generate a lifetime of fun.

\start
Date: Tue, 6 Dec 2005 10:23:39 -0800 (PST)
From: Cliff Yapp
To: Tim Daly, Bill Page
Subject: re: learning Lisp

--- Tim Daly wrote:

> > Can you explain what is the difference? Which package is used
> > for what? In what sense is "USER" standard? What other 
> > packages are defined in Axiom?
> 
> This covers the package system which is too long to explain:
> 
> Steele, Guy L., "Common Lisp The Language", Second Edition,
> chapter 11, "Packages" ISBN 0-13-152414-3
> 
> Seibel, Peter, "Practical Common Lisp" chapter 21
> ISBN 1-59059-239-5
> 
> as for axiom's use see:
> 
> src/interp/sys-pkg.lisp.pamphlet

Also, I recommend The Complete Idiots Guide to Common Lisp Packages:
http://www.flownet.com/ron/packages.pdf

\start
Date: Tue, 6 Dec 2005 16:28:51 -0500
From: Bill Page
To: Tim Daly
Subject: re: learning Lisp

On Tuesday, December 06, 2005 1:24 PM C Y wrote:
>
> --- Tim Daly wrote:
>
> > > Can you explain what is the difference? Which package is used
> > > for what? In what sense is "USER" standard? What other
> > > packages are defined in Axiom?
> >
> > This covers the package system which is too long to explain:
> >

Where did it say that I wanted an explanation of the lisp
package system??? Arrrgghh... ;)

> > Steele, Guy L., "Common Lisp The Language", Second Edition,
> > chapter 11, "Packages" ISBN 0-13-152414-3
> >
> > Seibel, Peter, "Practical Common Lisp" chapter 21
> > ISBN 1-59059-239-5
> >

Yes, yes. Blah, blah... lots of texts about lisp. Jeez! Seibel's
book is also entirely online on the web as we already said in
several previous emails.

> > as for axiom's use see:
> >
> > src/interp/sys-pkg.lisp.pamphlet
>

Yes, Axiom's use. That's it. What I was hoping for was a quick
summary of the why and wherefore of package use in Axiom. So
I guess I have to read

http://wiki.axiom-developer.org/axiom--test--1/src/interp/SysPkgLisp

Here I see:

(make-package "SCRATCHPAD_COMPILER")     <--- SPAD obviously
(make-package "SPECFNSF")                <--- Don't have a clue ...
(make-package "VMLISP")                  <--- Lisp emulation package
(make-package "BOOTTRAN")                <--- Why two packages
(make-package "BOOT")                    <---   for Boot?
(make-package "FOAM")                    <--- Maybe these are Aldor
(make-package "FOAM-USER")               <---   related?

Is that all there is? It would be nice to have a couple of
sentences about each of these packages.

There are also references like:

(lisp::use-package '("USER" "SYSTEM" "LISP"))

Since I do not find any make-package for "USER" "SYSTEM" or
"LISP". I presume that these "standard packages" predefined
by GCL? Maybe these names correspond to the following common
lisp packages?

  "USER" --> "CL-USER" ?
  "LISP" --> "COMMON-LISP" ?
  "SYSTEM" --> specific to GCL ?

> Also, I recommend The Complete Idiot's Guide to Common Lisp
> Packages:
> http://www.flownet.com/ron/packages.pdf

Sure, this is ok but generic. What we need to know is how
packages are used in Axiom.

\start
Date: Tue, 6 Dec 2005 16:47:39 -0500
From: Bill Page
To: Tim Daly
Subject: re: learning Lisp

On Tuesday, December 06, 2005 1:14 PM Tim Daly wrote:
> Bill Page wrote:
> > Of course but why doesn't $dalymode allow the same short-cut
> > for )lisp inside ')read'?
>
> because $dalymode only works from the input command prompt and
> not from files. it's not architected, it's just a hack. if we
> think this is useful then it should be architected but it's only
> there because, as a developer, i spend almost all my time hacking
> the lisp code, tracing, rewriting, and redefining functions and
> then testing them at the axiom level.

Axiom is no longer (or at least it should not be) a one-person
developer project. I think your experience as an Axiom developer
needs to be communicated to other people who might be willing
to become Axiom developers. As such what you do as a developer
defines the tools needed. So yes, for the open source version
of Axiom I think this $dalymode hack needs to be "architected"
(whatever that means in this context).

> personally i don't think there is a general need for such
> features and therefore it is just for maintenance workers. just
> like the phone line repairman can make phone calls from the top
> of the phone pole and pretend it comes from your house so he
> doesn't have to climb down and use your phone for testing.

Yes certainly. This email list is devoted specifically to Axiom
maintenance. I think it is appropriate that we discuss what tools
are necessary for the repair personell (i.e. us).

>
> there is no need to read lisp code from files as i always work
> in emacs and the code is in the other buffer. thus i would never
> have known that it won't work from files. it's like discovering
> that your answering machine won't work at the top of the phone
> pole.

Ok, this should be easy to fix. But as you say, it might not
be of much use for the typical developer.

For the purposes of writing about and illustrating lisp usage
on MathAction web pages, I think translating \begin{lisp} as
')lisp (load ...)' will be more useful anyway.

>
> there are several maintenance tools in axiom. see the file
> src/interp/monitor.lisp.pamphlet which is a general purpose tool
> for monitoring lisp functions. it knows how to monitor algebra
> function calls. i use it to collect and analyze the performance
> of interpreter and algebra code but it assumes you know what an
> NRLIB is, why interp.exposed exists, etc. it also assumes you know
> how algebra name-mangling works since it reports algebra statistics
> in their underlying lisp name forms. and since i know that it
> hacks the :cond param on trace i can make it do much more than
> statistical counts. unlike the other lisp code i wrote this one
> is actually documented.

Great. Thanks.

>
> but there is so much more to document before we get to the
> low level maintenance code.
>

I think it would be a good strategy to document first those
things that will allow other people to participate and learn
more about Axiom.

\start
Date: Tue, 6 Dec 2005 17:45:38 -0500
From: Tim Daly
To: Bill Page
Subject: re: learning Lisp

hmmm, too much detail in a reference and not enough detail in a reference.
all in the same email. seems like it averages out :-)


> > src/interp/sys-pkg.lisp.pamphlet

(make-package "SCRATCHPAD_COMPILER")     <--- SPAD obviously

  the spad compiler package. although i believe this is a dead
  package at this point. all of the symbols from this package
  have been moved into the boot package.

(make-package "SPECFNSF")                <--- Don't have a clue ...

  the special functions package. there was originally lisp code
  to support hardcoded knowledge of special functions like gamma.
  this is also a dead package as the functions have been lifted
  to the algebra level.

(make-package "VMLISP")                  <--- Lisp emulation package

  this is the package that originally contained the VMLisp macros
  but in fact contains macros to support several other lisps. it
  is essentially the place where most of the macros to support
  idioms from prior ports (like rdefiostream and fileactq)

(make-package "BOOTTRAN")                <--- Why two packages

  this is the boot to lisp compiler package which contains the
  src/boot files. it is the boot translator package.

(make-package "BOOT")                    <---   for Boot?

  everything in axiom that the user references eventually shows
  up here. the interpreter and the algebra are run after switching
  to the boot package (in-package "BOOT") so any symbol that the
  interpreter or algebra uses has to (cough, cough) appear here.

(make-package "FOAM")                    <--- Maybe these are Aldor
  
  foam is the intermediate language for the aldor compiler. FOAM
  means "first order abstract machine" and functions similar to
  RTL for the GCC compiler. it is a "machine" that is used as the
  target for meta-assembler level statments. these are eventually
  expanded for the real target machine (or interpreted directly)

(make-package "FOAM-USER")               <---   related?

  foam-user is the package containing foam statements and macros
  that get inserted into user code versus the foam package which
  provides support for compiler code.


> Is that all there is? It would be nice to have a couple of
> sentences about each of these packages.

is that better? it is hard to guess the level of detail required.
remember, i'm on the other end of a skinny pipe and the intent of
the email may not be the meaning i derive from the message so a 
little guesswork and patience is necessary.

\start
Date: Tue, 6 Dec 2005 16:59:35 -0500
From: Bill Page
To: Tim Daly
Subject: RE: interesting free algebra text

On Tuesday, December 06, 2005 1:37 PM Tim Daly (root) wrote:
>
> http://www.johnwoodwark.com/inge/docs/icg.pdf
>
> for those who want to carve out an interesting algebra area
> (similar to cliff's units work). most interesting is the whole
> question of intervals.
>

Axiom already contains a significant amount of algebra for
dealing with intervals. See:

http://wiki.axiom-developer.org/axiom--test--1/src/algebra/IntervalSpad

+++ Author: Mike Dewar
+++ Date Created: November 1996
+++ Description:
+++ This category implements of interval arithmetic and transcendental
+++ functions over intervals.

-------

I know that this domain is critical for some of Axiom's integration
algorithms. I am sure that there are some important extensions that
could be made to here.

> ideally we should be able to define functions with the proviso that
> it is only defined over a given interval, as in:
>
>    sin(x) suchthat x in [0.3..0.4]
> ...

I am not convinced that the concept of a proviso is directly
relevant to intervals. It seems too general to me.

\start
Date: Tue, 6 Dec 2005 14:02:50 -0800 (PST)
From: Cliff Yapp
To: Bill Page
Subject: Re: learning Lisp

--- Bill Page wrote:

> Where did it say that I wanted an explanation of the lisp
> package system??? Arrrgghh... ;)

Sorry about that.  That's a very common question from new Lisp
programmers, and I myself struggled with the concept for some time.  So
the reflex is to offer up documentation on the lisp package system ;-)

\start
Date: Tue, 6 Dec 2005 17:13:51 -0500
From: Bill Page
To: Tim Daly
Subject: Re: learning Lisp

On Tuesday, December 06, 2005 5:46 PM Tim Daly (root) wrote:

> ...
> > > src/interp/sys-pkg.lisp.pamphlet
>
> (make-package "SCRATCHPAD_COMPILER")     <--- SPAD obviously
>
>   the spad compiler package. although i believe this is a dead
>   package at this point. all of the symbols from this package
>   have been moved into the boot package.
> ...
>
> Bill Page wrote:
> > It would be nice to have a couple of sentences about each of
> > these packages.
>
> is that better? it is hard to guess the level of detail required.
> remember, i'm on the other end of a skinny pipe and the intent of
> the email may not be the meaning i derive from the message so a
> little guesswork and patience is necessary.
>

Yes! That is exactly what I was hoping for. I realize that email is
sometimes a "skinny pipe". I am willing to be patient and to explain
my question in a clearer manner ... without appearing annoyed. :)

At some point (soon now) I plan to "harvest" some of this exchange
for a summary page or two on the Axiom Wiki web site.

\start
Date: Tue, 6 Dec 2005 18:39:39 -0500
From: Tim Daly
To: Cliff Yapp
Subject: re: learning Lisp

the package system is conceptually simple:

each symbol gets read.
the symbol is looked up in a hash table (called "the current package")
if the symbol is not found 
  then it gets added to the hash table ("interned in the current package")
  else a new symbol is made an added to the hash table.

if a symbol has a package qualifier (something colon symbol as in BOOT:FOO)
then the same "intern" process occurs but we use a different hash table.

a lisp symbol has several parts (a struct):
    value 
    function value
    print name 
    property list
    package

notice that every symbol has a package which is a pointer to the hash
table that holds the symbol.   

so packages are just a fancy name for hash tables. 
they hold symbols and are used by the reader to match them.
they provide multiple name spaces so we can have
USER::FOO and BOOT::FOO at the same time. this is
useful if you are using functions from an old lisp
(like VMLisp) which has the same names as the current
lisp.

there are some standard packages. USER was a standard package
in common lisp version 1 (CLTL1) and common lisp version 2 (CLTL2)
but the great bozons in the sky could not resist renaming it to
COMMON-LISP-USER (which the abbrev CL-USER). this is one of the
changes axiom has to make to become ANSI.

another way to think about packages (implied by the name)
is that you stuff all your random symbols, say foo, into
your own package name (e.g. boot) and then you "export" some
(export '(foo)) as an API. then other packages can "import"
them using "use-package" which "interns" the "exported"
names (copies the hash table entries).

on page 268 Seibel recommends adopting the java convention of
reversing the domain name as in org.axiom-developer.mypackage
which is a horrible idea and he should be publicly flogged
for such a suggestion. but that's just my professional opinion :-)
the ANSI-2 spec will want gro.repoleved-moixa.mypackage. sigh.

\start
Date: Tue, 6 Dec 2005 18:41:05 -0500
From: Tim Daly
To: Cliff Yapp
Subject: re: learning Lisp

correction:

WRONG:

each symbol gets read.
the symbol is looked up in a hash table (called "the current package")
if the symbol is not found 
  then it gets added to the hash table ("interned in the current package")
  else a new symbol is made an added to the hash table.

RIGHT:

each symbol gets read.
the symbol is looked up in a hash table (called "the current package")
if the symbol is not found 
  then it gets added to the hash table ("interned in the current package")
  else the existing symbol from the hash table is used.

sigh.

\start
Date: Tue, 6 Dec 2005 23:42:08 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Axiom on MACOSX... gettext issue

I'm getting the message:

enable_machine=
Exactly one loader option must be chosen: dlopen=no statsysbfd=yes dynsysbfd=no locbfd=yes custreloc=no

on the macosx 10.4 build. suggestions?

\start
Date: Tue, 6 Dec 2005 23:20:19 -0500
From: Bill Page
To: Tim Daly
Subject: RE: Axiom on MACOSX... gettext issue
Cc: Camm Maguire

Tim,

On Tuesday, December 06, 2005 11:42 PM you wrote:
>
> I'm getting the message:
>
> enable_machine=
> Exactly one loader option must be chosen: dlopen=no
> statsysbfd=yes dynsysbfd=no locbfd=yes custreloc=no
>
> on the macosx 10.4 build. suggestions?
>

I am not sure if this will help, but I think you need the
following gcl ./configure options

--disable-statsysbfd --enable-locbfd

Ref:

http://www.cs.utexas.edu/users/moore/acl2/v2-9/installation.html

Or maybe

--disable-statsysbfd --disable-locbfd --enable-custreloc

Ref:

http://gcl.darwinports.com

\start
Date: Wed, 07 Dec 2005 01:10:40 -0600
From: MathAction (billpage)
To: MathAction
Subject: [SExpression] (new) 

This Axiom domain allows the manipulation of the usual Lisp values.

\begin{axiom}
)show SExpression
\end{axiom}

Reference:

http://en.wikipedia.org/wiki/S-expression --
An S-expression (S stands for symbolic) is a convention for
representing data structures in a text form. S-expressions are
most commonly used in the Lisp.

S-expressions are used for both code and data in Lisp.
(see McCarthy Recursive Functions of Symbolic Expressions at http://www-formal.stanford.edu/jmc/recursive/recursive.html).

S-expressions can either be single objects such as numbers,
LISP atoms including the special atoms nil and t, or cons pairs,
written as (x . y). Longer lists are made up of nested cons pairs,
for example (1 . (2 . (3 . nil))) which can also be written more
intelligibly as (1 2 3).

Program code can be written in S-expressions, using prefix notation.
The common expression (quote x) can be written with the abbreviation
'x.

Example in Common Lisp:
\begin{lisp}
(defun factorial (x)
   (if (zerop x) 1
       (* x (factorial (- x 1)))))
\end{lisp}

\begin{axiom}
integer(FACTORIAL(10)$Lisp)
\end{axiom}

\start
Date: Wed, 7 Dec 2005 05:14:16 -0500
From: Bill Page
To: William Sit
Subject: Re: learning Lisp

On Monday, December 05, 2005 9:45 PM I wrote:
> ...
> In order to illustrate "live" use of lisp on MathAction I think
> I need to invent a new enviroment like this:
>
> \begin{lisp}
> (defun foo (x y)
>   (+ x y))
> (foo 2 3)
> \end{lisp}
>
> The text between \begin{lisp} and \end{lisp} would be saved to
> a file called, e.g. 'section_n.lisp' and then executed with the
> command ')lisp (load section_n.lisp)'. This would allow Axiom
> interpreter commands, spad/aldor compiles and full multi-line
> lisp expressions to appear on the same web page.
>
> Comments?

I now have an experimental implementation of the use of lisp on
web pages on the Axiom Wiki. See:

http://wiki.axiom-developer.org/SandBoxLispInAxiom

Please try it and let me know what you think.

\start
Date: Wed, 07 Dec 2005 09:09:01 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomInterface] fdhg

\begin{axiom}
    solve([x*x + y*x - 2*(ax*x + ay*y) = l1, x*x + y*y - 2*(cx*x + cy*y) = l2], [x,y])
\end{axiom}

\start
Date: Wed, 7 Dec 2005 07:30:29 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: Lisp Packages and Axiom

--- Tim Daly wrote:

> another way to think about packages (implied by the name)
> is that you stuff all your random symbols, say foo, into
> your own package name (e.g. boot) and then you "export" some
> (export '(foo)) as an API. then other packages can "import"
> them using "use-package" which "interns" the "exported"
> names (copies the hash table entries

Back when we were discussing this in Maxima, one of my thoughts on this
issue was to associate lisp packages with mathematical "concepts"
(whatever that ment) in order to make it easier to map associations and
work on subsections of the program.  Maxima stuffed almost everything
into a MAXIMA package, and I was never really happy about that because
it made it difficult to say with certainty what impact any one change
might have.  Axiom is certainly better designed than Maxima so perhaps
my lisp package thought makes less sense here, but it still might make
it much easier to automatically "map" the system and how various parts
are related to each other - e.g. for a given symbol if it is internal a
mapping algorithm need only look within the one lisp package for
related components, not the whole program.  

What was your plan for the overall structure in this regard Tim?

\start
Date: Wed, 7 Dec 2005 13:55:25 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: Lisp Packages and Axiom

> What was your plan for the overall structure in this regard Tim?

as part of the rewrite the interpreter, compiler, browser, graphics,
numerics, and algebra will each be in their own packages which will
make them much easier to separate and maintain. at the moment they
follow the MAXIMA model where everything is in one giant package.

this was reasonable at the time. back when hard disks for DOS first
arrived there was no directory structure and a hard disk just looked
like one big directory. package names were introduced late in the
lifetime of lisp and most of the pre-package lisp systems were not
well separated. rather than re-org the code everything got dumped
into one package.

\start
Date: Wed, 7 Dec 2005 13:28:58 -0500
From: Bill Page
To: list
Subject: learning Boot (was: learning Lisp)

On Wednesday, December 07, 2005 5:14 AM I wrote:
> ...
> In order to illustrate "live" use of lisp on MathAction I think
> I need to invent a new environment like this:
>
> \begin{lisp}
> (defun foo (x y)
>   (+ x y))
> \end{lisp}
>
> I now have an experimental implementation of the use of lisp on
> web pages on the Axiom Wiki. See:
>
> http://wiki.axiom-developer.org/SandBoxLispInAxiom
>

I have just finished adding the Boot language to MathAction.
You can now write for example:

\begin{boot}
foobar(x,y) == x + y
\end{boot}

And call it with:

\begin{axiom}
integer(foobar(2,3)$Lisp)
\end{axiom}

For another simple example see:

http://wiki.axiom-developer.org/SandBoxBootProgramming

Please try it and let me know what you think.

So now on MathAction we have the following 5 pseudo-environments
for Axiom:

\begin{axiom}
  Axiom commands
\end{axiom}

\begin{aldor}
  Aldor library code
\end{aldor}

\begin{spad}
  Spad library code
\end{spad}

\begin{boot}
  Boot functions
\end{boot}

\begin{lisp}
  Lisp functions
\end{lisp}

I think this completes all of the web interfaces to Axiom
that are necessary for Axiom users {axiom}, Axiom library
programmers {spad, aldor} and Axiom developers {boot, lisp}.
With these tools it should be possible to do a lot of Axiom
debugging and development collaboratively over the web.

And we also have support for Reduce:

\begin{reduce}
Reduce commands
\end{reduce}

and for LaTeX with GraphViz for layout of diagrams:

\begin{latex}
GraphViz commands
\end{latex}

So where do we go from here?

Personally I think I now need to shift from web application
development to something more interesting! I plan to continue
to document Boot, as promised a few weeks ago and to complete
the documentation for MathAction itself, but besides that I
would really like to get back to using Axiom as a *user* again.
So that's my pledge for the coming new year. :)

\start
Date: 07 Dec 2005 19:47:21 +0100
From: Martin Rubey
To: Cliff Yapp
Subject: Re: Lisp Packages and Axiom

Dear Lispers,

I'd just would like to drop a note that in any case the Algebra should
stay/become as disconnected from Lisp as possible (and sensible).

I admit that there are some functions for which it is sensible indeed to use
the lisp functionaly, for example the representation of integers and the
like. But it should not become much more than that.

Note that the longer term goal should be to replace Spad by Aldor, and it would
be truly great if any given part of the Algebra would work just as well in the
Aldor world. Introducing more Lisp at the Algebra level would definitively be
counterproductive to this goal.

The issue might be different for the interpreter, although I doubt it.

Please don't misread this mail to imply that I'm against Lisp as the
implementation language of interpreter, compiler and environment. On the
contrary! It is *only* about the algebra level. 

A very different point is to write functionality enabling the use of existing
lisp / c / phython / whatever code as packages in Axiom, just as I did for
polymake.

\start
Date: Wed, 7 Dec 2005 11:44:14 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: Re: Lisp Packages and Axiom

--- Tim Daly wrote:

> > What was your plan for the overall structure in this regard 
> > Tim?
> 
> as part of the rewrite the interpreter, compiler, browser, 
> graphics, numerics, and algebra will each be in their own 
> packages which will make them much easier to separate and 
> maintain. 

Yay!

> at the moment they follow the MAXIMA model where everything 
> is in one giant package.

Figured.
 
> this was reasonable at the time. back when hard disks for DOS
> first arrived there was no directory structure and a hard disk
> just looked like one big directory. package names were 
> introduced late in the lifetime of lisp and most of the pre-
> package lisp systems were not well separated. rather than re-
> org the code everything got dumped into one package.

This is just a suggestion, but perhaps it would make sense at some
point to subdivide the algebra code somewhat?  From a more "end user"
perspective, perhaps physics related code could be separate from
chemistry related code?  Or (maybe) integration could be in a package,
and matrix handling in another, and floating point code in still
another?  (I imagine this would have to be expressed in Aldor/Spad as
well.)  I don't know if that could be done - maybe as part of mapping
the inter-relatedness of symbolic mathematics?

\start
Date: Wed, 7 Dec 2005 15:46:07 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: Lisp Packages and Axiom

splitting the algebra in some rational structure has nothing to do
with the lisp-level packages. the "algebra" package would simply be
a collection of the lisp-level functions on which the algebra depends.
it might make a good target to reproduce in aldor. but the lisp package
level is the wrong place to segment the algebra.

bill and i (long ago) had an ongoing discussion of the problem of
organizing the algebra but it's hard on so many levels.

\start
Date: Wed, 7 Dec 2005 12:04:05 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Autocomplete?

Has anyone looked at incorporating autocomplete into Axiom, maybe using
something like http://common-lisp.net/project/linedit/  (linedit uses
UFFI so it's not an all lisp solution, but perhaps it could be used as
a starting point for an all lisp solution?)

I don't know if autocomplete is possible for something like Axiom, but
it would be a neat feature to offer.

=====================================================================
\documentclass{article}
\usepackage{axiom}
\usepackage{makeidx}
\makeindex
\begin{document}
\title{The Wester Problem Set}
\author{Timothy Daly}
\maketitle
\begin{abstract}
\end{abstract}
\eject
\tableofcontents
\eject

\section{Boolean Logic and Quantifier Elimination}
\begin{verbatim}
-- Simplify logical expressions => false
true and false
 

   (1)  false
                                                                Type: Boolean
                                       Time: 0.03 (OT) + 0.02 (GC) = 0.05 sec
-- => true
x or (not x)
 
 
   Argument number 1 to "or" must be a Boolean.
x : Boolean
 
                                                                   Type: Void
                                                                  Time: 0 sec
x or (not x)
 
 
   x is declared as being in Boolean but has not been given a value.
-- => x or y
y : Boolean
 
                                                                   Type: Void
                                                                  Time: 0 sec
x or y or (x and y)
 
 
   x is declared as being in Boolean but has not been given a value.
-- => x
xor(xor(x, y), y)
 
 
   x is declared as being in Boolean but has not been given a value.
-- => [not (w and x)] or (y and z)
w : Boolean
 
                                                                   Type: Void
                                                                  Time: 0 sec
z : Boolean
 
                                                                   Type: Void
                                                                  Time: 0 sec
implies(w and x, y and z)
 
 
   w is declared as being in Boolean but has not been given a value.
-- => (x and y) or [not (x or y)]
--x iff y
-- => false
x and 1 > 2
 
 
   x is declared as being in Boolean but has not been given a value.
)clear properties w x y z
 
-- Quantifier elimination: See Richard Liska and Stanly Steinberg, ``Using
-- Computer Algebra to Test Stability'', draft of September 25, 1995, and
-- Hoon Hong, Richard Liska and Stanly Steinberg, ``Testing Stability by
-- Quantifier Elimination'', _Journal of Symbolic Computation_, Volume 24,
-- 1997, 161--187.
-- => (a > 0 and b > 0 and c > 0) or (a < 0 and b < 0 and c < 0)
--    [Hong, Liska and Steinberg, p. 169]
--forAll y in C {implies(a*y**2 + b*y + c = 0, real(y) < 0)}
-- => v > 1   [Liska and Steinberg, p. 24]
--thereExists w in R suchThat _
--{v > 0 and w > 0 and -5*v**2 - 13*v + v*w - w > 0}
-- => a^2 <= 1/2   [Hoon, Liska and Steinberg, p. 174]
--forAll c in R _
--{implies(-1 <= c <= 1, a**2*(-c**4 - 2*c**3 + 2*c + 1) + c**2 + 2*c + 1 <= 4)}
-- => v > 0 and w > |W|   [Liska and Steinberg, p. 22]
--forAll y in C _
--{implies(v > 0 and y**4 + 4*v*w*y**3 + 2*(2*v**2*w**2 + w**2 + W**2)*y**2 _
--   + 4*v*w*(w**2 - W**2) _
--   + (w**2 - W**2)**2 = 0, real(y) < 0)}
-- This quantifier free problem was derived from the above example by QEPCAD
-- => v > 0 and w > |W|   [Liska and Steinberg, p. 22]
v > 0 and 4*w*v > 0 and 4*w*(4*w**2*v**2 + 3*W**2 + w**2) > 0 _
   and 64*w**2*v**2*(w**2 - W**2)*(w**2*v**2 + W**2) > 0 _
   and 64*w**2*v**2*(w**2 - W**2)**3*(w**2*v**2 + W**2) > 0
 

   (6)  true
                                                                Type: Boolean
               Time: 0.40 (IN) + 0.05 (EV) + 0.08 (OT) + 0.03 (GC) = 0.57 sec
-- => B < 0 and a b > 0   [Liska and Steinberg, p. 49 (equation 86)]
--thereExists y in C, thereExists n in C, thereExists e in R suchThat _
--{real(y) > 0 and real(n) < 0 and y + A*%i*e - B*n = 0 and a*n + b = 0}
-- ---------- Quit ----------
)quit
 

real   3.1
user   1.4
sys    0.2
\end{verbatim}
\section{Set Theory}
\begin{verbatim}
 
-- ---------- Set Theory ----------
x:= set [a, b, b, c, c, c];
 

                                        Type: Set OrderedVariableList [a,b,c]
               Time: 0.03 (IN) + 0.05 (EV) + 0.08 (OT) + 0.07 (GC) = 0.23 sec
y:= set [d, c, b];
 

                                        Type: Set OrderedVariableList [d,c,b]
                                                   Time: 0.02 (IN) = 0.02 sec
z:= set [b, e, b];
 

                                          Type: Set OrderedVariableList [b,e]
                                                   Time: 0.02 (EV) = 0.02 sec
-- [x \/ y \/ z, x /\ y /\ z] => [{a, b, c, d, e}, {b}]
[union(union(x, y), z), intersect(intersect(x, y), z)]
 

   (4)  [{a,b,c,d,e},{b}]
                                                        Type: List Set Symbol
                                       Time: 1.20 (IN) + 0.20 (OT) = 1.40 sec
-- x \/ y \/ z - x /\ y /\ z => {a, c, d, e}
difference(%.1, %.2)
 

   (5)  {a,c,d,e}
                                                             Type: Set Symbol
                                       Time: 0.02 (IN) + 0.02 (EV) = 0.03 sec
)clear properties x y z
 
-- Cartesian product of sets => {(a, c), (a, d), (b, c), (b, d)}
Cartesian(A, B) == _
   set reduce(append, [[[A.i, B.j] for j in 1..#B] for i in 1..#A])
 
                                                                   Type: Void
                                                                  Time: 0 sec
Cartesian([a, b], [c, d])
 
   Compiling function Cartesian with type (List OrderedVariableList [a,
      b],List OrderedVariableList [c,d]) -> Set List Symbol 

   (7)  {[a,c],[a,d],[b,c],[b,d]}
                                                        Type: Set List Symbol
                                       Time: 0.12 (IN) + 0.08 (OT) = 0.20 sec
-- ---------- Quit ----------
)quit
 

real   8.4
user   2.7
sys    0.3
\end{verbatim}
\section{Numbers}
\begin{verbatim}

 
-- ---------- Numbers ----------
-- Let's begin by playing with numbers: infinite precision integers
-- => 30414 0932017133 7804361260 8166064768 8443776415 6896051200 0000000000
factorial(50)
 

   (1)  30414093201713378043612608166064768844377641568960512000000000000
                                                        Type: PositiveInteger
                           Time: 0.03 (EV) + 0.02 (OT) + 0.03 (GC) = 0.08 sec
-- => 2^47 3^22 5^12 7^8 11^4 13^3 17^2 19^2 23^2 29 31 37 41 43 47
factor(%)
 

         47 22 12 8  4  3  2  2  2
   (2)  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47
                                                       Type: Factored Integer
                                       Time: 0.03 (EV) + 0.05 (OT) = 0.08 sec
-- Double factorial => 10!! = 10*8*6*4*2 = 3840, 9!! = 9*7*5*3*1 = 945
--[10!!, 9!!]
-- ABC base 16 => 2748 base 10
abc
 

   (3)  abc
                                                           Type: Variable abc
                                                                  Time: 0 sec
-- 123 base 10 => 234 base 7
radix(123, 7)
 

   (4)  234
                                                       Type: RadixExpansion 7
               Time: 0.02 (IN) + 0.02 (EV) + 0.03 (OT) + 0.02 (GC) = 0.08 sec
-- 677 base 8 => 1BF base 16
radix(447, 16)
 

   (5)  1BF
                                                      Type: RadixExpansion 16
                                       Time: 0.02 (EV) + 0.03 (OT) = 0.05 sec
-- [log base 8](32768) => 5
log(32768)/log(8)
 

        log(32768)
   (6)  ----------
          log(8)
                                                     Type: Expression Integer
               Time: 0.03 (IN) + 0.33 (EV) + 0.12 (OT) + 0.12 (GC) = 0.60 sec
-- 5^(-1) mod 7 => 3;   5^(-1) mod 6 => 5
(5 :: PrimeField 7)**(-1)
 

   (7)  3
                                                           Type: PrimeField 7
                                       Time: 0.03 (IN) + 0.03 (OT) = 0.07 sec
recip(5 :: PrimeField(7))
 

   (8)  3
                                                Type: Union(PrimeField 7,...)
                                                   Time: 0.02 (OT) = 0.02 sec
invmod(5, 7)
 

   (9)  3
                                                        Type: PositiveInteger
                                                                  Time: 0 sec
(5 :: IntegerMod 6)**(-1)
 
   Compiling function G82136 with type Integer -> Boolean 
   There are 20 exposed and 17 unexposed library operations named ** 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op **
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named ** 
      with argument type(s) 
                                IntegerMod 6
                                   Integer
      
recip(5 :: IntegerMod 6)
 

   (10)  5
                                                Type: Union(IntegerMod 6,...)
                                                   Time: 0.02 (EV) = 0.02 sec
invmod(5, 6)
 

   (11)  5
                                                        Type: PositiveInteger
                                                                  Time: 0 sec
-- Greatest common divisor => 74
reduce(gcd, [1776, 1554, 5698])
 

   (12)  74
                                                        Type: PositiveInteger
                                                   Time: 0.03 (OT) = 0.03 sec
-- Infinite precision rational numbers => 4861/2520
1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10
 

         4861
   (13)  ----
         2520
                                                       Type: Fraction Integer
                                                   Time: 0.05 (IN) = 0.05 sec
-- Complete decimal expansion of a rational number => 0.142857 ...
decimal(1/7)
 

           ______
   (14)  0.142857
                                                       Type: DecimalExpansion
                                       Time: 0.02 (IN) + 0.02 (EV) = 0.03 sec
-- Multiply two complete decimal expansions and produce an exact result => 2
decimal(7/11) * decimal(22/7)
 

   (15)  2
                                                       Type: DecimalExpansion
                                                   Time: 0.02 (IN) = 0.02 sec
-- This number should immediately simplify to 3^(1/3)
10/7 * (1 + 29/1000)**(1/3)
 

         3+-+
   (16)  \|3
                                                        Type: AlgebraicNumber
                           Time: 0.20 (IN) + 0.02 (EV) + 0.02 (OT) = 0.23 sec
-- Simplify an expression with nested square roots => 1 + sqrt(3)
sqrt(2*sqrt(3) + 4)
 

          +---------+
          |  +-+
   (17)  \|2\|3  + 4
                                                        Type: AlgebraicNumber
                           Time: 0.03 (IN) + 0.02 (EV) + 0.05 (OT) = 0.10 sec
simplify(%)
 

          +---------+
          |  +-+
   (18)  \|2\|3  + 4
                                                     Type: Expression Integer
                                       Time: 0.10 (EV) + 0.02 (OT) = 0.12 sec
-- Try a more complicated example (from the Putnam exam) => 3 + sqrt(2)
sqrt(14 + 3*sqrt(3 + 2*sqrt(5 - 12*sqrt(3 - 2*sqrt(2)))))
 

          +---------------------------------------+
          |  +------------------------------+
          |  |  +----------------------+
          |  |  |     +-----------+
          |  |  |     |    +-+
   (19)  \|3\|2\|- 12\|- 2\|2  + 3  + 5  + 3  + 14
                                                        Type: AlgebraicNumber
                                       Time: 0.05 (IN) + 0.03 (OT) = 0.08 sec
-- See D.J. Jeffrey and A.D. Rich, ``The nesting habits of radicals'', draft of
-- 1998 => sqrt(2) + sqrt(3) + sqrt(5)
sqrt(10 + 2*sqrt(6) + 2*sqrt(10) + 2*sqrt(15))
 

          +----------------------------+
          |  +--+     +--+     +-+
   (20)  \|2\|15  + 2\|10  + 2\|6  + 10
                                                        Type: AlgebraicNumber
                           Time: 0.05 (IN) + 0.02 (EV) + 0.02 (OT) = 0.08 sec
-- Rationalize the denominator => 5 + 2 sqrt(6)
(sqrt(3) + sqrt(2))/(sqrt(3) - sqrt(2))
 

           +-+ +-+
   (21)  2\|2 \|3  + 5
                                                        Type: AlgebraicNumber
                           Time: 0.03 (IN) + 0.22 (EV) + 0.02 (OT) = 0.27 sec
-- A factorization of 3 in the integers extended by sqrt(-5)
sqrt(-2 + sqrt(-5)) * sqrt(-2 - sqrt(-5))
 

          +------------+ +----------+
          |   +---+      | +---+
   (22)  \|- \|- 5  - 2 \|\|- 5  - 2
                                                        Type: AlgebraicNumber
                           Time: 0.02 (IN) + 0.02 (EV) + 0.02 (OT) = 0.05 sec
-- => 3 + sqrt(7)   [Jeffrey and Rich]
(90 + 34*sqrt(7))^(1/3)
 

          +-----------+
         3|   +-+
   (23)  \|34\|7  + 90
                                                        Type: AlgebraicNumber
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
-- This is a nontrivial way of writing 12 !
((135 + 78*sqrt(3))**(2/3) + 3)*sqrt(3)/(135 + 78*sqrt(3))**(1/3)
 

                         +------------+2        +------------+
               +-+      3|   +-+            +-+3|   +-+
   (24)  (- 15\|3  + 26)\|78\|3  + 135   + \|3 \|78\|3  + 135
                                                        Type: AlgebraicNumber
                           Time: 0.05 (IN) + 0.07 (EV) + 0.02 (OT) = 0.13 sec
% :: Float
 

   (25)  11.9999999999 99999998
                                                                  Type: Float
                                       Time: 0.17 (IN) + 0.03 (OT) = 0.20 sec
-- See David Jeffrey, ``Current Problems in Computer Algebra Systems'', talk
-- => 1 + sqrt(2)
(49 + 21*sqrt(2))^(1/5)
 

          +-----------+
         5|   +-+
   (26)  \|21\|2  + 49
                                                        Type: AlgebraicNumber
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
-- A nasty example generated by Axiom => [log(sqrt(2) + 1) + sqrt(2)]/3
q:= ((6 - 4*sqrt(2))*log(3 - 2*sqrt(2)) + (3 - 2*sqrt(2))*log(17 - 12*sqrt(2)) _
     + 32 - 24*sqrt(2)) / (48*sqrt(2) - 72)
 

   (27)
        +-+             +-+             +-+              +-+            +-+
   (- 4\|2  + 6)log(- 2\|2  + 3) + (- 2\|2  + 3)log(- 12\|2  + 17) - 24\|2  + 32
   -----------------------------------------------------------------------------
                                       +-+
                                    48\|2  - 72
                                                     Type: Expression Integer
                           Time: 0.43 (IN) + 0.05 (EV) + 0.07 (OT) = 0.55 sec
q :: Float
 
 
   Cannot convert from type Expression Integer to Float for value
        +-+             +-+             +-+              +-+            +-+
   (- 4\|2  + 6)log(- 2\|2  + 3) + (- 2\|2  + 3)log(- 12\|2  + 17) - 24\|2  + 32
   -----------------------------------------------------------------------------
                                       +-+
                                    48\|2  - 72

q :: Complex Float
 

   (28)  0.7651957164 6421269157
                                                          Type: Complex Float
                                       Time: 0.25 (IN) + 0.03 (GC) = 0.28 sec
(log(sqrt(2) + 1) + sqrt(2))/3 :: Float
 

   (29)  0.7651957164 6421269135
                                                       Type: Expression Float
                                       Time: 0.35 (IN) + 0.05 (OT) = 0.40 sec
)clear properties q
 
-- Cardinal numbers => infinity
2*Aleph(0) - 3
 

   (30)  Aleph(0)
                                              Type: Union(CardinalNumber,...)
                                                   Time: 0.13 (IN) = 0.13 sec
-- 2^aleph_0 => aleph_1
2**Aleph(0)
 
 
   >> Error detected within library code:
   Transfinite exponentiation only implemented under GCH

initial (31) -> 
real   12.4
user   5.8
sys    0.4
\end{verbatim}
\section{Numerical Analysis}
\begin{verbatim}
 
-- ---------- Numerical Analysis ----------
-- This number should immediately simplify to 0.0
0.0/sqrt(2)
 

   (1)  0.0
                                                       Type: Expression Float
                Time: 0.40 (IN) + 0.20 (EV) + 0.22 (OT) + 0.18 (GC) = 1.0 sec
-- This number normally produces an underflow => 3.29683e-434295
exp(-1000000.0)
 

   (2)  0.3296831478 088558579 E -434294
                                                                  Type: Float
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
-- Arbitrary precision floating point numbers
digits(50);
 

                                                        Type: PositiveInteger
                                                   Time: 0.02 (IN) = 0.02 sec
-- This number is nearly an integer:
-- 26253741 2640768743.9999999999 9925007259 7198185688 ...
exp(sqrt(163.)*%pi)
 

   (4)  26253741 2640768743.9999999999 9925007259 7198185688 9
                                                                  Type: Float
                           Time: 0.20 (IN) + 0.03 (OT) + 0.03 (GC) = 0.27 sec
digits(20);
 

                                                        Type: PositiveInteger
                                                                  Time: 0 sec
-- => [-2, -1]
[floor(-5/3), ceiling(-5/3)]
 

   (6)  [- 2,- 1]
                                                           Type: List Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
-- Generate a cubic natural spline s from x = [1, 2, 4, 5] and y = [1, 4, 2, 3]
-- and then compute s(3) => 27/8
[[1, 2, 4, 5], [1, 4, 2, 3]]
 

   (7)  [[1,2,4,5],[1,4,2,3]]
                                              Type: List List PositiveInteger
                                                   Time: 0.02 (OT) = 0.02 sec
-- Translation
a:= operator('a);
 

                                                          Type: BasicOperator
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
p:= sum(a(i)*x**i, i = 1..n)
 

         n
        --+        i
   (9)  >     a(i)x
        --+
        i= 1
                                                     Type: Expression Integer
               Time: 0.77 (IN) + 0.68 (EV) + 0.15 (OT) + 0.07 (GC) = 1.67 sec
-- Convert into FORTRAN syntax
outputAsFortran('p = p)
 
 
   >> Fortran translation error:
   No corresponding Fortran structure for:

    n
   --+        i
   >     a(i)x
   --+
   i= 1
                                                                   Type: Void
                           Time: 0.27 (IN) + 0.03 (EV) + 0.05 (OT) = 0.35 sec
-- Convert into C syntax
-- Horner's rule---this is important for numerical algorithms
-- => (a[1] + (a[2] + (a[3] + (a[4] + a[5] x) x) x) x) x
p:= sum(a(i)*x**i, i = 1..5)
 

              5        4        3        2
   (11)  a(5)x  + a(4)x  + a(3)x  + a(2)x  + a(1)x
                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 0.22 (EV) + 0.03 (OT) = 0.32 sec
factor(p)
 

              5        4        3        2
   (12)  a(5)x  + a(4)x  + a(3)x  + a(2)x  + a(1)x
                                            Type: Factored Expression Integer
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
p:= p :: MPOLY([x], Expression Integer)
 

              5        4        3        2
   (13)  a(5)x  + a(4)x  + a(3)x  + a(2)x  + a(1)x
                         Type: MultivariatePolynomial([x],Expression Integer)
                           Time: 0.07 (IN) + 0.03 (OT) + 0.02 (GC) = 0.12 sec
p:= factor(p)
 
   WARNING (genufact): No known algorithm to factor
      4   a(4)  3   a(3)  2   a(2)     a(1)
     ?  + ---- ?  + ---- ?  + ---- ? + ----, trying square-free.
          a(5)      a(5)      a(5)     a(5)

                4   a(4)  3   a(3)  2   a(2)     a(1)
   (14)  a(5)x(x  + ---- x  + ---- x  + ---- x + ----)
                    a(5)      a(5)      a(5)     a(5)
                Type: Factored MultivariatePolynomial([x],Expression Integer)
               Time: 0.08 (IN) + 0.32 (EV) + 0.02 (OT) + 0.05 (GC) = 0.47 sec
-- Convert the result into FORTRAN syntax
-- => p = (a(1) + (a(2) + (a(3) + (a(4) + a(5)*x)*x)*x)*x)*x
)set fortran ints2floats off
 
outputAsFortran('p = p)
 
      p=a(5)*x*(x**4+(a(4)/a(5))*x**3+(a(3)/a(5))*x*x+(a(2)/a(5))*x+a(1)
     &/a(5))
                                                                   Type: Void
                           Time: 0.48 (IN) + 0.03 (EV) + 0.12 (OT) = 0.63 sec
)clear properties a p
 
-- Convert the result into C syntax
-- => p = (a[1] + (a[2] + (a[3] + (a[4] + a[5]*x)*x)*x)*x)*x ;
-- Count the number of (floating point) operations needed to compute an
-- expression => {[+, n - 1], [*, (n^2 - n)/2], [f, (n^2 + n)/2]}
f:= operator('f);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
sum(product(f(i, k), i = 1..k), k = 1..n)
 

          n      k
         --+   ++-++
   (17)  >      | |   f(i,i)
         --+    | |
         k= 1  i= 1
                                                     Type: Expression Integer
                           Time: 0.13 (IN) + 0.10 (EV) + 0.05 (OT) = 0.28 sec
-- Interval analysis (interval polynomial example):
-- ([-4, 2] x + [1, 3])^2 => [-8, 16] x^2 + [-24, 12] x + [1, 9]
-- Discretize a PDE: for example, forward differencing time (explicit Euler)
-- and central differencing x on the heat equation =>
-- (f[i, j+1] - f[i, j])/dt = (f[i+1, j] - 2 f[i, j] + f[i-1, j])/dx^2
D(f(x, t), t) = D(f(x, t), x, 2)
 

   (18)  f  (x,t)= f    (x,t)
          ,2        ,1,1
                                            Type: Equation Expression Integer
                           Time: 0.08 (IN) + 0.07 (EV) + 0.03 (OT) = 0.18 sec
)clear properties f
 
-- ---------- Quit ----------
)quit
 

real   7.1
user   6.2
sys    0.4
\end{verbatim}
\section{Statistics}
\begin{verbatim}
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Statistics ----------
-- Compute the mean of a list of numbers => 9
mean(lst) == reduce(+, lst)/#lst
 
                                                                   Type: Void
                                                                  Time: 0 sec
mean([3, 7, 11, 5, 19])
 
   Compiling function mean with type List PositiveInteger -> Fraction 
      Integer 

   (2)  9
                                                       Type: Fraction Integer
                           Time: 0.08 (IN) + 0.02 (OT) + 0.02 (GC) = 0.12 sec
-- Compute the median of a list of numbers => 7
[3, 7, 11, 5, 19]
 

   (3)  [3,7,11,5,19]
                                                   Type: List PositiveInteger
                                                   Time: 0.02 (OT) = 0.02 sec
-- Compute the first quartile (25% quantile) of a list of numbers => 2 or 5/2
xx:= [1, 2, 3, 4, 5, 6, 7, 8];
 

                                                   Type: List PositiveInteger
                                                                  Time: 0 sec
--quartiles(xx, 1)
--quantile(xx, 1/4)
)clear properties xx
 
-- Compute the mode (the most frequent item) of  a list of numbers => 7
[3, 7, 11, 7, 3, 5, 7]
 

   (5)  [3,7,11,7,3,5,7]
                                                   Type: List PositiveInteger
                                                   Time: 0.02 (IN) = 0.02 sec
-- Compute the unbiased sample standard deviation of a list of numbers
-- => sqrt(5/2)
[1, 2, 3, 4, 5]
 

   (6)  [1,2,3,4,5]
                                                   Type: List PositiveInteger
                                                                  Time: 0 sec
-- Discrete distributions---what is the probability of finding exactly 12
-- switches that work from a group of 15 where the probability of a single one
-- working is 75%?  (Need to use the probability density function [PDF] of the
-- binomial distribution.) => 0.22520
--PDF(BinomialDistribution(15, .75), 12)
-- Replace `exactly' by `up through' in the above.  (Need to use the cumulative
-- probability density function [CDF] of the binomial distribution.) => 0.76391
--CDF(BinomialDistribution(15, .75), 12)
-- Continuous distributions---if a radiation emission can be modeled by a
-- normal distribution with a mean of 4.35 mrem and a standard deviation of
-- 0.59 mrem, what is the probability of being exposed to anywhere from 4 to 5
-- mrem? => .5867
--CDF(Normal(4.35, 0.59), 5) - CDF(Normal(4.35, 0.59), 4)
-- Hypothesis testing---how good of a guess is 5 for the mean of xx? */
xx:= [1, -2, 3, -4, 5, -6, 7, -8, 9, 10];
 

                                                           Type: List Integer
                                                                  Time: 0 sec
-- Using Student's T distribution (preferred) => 0.057567
--students_t_distrib((sample_mean(xx) - 5)/(sample_standard_deviation(xx) /
--                                          sqrt(length(xx))), length(xx) - 1)
--% :: Float
-- Using the normal distribution (as an alternative) => 0.040583
--standard_normal_distrib((sample_mean(xx) - 5)/(sample_standard_deviation(xx) /
--                                               sqrt(length(xx))))
--% :: Float
)clear properties xx
 
-- Chi-square test---what is the expectation that row characteristics are
-- independent of column characteristics for a two dimensional array of data?
-- => 0.469859   (chi2 = 1153/252)
x:= matrix([[41, 27, 22], [79, 53, 78]]);
 

                                                         Type: Matrix Integer
                           Time: 0.02 (IN) + 0.02 (EV) + 0.02 (OT) = 0.05 sec
m:= nrows(x);
 

                                                        Type: PositiveInteger
                                                                  Time: 0 sec
n:= ncols(x);
 

                                                        Type: PositiveInteger
                                                                  Time: 0 sec
rowSum:= [reduce(+, row(x, i)) for i in 1..m];
 

                                                           Type: List Integer
                                                   Time: 0.03 (IN) = 0.03 sec
colSum:= [reduce(+, column(x, j)) for j in 1..n];
 

                                                           Type: List Integer
                                                   Time: 0.02 (IN) = 0.02 sec
matSum:= reduce(+, rowSum);
 

                                                        Type: PositiveInteger
                                                   Time: 0.02 (IN) = 0.02 sec
e : ARRAY2 Fraction Integer := new(m, n, 0);
 

                                   Type: TwoDimensionalArray Fraction Integer
                                                   Time: 0.02 (IN) = 0.02 sec
for i in 1..m repeat for j in 1..n repeat e(i, j):= rowSum(i)*colSum(j)/matSum;
 
                                                                   Type: Void
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
for i in 1..m repeat for j in 1..n repeat _
   e(i, j):= (x(i, j) - e(i, j))**2/e(i, j);
 
                                                                   Type: Void
               Time: 0.03 (IN) + 0.02 (EV) + 0.03 (OT) + 0.02 (GC) = 0.10 sec
-- chi2:= sum(sum((x(i, j) - e(i, j))**2/e(i, j), i = 1..m), j = 1..n)
chi2:= reduce(+, [reduce(+, row(e, i)) for i in 1..m])
 

         1153
   (17)  ----
          252
                                                       Type: Fraction Integer
                                                   Time: 0.03 (IN) = 0.03 sec
--ChiSquarePValue(chi2, m*n - 1)
-- or
--1 - CDF(ChiSquareDistribution(m*n - 1), chi2)
)clear properties chi2 colSum matSum rowSum e m n x
 
-- Linear regression (age as a function of developmental score).  See Lambert
-- H. Koopmans, _Introduction to Contemporary Statistical Methods_, Second
-- Edition, Duxbury Press, 1987, p. 459 => y' = 0.7365 x + 6.964
t:= [[3.33, 3.25, 3.92, 3.50,  4.33,  4.92,  6.08,  7.42,  8.33,  8.00,  9.25, _
       10.75], _
     [8.61, 9.40, 9.86, 9.91, 10.53, 10.61, 10.59, 13.28, 12.76, 13.44, 14.27, _
       14.13]];
 

                                                        Type: List List Float
                           Time: 0.10 (IN) + 0.03 (OT) + 0.02 (GC) = 0.15 sec
--fit(transpose(%), [1, x], x)
)clear properties t
 
-- Multiple linear regression (income as a function of age and years of
-- college) => y = -16278.7 + 960.925 x1 + 2975.66 x2
[[37, 45, 38, 42, 31], [4, 0, 5, 2, 4], [31200, 26800, 35000, 30300, 25400]];
 

                                           Type: List List NonNegativeInteger
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
--fit(transpose(%), [1, x1, x2], [x1, x2])
-- Multiple linear regression using the L1 or Least Absolute Deviations
-- technique rather than the Least Squares technique (minimizing the sum of the
-- absolute values of the residuals rather than the sum of the squares of the
-- residuals).  Here, the Stack-loss Data is used (percentage of ammonia lost
-- times 10 from the operation of a plant over 21 days as a function of air
-- flow to the plant, cooling water inlet temperature and acid concentration).
-- See W. N. Venables and B. D. Ripley, _Modern Applied Statistics with
-- S-plus_, Springer, 1994, p. 218.
-- => y = 0.83188 x1 + 0.57391 x2 - 0.06086 x3 - 39.68984
[[80, 80, 75, 62, 62, 62, 62, 62, 58, 58, 58, 58, 58, 58, 50, 50, 50, 50, 50, _
  56, 70], _
 [27, 27, 25, 24, 22, 23, 24, 24, 23, 18, 18, 17, 18, 19, 18, 18, 19, 19, 20, _
  20, 20], _
 [89, 88, 90, 87, 87, 87, 93, 93, 87, 80, 89, 88, 82, 93, 89, 86, 72, 79, 80, _
  82, 91], _
 [42, 37, 37, 28, 18, 18, 19, 20, 15, 14, 14, 13, 11, 12,  8,  7,  8,  8,  9, _
  15, 15]];
 

                                              Type: List List PositiveInteger
                                                   Time: 0.02 (IN) = 0.02 sec
--fit(transpose(%), [1, x1, x2, x3], [x1, x2, x3])
-- Nonlinear regression (Weight Loss Data from an Obese Patient consisting of
-- the time in days and the weight in kilograms of a patient undergoing a
-- weight rehabilitation program).  Fit this using least squares to weight =
-- b0 + b1 2^(- days/th), starting at (b0, b1, th) = (90, 95, 120)   [Venables
-- and Ripley, p. 225] => weight = 81.37375 + 102.6842 2^(- days/141.9105)
[[  0,   4,   7,   7,  11,  18,  24,  30,  32,  43,  46,  60,  64,  70,  71, _
   71,  73,  74,  84,  88,  95, 102, 106, 109, 115, 122, 133, 137, 140, 143, _
  147, 148, 149, 150, 153, 156, 161, 164, 165, 165, 170, 176, 179, 198, 214, _
  218, 221, 225, 233, 238, 241, 246], _
 [184.35, 182.51, 180.45, 179.91, 177.91, 175.81, 173.11, 170.06, 169.31, _
  165.10, 163.11, 158.30, 155.80, 154.31, 153.86, 154.20, 152.20, 152.80, _
  150.30, 147.80, 146.10, 145.60, 142.50, 142.30, 139.40, 137.90, 133.70, _
  133.70, 133.30, 131.20, 133.00, 132.20, 130.80, 131.30, 129.00, 127.90, _
  126.90, 127.70, 129.50, 128.40, 125.40, 124.90, 124.90, 118.20, 118.20, _
  115.30, 115.70, 116.00, 115.50, 112.60, 114.00, 112.60]];
 

                                                        Type: List List Float
                                       Time: 0.30 (IN) + 0.03 (OT) = 0.33 sec
-- ---------- Quit ----------
)quit
 

real   15.0
user   2.4
sys    0.3
\end{verbatim}
\section{Combinatorial Theory}
\begin{verbatim}
 
-- ---------- Combinatorial Theory ----------
-- Pochhammer symbol (a)_n = a (a + 1) ... (a + n - 1) => a (a + 1) (a + 2)
--pochhammer(a, 3)
-- Binomial coefficient => n (n - 1) (n - 2)/6
binomial(n, 3)
 

         n
   (1)  ( )
         3
                                                     Type: Expression Integer
               Time: 0.27 (IN) + 0.12 (EV) + 0.20 (OT) + 0.12 (GC) = 0.70 sec
factorFraction(normalize(%) :: Fraction Polynomial Integer)
 

        (n - 2)(n - 1)n
   (2)  ---------------
               6
                                   Type: Fraction Factored Polynomial Integer
               Time: 0.12 (IN) + 0.38 (EV) + 0.25 (OT) + 0.07 (GC) = 0.82 sec
-- 2^n n! (2 n - 1)!! => (2 n)!
--2**n * factorial(n) * (2*n - 1)!!
-- 2^n n! product(2 k - 1, k = 1..n) => (2 n)!
2**n * factorial(n) * product(2*k - 1, k = 1..n)
 

              n
           n++-++
   (3)  n!2  | |   2k - 1
             | |
            k= 1
                                                     Type: Expression Integer
                           Time: 0.30 (IN) + 0.03 (EV) + 0.07 (OT) = 0.40 sec
-- => (2 n)!/[2^(2 n) (n!)^2]   or   (2 n - 1)!!/[2^n n!]
Gamma(n + 1/2)/(sqrt(%pi) * factorial(n))
 

         _ 2n + 1
        | (------)
              2
   (4)  ----------
            +---+
         n!\|%pi
                                                     Type: Expression Integer
               Time: 0.85 (IN) + 0.02 (EV) + 0.07 (OT) + 0.02 (GC) = 0.95 sec
-- Partitions of an integer => {1+1+1+1, 1+1+2, 1+3, 2+2, 4} (5 in all)
4
 

   (5)  4
                                                        Type: PositiveInteger
                                                                  Time: 0 sec
-- Stirling numbers of the first kind: S_1(5, 2) => -50
stirling1(5, 2)
 

   (6)  - 50
                                                                Type: Integer
                                                   Time: 0.02 (EV) = 0.02 sec
-- Euler's totient function => 576
eulerPhi(1776)
 

   (7)  576
                                                        Type: PositiveInteger
                                                   Time: 0.02 (IN) = 0.02 sec
-- ---------- Quit ----------
)quit
 

real   9.9
user   3.6
sys    0.3
\end{verbatim}
\section{Number Theory}
\begin{verbatim}
 
-- ---------- Number Theory ----------
-- Display the largest 6-digit prime and the smallest 7-digit prime
-- => [999983, 1000003]
[prevPrime(1000000), nextPrime(1000000)]
 

   (1)  [999983,1000003]
                                                   Type: List PositiveInteger
                           Time: 0.02 (IN) + 0.08 (OT) + 0.02 (GC) = 0.12 sec
-- Primitive root => 19
191
 

   (2)  191
                                                        Type: PositiveInteger
                                                   Time: 0.02 (OT) = 0.02 sec
-- (a + b)^p mod p => a^p + b^p for p prime and a, b in Z_p   [Chris Hurlburt]
-- See Thomas W. Hungerford, _Algebra_, Springer-Verlag, 1974, p. 121 for a
-- more general simplification: (a +- b)^(p^n) => a^(p^n) +- b^(p^n)
(a + b)**p :: PrimeField(p)
 
 
   Cannot convert the first argument of PrimeField p to the type 
      PositiveInteger.
-- Congruence equations.  See Harold M. Stark, _An Introduction to Number
-- Theory_, The MIT press, 1984.
-- 9 x = 15 mod 21 => x = 4 mod 7   or   {4, 11, 18} mod 21   [Stark, p. 68]
solve(9*x = 15 :: IntegerMod(21), x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                      Equation Polynomial IntegerMod 21
                                 Variable x
      
-- 7 x = 22 mod 39 => x = 5 mod 13   or   31 mod 39   [Stark, p. 69]
solve(7*x = 22 :: IntegerMod(39), x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                      Equation Polynomial IntegerMod 39
                                 Variable x
      
-- x^2 + x + 4 = 0 mod 8 => x = {3, 4} mod 8   [Stark, p. 97]
solve(x**2 + x + 4 = 0 :: IntegerMod(8), x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                      Equation Polynomial IntegerMod 8
                                 Variable x
      
-- x^3 + 2 x^2 + 5 x + 6 = 0 mod 11 => x = 3 mod 11   [Stark, p. 97]
solve(x**3 + 2*x**2 + 5*x + 6 = 0 :: PrimeField(11), x)
 

   (3)  [x= 3]
                        Type: List Equation Fraction Polynomial PrimeField 11
                           Time: 0.72 (IN) + 0.18 (EV) + 0.18 (OT) = 1.08 sec
-- {x = 7 mod 9, x = 13 mod 23, x = 1 mod 2} => x = 151 mod 414   [Stark,
-- p. 76]
chineseRemainder([7, 13, 1], [9, 23, 2])
 

   (4)  151
                                                        Type: PositiveInteger
               Time: 0.02 (IN) + 0.02 (EV) + 0.03 (OT) + 0.03 (GC) = 0.10 sec
-- {5 x + 4 y = 6 mod 7, 3 x - 2 y = 6 mod 7} => x = 1 mod 7, y = 2 mod 7
-- [Stark, p. 76]
solve([5*x + 4*y = 6 :: PrimeField(7), 3*x - 2*y = 6 :: PrimeField(7)], [x, y])
 

   (5)  [[x= 1,y= 2]]
                    Type: List List Equation Fraction Polynomial PrimeField 7
               Time: 1.33 (IN) + 0.08 (EV) + 0.27 (OT) + 0.02 (GC) = 1.70 sec
-- 2 x + 3 y = 1 mod 5 =>
-- (x, y) = {(0, 2), (1, 3), (2, 4), (3, 0), (4, 1)} mod 5
solve(2*x + 3*y = 1 :: PrimeField(5), [x, y])
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                      Equation Polynomial PrimeField 5
                       List OrderedVariableList [x,y]
      
-- 2 x + 3 y = 1 mod 6 =>   [Stark, p. 76]
-- (x, y) = {(2, 1), (2, 3), (2, 5), (5, 1), (5, 3), (5, 5)} mod 6
solve(2*x + 3*y = 1 :: IntegerMod(6), [x, y])
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                      Equation Polynomial IntegerMod 6
                       List OrderedVariableList [x,y]
      
-- Diophantine equations => x = 2, y = 5 (Wallis)   [Stark, p. 147]
solve(x**4 + 9 = y**2, [x, y])
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                         Equation Polynomial Integer
                       List OrderedVariableList [x,y]
      
-- => x = 11, y = 5 (Fermat)   [Stark, p. 147]
solve(x**2 + 4 = y**3, [x, y])
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                         Equation Polynomial Integer
                       List OrderedVariableList [x,y]
      
-- => (x, y, t, z, w) = (3, 4, 5, 12, 13), (7, 24, 25, 312, 313), ...
--    [Stark, p. 154]
system:= [x**2 + y**2 = t**2, t**2 + z**2 = w**2]
 

          2    2   2  2    2   2
   (6)  [y  + x = t ,z  + t = w ]
                                       Type: List Equation Polynomial Integer
                           Time: 0.02 (IN) + 0.02 (EV) + 0.03 (OT) = 0.07 sec
solve(system, [x, y, t, z, w])
 
 
   >> Error detected within library code:
   system does not have a finite number of solutions

initial (7) -> 
real   58.4
user   14.4
sys    0.5

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

Fri Jun 13 01:16:45 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Number Theory ----------
-- Rational approximation of sqrt(3) with an error tolerance of 1/500 => 26/15
rationalApproximation(sqrt(3.), 3)
 

        26
   (1)  --
        15
                                                       Type: Fraction Integer
               Time: 0.02 (IN) + 0.05 (EV) + 0.07 (OT) + 0.07 (GC) = 0.20 sec
-- Continued fractions => 3 + 1/(7 + 1/(15 + 1/(1 + 1/(292 + ...
continuedFraction(3.1415926535)
 

   (2)
           1 |     1  |     1 |      1  |     1 |     1 |     1 |     1 |
     3 + +---+ + +----+ + +---+ + +-----+ + +---+ + +---+ + +---+ + +---+
         | 7     | 15     | 1     | 292     | 1     | 1     | 6     | 2
   + 
       1  |     1 |
     +----+ + +---+ + ...
     | 13     | 3
                                              Type: ContinuedFraction Integer
                           Time: 0.03 (EV) + 0.05 (OT) + 0.02 (GC) = 0.10 sec
-- => 4 + 1/(1 + 1/(3 + 1/(1 + 1/(8 + 1/(1 + 1/(3 + 1/(1 + 1/(8 + ...
--    [Stark, p. 340]
continuedFraction(sqrt(23))
 
   There are 2 exposed and 3 unexposed library operations named 
      continuedFraction having 1 argument(s) but none was determined to
      be applicable. Use HyperDoc Browse, or issue
                        )display op continuedFraction
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      continuedFraction with argument type(s) 
                               AlgebraicNumber
      
continuedFraction(sqrt(23) :: Float)
 

   (3)
           1 |     1 |     1 |     1 |     1 |     1 |     1 |     1 |     1 |
     4 + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+
         | 1     | 3     | 1     | 8     | 1     | 3     | 1     | 8     | 1
   + 
       1 |
     +---+ + ...
     | 3
                                              Type: ContinuedFraction Integer
               Time: 0.13 (IN) + 0.03 (EV) + 0.03 (OT) + 0.03 (GC) = 0.23 sec
-- => 1 + 1/(1 + 1/(1 + 1/(1 + ...   See Oskar Perron, _Die Lehre von den
--    Kettenbr\"uchen_, Chelsea Publishing Company, 1950, p. 52.
continuedFraction((1 + sqrt(5))/2 :: Float)
 

   (4)
           1 |     1 |     1 |     1 |     1 |     1 |     1 |     1 |     1 |
     1 + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+ + +---+
         | 1     | 1     | 1     | 1     | 1     | 1     | 1     | 1     | 1
   + 
       1 |
     +---+ + ...
     | 1
                                              Type: ContinuedFraction Integer
                           Time: 0.35 (IN) + 0.02 (EV) + 0.05 (OT) = 0.42 sec
-- => 1/(2 x + 1/(6 x + 1/(10 x + 1/(14 x + ...   [Perron, p. 353]
continuedFraction((exp(1/x) - 1)/(exp(1/x) + 1))
 
   There are 2 exposed and 3 unexposed library operations named 
      continuedFraction having 1 argument(s) but none was determined to
      be applicable. Use HyperDoc Browse, or issue
                        )display op continuedFraction
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      continuedFraction with argument type(s) 
                             Expression Integer
      
-- => 1/(2 x + 1/(2 x + 1/(2 x + ...   (Re x > 0)   From Liyang Xu, ``Method
--    Derived from Continued Fraction Approximations'', draft.
continuedFraction(sqrt(x**2 + 1) - x)
 
   There are 2 exposed and 3 unexposed library operations named 
      continuedFraction having 1 argument(s) but none was determined to
      be applicable. Use HyperDoc Browse, or issue
                        )display op continuedFraction
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      continuedFraction with argument type(s) 
                             Expression Integer
      
-- ---------- Quit ----------
)quit
 

real   9.3
user   3.0
sys    0.4
\end{verbatim}
\section{Algebra}
\begin{verbatim}

 
-- ---------- Algebra ----------
-- One would think that the simplification 2 2^n => 2^(n + 1) would happen
-- automatically or at least easily ...
2*2**n
 

           n
   (1)  2 2
                                                     Type: Expression Integer
               Time: 0.18 (IN) + 0.10 (EV) + 0.17 (OT) + 0.12 (GC) = 0.57 sec
-- And how about 4 2^n => 2^(n + 2)?   [Richard Fateman]
4*2**n
 

           n
   (2)  4 2
                                                     Type: Expression Integer
                                                   Time: 0.05 (IN) = 0.05 sec
-- (-1)^[n (n + 1)] => 1 for integer n
(-1)**(n*(n + 1))
 

              2
             n  + n
   (3)  (- 1)
                                                     Type: Expression Integer
                                       Time: 0.07 (IN) + 0.02 (EV) = 0.08 sec
-- Also easy => 2 (3 x - 5)
factor(6*x - 10)
 

   (4)  2(3x - 5)
                                            Type: Factored Polynomial Integer
               Time: 0.08 (IN) + 0.15 (EV) + 0.03 (OT) + 0.05 (GC) = 0.32 sec
-- Univariate gcd: gcd(p1, p2) => 1, gcd(p1 q, p2 q) => q   [Richard Liska]
p1:= 64*x**34 - 21*x**47 - 126*x**8 - 46*x**5 - 16*x**60 - 81;
 

                                                     Type: Polynomial Integer
                                       Time: 0.02 (IN) + 0.05 (OT) = 0.07 sec
p2:= 72*x**60 - 25*x**25 - 19*x**23 - 22*x**39 - 83*x**52 + 54*x**10 + 81;
 

                                                     Type: Polynomial Integer
                                                   Time: 0.07 (IN) = 0.07 sec
q:= 34*x**19 - 25*x**16 + 70*x**7 + 20*x**3 - 91*x - 86;
 

                                                     Type: Polynomial Integer
                                       Time: 0.02 (IN) + 0.05 (OT) = 0.07 sec
gcd(p1, p2)
 

   (8)  1
                                                     Type: Polynomial Integer
                                                   Time: 0.07 (EV) = 0.07 sec
gcd(expand(p1*q), expand(p2*q)) - q
 

   (9)  0
                                                     Type: Polynomial Integer
             Time: 31.85 (IN) + 0.08 (EV) + 0.02 (OT) + 4.53 (GC) = 36.48 sec
-- resultant(p1 q, p2 q) => 0
resultant(expand(p1*q), expand(p2*q), x)
 

   (10)  0
                                                     Type: Polynomial Integer
                         Time: 31.66 (IN) + 1.42 (EV) + 4.85 (GC) = 37.93 sec
-- How about factorization? => p1 * p2
factor(expand(p1 * p2))
 

   (11)
   -
             120        112        107        99        94        86       85
        1152x    - 1328x    + 1512x    - 2095x   - 4608x   + 4850x   - 400x
      + 
              83        73       72       70        68        65        60
        - 304x   + 1408x   - 525x   + 465x   + 9072x   + 3312x   - 3330x
      + 
             59        57        52        47        44        39        34
        1600x   - 1468x   - 6723x   - 1071x   - 4468x   - 1782x   - 5184x
      + 
               33        31        30       28        25        23        18
        - 3150x   - 2394x   - 1150x   - 874x   - 2025x   - 1539x   + 6804x
      + 
             15        10         8        5
        2484x   + 4374x   + 10206x  + 3726x  + 6561
                                            Type: Factored Polynomial Integer
        Time: 182.21 (IN) + 184.93 (EV) + 0.07 (OT) + 60.45 (GC) = 427.65 sec
)clear properties p1 p2 q
 
-- Multivariate gcd: gcd(p1, p2) => 1, gcd(p1 q, p2 q) => q
p1:= 24*x*y**19*z**8 - 47*x**17*y**5*z**8 + 6*x**15*y**9*z**2 - 3*x**22 + 5;
 

                                                     Type: Polynomial Integer
                                       Time: 0.08 (IN) + 0.02 (OT) = 0.10 sec
p2:= 34*x**5*y**8*z**13 + 20*x**7*y**7*z**7 + 12*x**9*y**16*z**4 + 80*y**14*z;
 

                                                     Type: Polynomial Integer
                                       Time: 0.08 (IN) + 0.03 (OT) = 0.12 sec
q:= 11*x**12*y**7*z**13 - 23*x**2*y**8*z**10 + 47*x**17*y**5*z**8;
 

                                                     Type: Polynomial Integer
                                       Time: 0.05 (IN) + 0.03 (OT) = 0.08 sec
gcd(p1, p2)
 

   (15)  1
                                                     Type: Polynomial Integer
                                                   Time: 0.02 (EV) = 0.02 sec
gcd(expand(p1*q), expand(p2*q)) - q
 

   (16)  0
                                                     Type: Polynomial Integer
                          Time: 6.62 (IN) + 8.73 (EV) + 1.32 (GC) = 16.67 sec
-- How about factorization? => p1 * p2
factor(expand(p1 * p2))
 

   (17)
       7        19      17 5  8     15 9 2     22
     2y z((24x y   - 47x  y )z  + 6x  y z  - 3x   + 5)
  *
         5   12      7 6     9 9 3      7
     (17x y z   + 10x z  + 6x y z  + 40y )
                                            Type: Factored Polynomial Integer
             Time: 9.30 (IN) + 10.72 (EV) + 0.02 (OT) + 1.53 (GC) = 21.57 sec
)clear properties p1 p2 q
 
-- => x^n for n > 0   [Chris Hurlburt]
gcd(2*x**(n + 4) - x**(n + 2), 4*x**(n + 1) + 3*x**n)
 

   (18)  1
                                                     Type: Expression Integer
                                       Time: 0.07 (IN) + 0.05 (OT) = 0.12 sec
-- Resultants.  If the resultant of two polynomials is zero, this implies they
-- have a common factor.  See Keith O. Geddes, Stephen R. Czapor and George
-- Labahn, _Algorithms for Computer Algebra_, Kluwer Academic Publishers, 1992,
-- p. 286 => 0
resultant(3*x**4 + 3*x**3 + x**2 - x - 2, x**3 - 3*x**2 + x + 5, x)
 

   (19)  0
                                                     Type: Polynomial Integer
                                                   Time: 0.03 (IN) = 0.03 sec
-- Numbers are nice, but symbols allow for variability---try some high school
-- algebra: rational simplification => (x - 2)/(x + 2)
(x**2 - 4)/(x**2 + 4*x + 4)
 

         x - 2
   (20)  -----
         x + 2
                                            Type: Fraction Polynomial Integer
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
-- This example requires more sophistication => e^(x/2) - 1
[(%e**x - 1)/(%e**(x/2) + 1), (exp(x) - 1)/(exp(x/2) + 1)]
 

            x       x
          %e  - 1 %e  - 1
   (21)  [-------,-------]
            x       x
            -       -
            2       2
          %e  + 1 %e  + 1
                                                Type: List Expression Integer
               Time: 1.02 (IN) + 0.20 (EV) + 0.15 (OT) + 0.35 (GC) = 1.72 sec
map(normalize, %)
 

            x       x
            -       -
            2       2
   (22)  [%e  - 1,%e  - 1]
                                                Type: List Expression Integer
                           Time: 0.05 (IN) + 0.45 (EV) + 0.02 (OT) = 0.52 sec
-- Expand and factor polynomials
(x + 1)**20
 

   (23)
      20      19       18        17        16         15         14         13
     x   + 20x   + 190x   + 1140x   + 4845x   + 15504x   + 38760x   + 77520x
   + 
            12          11          10          9          8         7         6
     125970x   + 167960x   + 184756x   + 167960x  + 125970x  + 77520x  + 38760x
   + 
           5        4        3       2
     15504x  + 4845x  + 1140x  + 190x  + 20x + 1
                                                     Type: Polynomial Integer
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
D(%, x)
 

   (24)
        19       18        17         16         15          14          13
     20x   + 380x   + 3420x   + 19380x   + 77520x   + 232560x   + 542640x
   + 
             12           11           10           9           8           7
     1007760x   + 1511640x   + 1847560x   + 1847560x  + 1511640x  + 1007760x
   + 
            6          5         4         3        2
     542640x  + 232560x  + 77520x  + 19380x  + 3420x  + 380x + 20
                                                     Type: Polynomial Integer
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
factor(%)
 

                  19
   (25)  20(x + 1)
                                            Type: Factored Polynomial Integer
                                                   Time: 0.02 (EV) = 0.02 sec
-- Completely factor this polynomial, then try to multiply it back together!
radicalSolve(x**3 + x**2 - 7 = 0, x)
 

   (26)
                       +--------------+2                  +--------------+
                       |   +----+                         |   +----+
                       |   |1295                          |   |1295
                       |9  |---- + 187                    |9  |---- + 187
           +---+       |  \|  3               +---+       |  \|  3
       (- \|- 3  + 1) 3|--------------  + (- \|- 3  - 1) 3|-------------- - 2
                      \|       2                         \|       2
   [x= ----------------------------------------------------------------------,
                                          +--------------+
                                          |   +----+
                                          |   |1295
                                          |9  |---- + 187
                              +---+       |  \|  3
                           (3\|- 3  + 3) 3|--------------
                                         \|       2
                       +--------------+2                  +--------------+
                       |   +----+                         |   +----+
                       |   |1295                          |   |1295
                       |9  |---- + 187                    |9  |---- + 187
           +---+       |  \|  3               +---+       |  \|  3
       (- \|- 3  - 1) 3|--------------  + (- \|- 3  + 1) 3|-------------- + 2
                      \|       2                         \|       2
    x= ----------------------------------------------------------------------,
                                          +--------------+
                                          |   +----+
                                          |   |1295
                                          |9  |---- + 187
                              +---+       |  \|  3
                           (3\|- 3  - 3) 3|--------------
                                         \|       2
        +--------------+2    +--------------+
        |   +----+           |   +----+
        |   |1295            |   |1295
        |9  |---- + 187      |9  |---- + 187
        |  \|  3             |  \|  3
       3|--------------   - 3|--------------  + 1
       \|       2           \|       2
    x= ------------------------------------------]
                      +--------------+
                      |   +----+
                      |   |1295
                      |9  |---- + 187
                      |  \|  3
                   3 3|--------------
                     \|       2
                                       Type: List Equation Expression Integer
                           Time: 0.13 (IN) + 0.12 (EV) + 0.13 (OT) = 0.38 sec
reduce(*, map(e +-> lhs(e) - rhs(e), %))
 

          3    2
   (27)  x  + x  - 7
                                                     Type: Expression Integer
                                       Time: 0.03 (IN) + 0.07 (EV) = 0.10 sec
x**100 - 1
 

          100
   (28)  x    - 1
                                                     Type: Polynomial Integer
                                                   Time: 0.02 (OT) = 0.02 sec
factor(%)
 

   (29)
                     2       4    3    2           4    3    2
     (x - 1)(x + 1)(x  + 1)(x  - x  + x  - x + 1)(x  + x  + x  + x + 1)
  *
       8    6    4    2       20    15    10    5       20    15    10    5
     (x  - x  + x  - x  + 1)(x   - x   + x   - x  + 1)(x   + x   + x   + x  + 1)
  *
       40    30    20    10
     (x   - x   + x   - x   + 1)
                                            Type: Factored Polynomial Integer
                                       Time: 0.05 (EV) + 0.03 (OT) = 0.08 sec
-- Factorization over the complex rationals
-- => (2 x + 3 i) (2 x - 3 i) (x + 1 + 4 i) (x + 1 - 4 i)
factor(4*x**4 + 8*x**3 + 77*x**2 + 18*x + 153, [rootOf(i**2 + 1)])
 

                           3i      3i
   (30)  4(x - 4i + 1)(x - --)(x + --)(x + 4i + 1)
                            2       2
                                    Type: Factored Polynomial AlgebraicNumber
                           Time: 0.17 (IN) + 1.65 (EV) + 0.03 (OT) = 1.85 sec
-- Algebraic extensions
sqrt2:= rootOf(sqrt2**2 - 2);
 

                                                        Type: AlgebraicNumber
                                                   Time: 0.02 (OT) = 0.02 sec
-- => sqrt2 + 1
1/(sqrt2 - 1)
 

   (32)  sqrt2 + 1
                                                        Type: AlgebraicNumber
                           Time: 0.02 (IN) + 0.03 (EV) + 0.02 (OT) = 0.07 sec
-- => (x^2 - 2 x - 3)/(x - sqrt2) = (x + 1) (x - 3)/(x - sqrt2)
--    [Richard Liska]
(x**3 + (sqrt2 - 2)*x**2 - (2*sqrt2 + 3)*x - 3*sqrt2)/(x**2 - 2)
 

          2
         x  - 2x - 3
   (33)  -----------
          x - sqrt2
                                    Type: Fraction Polynomial AlgebraicNumber
                           Time: 0.40 (IN) + 0.20 (EV) + 0.12 (OT) = 0.72 sec
numer(%)/ratDenom(denom(%))
 

            2
         - x  + 2x + 3
   (34)  -------------
           sqrt2 - x
                                                     Type: Expression Integer
                                       Time: 0.27 (IN) + 0.08 (OT) = 0.35 sec
)clear properties sqrt2
 
-- Multiple algebraic extensions
sqrt3:= rootOf(sqrt3**2 - 3);
 

                                                        Type: AlgebraicNumber
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
cbrt2:= rootOf(cbrt2**3 - 2);
 

                                                        Type: AlgebraicNumber
                                                   Time: 0.02 (IN) = 0.02 sec
-- => 2 cbrt2 + 8 sqrt3 + 18 cbrt2^2 + 12 cbrt2 sqrt3 + 9
(cbrt2 + sqrt3)**4
 

                                     2
   (37)  (12cbrt2 + 8)sqrt3 + 18cbrt2  + 2cbrt2 + 9
                                                        Type: AlgebraicNumber
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
)clear properties sqrt3 cbrt2
 
-- Factor polynomials over finite fields and field extensions
p:= x**4 - 3*x**2 + 1
 

          4     2
   (38)  x  - 3x  + 1
                                                     Type: Polynomial Integer
                                                   Time: 0.02 (IN) = 0.02 sec
factor(p)
 

           2           2
   (39)  (x  - x - 1)(x  + x - 1)
                                            Type: Factored Polynomial Integer
                                                   Time: 0.03 (EV) = 0.03 sec
-- => (x - 2)^2 (x + 2)^2  mod  5
factor(p :: Polynomial(PrimeField(5)))
 

                2       2
   (40)  (x + 2) (x + 3)
                                       Type: Factored Polynomial PrimeField 5
               Time: 0.12 (IN) + 0.12 (EV) + 0.02 (OT) + 0.05 (GC) = 0.30 sec
expand(%)
 

          4     2
   (41)  x  + 2x  + 1
                                                Type: Polynomial PrimeField 5
                                                   Time: 0.02 (IN) = 0.02 sec
-- => (x^2 + x + 1) (x^9 - x^8 + x^6 - x^5 + x^3 - x^2 + 1)  mod  65537
--    [Paul Zimmermann]
factor(x**11 + x + 1 :: Polynomial(PrimeField(65537)))
 

           2           9         8    6         5    3         2
   (42)  (x  + x + 1)(x  + 65536x  + x  + 65536x  + x  + 65536x  + 1)
                                   Type: Factored Polynomial PrimeField 65537
                           Time: 0.13 (IN) + 0.13 (EV) + 0.03 (OT) = 0.30 sec
-- => (x - phi) (x + phi) (x - phi + 1) (x + phi - 1)
--    where phi^2 - phi - 1 = 0 or phi = (1 +- sqrt(5))/2
phi:= rootOf(phi**2 - phi - 1);
 

                                                        Type: AlgebraicNumber
                                                   Time: 0.03 (IN) = 0.03 sec
factor(p, [phi])
 

   (44)  (x - phi)(x - phi + 1)(x + phi - 1)(x + phi)
                                    Type: Factored Polynomial AlgebraicNumber
                                       Time: 0.80 (EV) + 0.02 (OT) = 0.82 sec
)clear properties phi p
 
expand((x - 2*y**2 + 3*z**3)**20);
 

                                                     Type: Polynomial Integer
               Time: 0.17 (IN) + 0.55 (EV) + 0.03 (OT) + 0.42 (GC) = 1.17 sec
factor(%)
 

            3     2     20
   (46)  (3z  - 2y  + x)
                                            Type: Factored Polynomial Integer
                                                   Time: 0.13 (EV) = 0.13 sec
expand((sin(x) - 2*cos(y)**2 + 3*tan(z)**3)**20);
 

                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 1.30 (EV) + 0.07 (OT) = 1.43 sec
factor(%)
 

   (48)
                     60                                         2       57
     3486784401tan(z)   + (23245229340sin(x) - 46490458680cos(y) )tan(z)
   + 
                         2                     2                           4
       (73609892910sin(x)  - 294439571640cos(y) sin(x) + 294439571640cos(y) )
    *
             54
       tan(z)
   + 
                           3                     2      2
         147219785820sin(x)  - 883318714920cos(y) sin(x)
       + 
                            4                            6
         1766637429840cos(y) sin(x) - 1177758286560cos(y)
    *
             51
       tan(z)
   + 
                           4                      2      3
         208561363245sin(x)  - 1668490905960cos(y) sin(x)
       + 
                            4      2                      6
         5005472717880cos(y) sin(x)  - 6673963623840cos(y) sin(x)
       + 
                            8
         3336981811920cos(y)
    *
             48
       tan(z)
   + 
                           5                      2      4
         222465454128sin(x)  - 2224654541280cos(y) sin(x)
       + 
                            4      3                       6      2
         8898618165120cos(y) sin(x)  - 17797236330240cos(y) sin(x)
       + 
                             8                            10
         17797236330240cos(y) sin(x) - 7118894532096cos(y)
    *
             45
       tan(z)
   + 
                           6                      2      5
         185387878440sin(x)  - 2224654541280cos(y) sin(x)
       + 
                             4      4                       6      3
         11123272706400cos(y) sin(x)  - 29662060550400cos(y) sin(x)
       + 
                             8      2                       10
         44493090825600cos(y) sin(x)  - 35594472660480cos(y)  sin(x)
       + 
                             12
         11864824220160cos(y)
    *
             42
       tan(z)
   + 
                           7                      2      6
         123591918960sin(x)  - 1730286865440cos(y) sin(x)
       + 
                             4      5                       6      4
         10381721192640cos(y) sin(x)  - 34605737308800cos(y) sin(x)
       + 
                             8      3                       10      2
         69211474617600cos(y) sin(x)  - 83053769541120cos(y)  sin(x)
       + 
                             12                             14
         55369179694080cos(y)  sin(x) - 15819765626880cos(y)
    *
             39
       tan(z)
   + 
                          8                      2      7
         66945622770sin(x)  - 1071129964320cos(y) sin(x)
       + 
                            4      6                       6      5
         7497909750240cos(y) sin(x)  - 29991639000960cos(y) sin(x)
       + 
                             8      4                        10      3
         74979097502400cos(y) sin(x)  - 119966556003840cos(y)  sin(x)
       + 
                              12      2                       14
         119966556003840cos(y)  sin(x)  - 68552317716480cos(y)  sin(x)
       + 
                             16
         17138079429120cos(y)
    *
             36
       tan(z)
   + 
                          9                     2      8
         29753610120sin(x)  - 535564982160cos(y) sin(x)
       + 
                            4      7                       6      6
         4284519857280cos(y) sin(x)  - 19994426000640cos(y) sin(x)
       + 
                             8      5                        10      4
         59983278001920cos(y) sin(x)  - 119966556003840cos(y)  sin(x)
       + 
                              12      3                        14      2
         159955408005120cos(y)  sin(x)  - 137104635432960cos(y)  sin(x)
       + 
                             16                             18
         68552317716480cos(y)  sin(x) - 15233848381440cos(y)
    *
             33
       tan(z)
   + 
                          10                     2      9
         10909657044sin(x)   - 218193140880cos(y) sin(x)
       + 
                            4      8                       6      7
         1963738267920cos(y) sin(x)  - 10473270762240cos(y) sin(x)
       + 
                             8      6                       10      5
         36656447667840cos(y) sin(x)  - 87975474402816cos(y)  sin(x)
       + 
                              12      4                        14      3
         146625790671360cos(y)  sin(x)  - 167572332195840cos(y)  sin(x)
       + 
                              16      2                       18
         125679249146880cos(y)  sin(x)  - 55857444065280cos(y)  sin(x)
       + 
                             20
         11171488813056cos(y)
    *
             30
       tan(z)
   + 
                         11                    2      10
         3305956680sin(x)   - 72731046960cos(y) sin(x)
       + 
                           4      9                      6      8
         727310469600cos(y) sin(x)  - 4363862817600cos(y) sin(x)
       + 
                             8      7                       10      6
         17455451270400cos(y) sin(x)  - 48875263557120cos(y)  sin(x)
       + 
                             12      5                        14      4
         97750527114240cos(y)  sin(x)  - 139643610163200cos(y)  sin(x)
       + 
                              16      3                       18      2
         139643610163200cos(y)  sin(x)  - 93095740108800cos(y)  sin(x)
       + 
                             20                            22
         37238296043520cos(y)  sin(x) - 6770599280640cos(y)
    *
             27
       tan(z)
   + 
                        12                    2      11
         826489170sin(x)   - 19835740080cos(y) sin(x)
       + 
                           4      10                      6      9
         218193140880cos(y) sin(x)   - 1454620939200cos(y) sin(x)
       + 
                            8      8                       10      7
         6545794226400cos(y) sin(x)  - 20946541524480cos(y)  sin(x)
       + 
                             12      6                       14      5
         48875263557120cos(y)  sin(x)  - 83786166097920cos(y)  sin(x)
       + 
                              16      4                       18      3
         104732707622400cos(y)  sin(x)  - 93095740108800cos(y)  sin(x)
       + 
                             20      2                       22
         55857444065280cos(y)  sin(x)  - 20311797841920cos(y)  sin(x)
       + 
                            24
         3385299640320cos(y)
    *
             24
       tan(z)
   + 
                        13                   2      12
         169536240sin(x)   - 4407942240cos(y) sin(x)
       + 
                          4      11                     6      10
         52895306880cos(y) sin(x)   - 387898917120cos(y) sin(x)
       + 
                            8      9                      10      8
         1939494585600cos(y) sin(x)  - 6982180508160cos(y)  sin(x)
       + 
                             12      7                       14      6
         18619148021760cos(y)  sin(x)  - 37238296043520cos(y)  sin(x)
       + 
                             16      5                       18      4
         55857444065280cos(y)  sin(x)  - 62063826739200cos(y)  sin(x)
       + 
                             20      3                       22      2
         49651061391360cos(y)  sin(x)  - 27082397122560cos(y)  sin(x)
       + 
                            24                            26
         9027465707520cos(y)  sin(x) - 1388840878080cos(y)
    *
             21
       tan(z)
   + 
                       14                  2      13
         28256040sin(x)   - 791169120cos(y) sin(x)
       + 
                          4      12                    6      11
         10285198560cos(y) sin(x)   - 82281588480cos(y) sin(x)
       + 
                           8      10                      10      9
         452548736640cos(y) sin(x)   - 1810194946560cos(y)  sin(x)
       + 
                            12      8                       14      7
         5430584839680cos(y)  sin(x)  - 12412765347840cos(y)  sin(x)
       + 
                             16      6                       18      5
         21722339358720cos(y)  sin(x)  - 28963119144960cos(y)  sin(x)
       + 
                             20      4                       22      3
         28963119144960cos(y)  sin(x)  - 21064086650880cos(y)  sin(x)
       + 
                             24      2                      26
         10532043325440cos(y)  sin(x)  - 3240628715520cos(y)  sin(x)
       + 
                           28
         462946959360cos(y)
    *
             18
       tan(z)
   + 
                      15                  2      14                   4      13
         3767472sin(x)   - 113024160cos(y) sin(x)   + 1582338240cos(y) sin(x)
       + 
                            6      12                    8      11
         - 13713598080cos(y) sin(x)   + 82281588480cos(y) sin(x)
       + 
                             10      10                      12      9
         - 362038989312cos(y)  sin(x)   + 1206796631040cos(y)  sin(x)
       + 
                              14      8                      16      7
         - 3103191336960cos(y)  sin(x)  + 6206382673920cos(y)  sin(x)
       + 
                              18      6                       20      5
         - 9654373048320cos(y)  sin(x)  + 11585247657984cos(y)  sin(x)
       + 
                               22      4                      24      3
         - 10532043325440cos(y)  sin(x)  + 7021362216960cos(y)  sin(x)
       + 
                              26      2                     28
         - 3240628715520cos(y)  sin(x)  + 925893918720cos(y)  sin(x)
       + 
                             30
         - 123452522496cos(y)
    *
             15
       tan(z)
   + 
                     16                 2      15                  4      14
         392445sin(x)   - 12558240cos(y) sin(x)   + 188373600cos(y) sin(x)
       + 
                           6      13                    8      12
         - 1758153600cos(y) sin(x)   + 11427998400cos(y) sin(x)
       + 
                            10      11                     12      10
         - 54854392320cos(y)  sin(x)   + 201132771840cos(y)  sin(x)
       + 
                             14      9                      16      8
         - 574665062400cos(y)  sin(x)  + 1292996390400cos(y)  sin(x)
       + 
                              18      7                      20      6
         - 2298660249600cos(y)  sin(x)  + 3218124349440cos(y)  sin(x)
       + 
                              22      5                      24      4
         - 3510681108480cos(y)  sin(x)  + 2925567590400cos(y)  sin(x)
       + 
                              26      3                     28      2
         - 1800349286400cos(y)  sin(x)  + 771578265600cos(y)  sin(x)
       + 
                             30                          32
         - 205754204160cos(y)  sin(x) + 25719275520cos(y)
    *
             12
       tan(z)
   + 
                    17                2      16                 4      15
         30780sin(x)   - 1046520cos(y) sin(x)   + 16744320cos(y) sin(x)
       + 
                          6      14                   8      13
         - 167443200cos(y) sin(x)   + 1172102400cos(y) sin(x)
       + 
                           10      12                    12      11
         - 6094932480cos(y)  sin(x)   + 24379729920cos(y)  sin(x)
       + 
                            14      10                     16      9
         - 76622008320cos(y)  sin(x)   + 191555020800cos(y)  sin(x)
       + 
                             18      8                     20      7
         - 383110041600cos(y)  sin(x)  + 612976066560cos(y)  sin(x)
       + 
                             22      6                     24      5
         - 780151357440cos(y)  sin(x)  + 780151357440cos(y)  sin(x)
       + 
                             26      4                     28      3
         - 600116428800cos(y)  sin(x)  + 342923673600cos(y)  sin(x)
       + 
                             30      2                    32
         - 137169469440cos(y)  sin(x)  + 34292367360cos(y)  sin(x)
       + 
                           34
         - 4034396160cos(y)
    *
             9
       tan(z)
   + 
                   18              2      17                4      16
         1710sin(x)   - 61560cos(y) sin(x)   + 1046520cos(y) sin(x)
       + 
                         6      15                 8      14
         - 11162880cos(y) sin(x)   + 83721600cos(y) sin(x)
       + 
                          10      13                   12      12
         - 468840960cos(y)  sin(x)   + 2031644160cos(y)  sin(x)
       + 
                           14      11                    16      10
         - 6965637120cos(y)  sin(x)   + 19155502080cos(y)  sin(x)
       + 
                            18      9                    20      8
         - 42567782400cos(y)  sin(x)  + 76622008320cos(y)  sin(x)
       + 
                             22      7                     24      6
         - 111450193920cos(y)  sin(x)  + 130025226240cos(y)  sin(x)
       + 
                             26      5                    28      4
         - 120023285760cos(y)  sin(x)  + 85730918400cos(y)  sin(x)
       + 
                            30      3                    32      2
         - 45723156480cos(y)  sin(x)  + 17146183680cos(y)  sin(x)
       + 
                           34                        36
         - 4034396160cos(y)  sin(x) + 448266240cos(y)
    *
             6
       tan(z)
   + 
                 19             2      18              4      17
         60sin(x)   - 2280cos(y) sin(x)   + 41040cos(y) sin(x)
       + 
                       6      16                8      15
         - 465120cos(y) sin(x)   + 3720960cos(y) sin(x)
       + 
                         10      14                  12      13
         - 22325760cos(y)  sin(x)   + 104186880cos(y)  sin(x)
       + 
                          14      12                   16      11
         - 386979840cos(y)  sin(x)   + 1160939520cos(y)  sin(x)
       + 
                           18      10                   20      9
         - 2837852160cos(y)  sin(x)   + 5675704320cos(y)  sin(x)
       + 
                           22      8                    24      7
         - 9287516160cos(y)  sin(x)  + 12383354880cos(y)  sin(x)
       + 
                            26      6                    28      5
         - 13335920640cos(y)  sin(x)  + 11430789120cos(y)  sin(x)
       + 
                           30      4                   32      3
         - 7620526080cos(y)  sin(x)  + 3810263040cos(y)  sin(x)
       + 
                         34      2                  36                       38
       - 1344798720cos(y)  sin(x)  + 298844160cos(y)  sin(x) - 31457280cos(y)
    *
             3
       tan(z)
   + 
           20           2      19            4      18             6      17
     sin(x)   - 40cos(y) sin(x)   + 760cos(y) sin(x)   - 9120cos(y) sin(x)
   + 
                8      16               10      15                12      14
     77520cos(y) sin(x)   - 496128cos(y)  sin(x)   + 2480640cos(y)  sin(x)
   + 
                    14      13                 16      12
     - 9922560cos(y)  sin(x)   + 32248320cos(y)  sin(x)
   + 
                     18      11                  20      10
     - 85995520cos(y)  sin(x)   + 189190144cos(y)  sin(x)
   + 
                      22      9                  24      8
     - 343982080cos(y)  sin(x)  + 515973120cos(y)  sin(x)
   + 
                      26      7                  28      6
     - 635043840cos(y)  sin(x)  + 635043840cos(y)  sin(x)
   + 
                      30      5                  32      4
     - 508035072cos(y)  sin(x)  + 317521920cos(y)  sin(x)
   + 
                      34      3                 36      2
     - 149422080cos(y)  sin(x)  + 49807360cos(y)  sin(x)
   + 
                     38                      40
     - 10485760cos(y)  sin(x) + 1048576cos(y)
                                            Type: Factored Expression Integer
                                       Time: 0.02 (EV) + 0.88 (OT) = 0.90 sec
-- expand[(1 - c^2)^5 (1 - s^2)^5 (c^2 + s^2)^10] => c^10 s^10 when
-- c^2 + s^2 = 1   [modification of a problem due to Richard Liska]
expand((1 - c**2)**5 * (1 - s**2)**5 * (c**2 + s**2)**10);
 

                                                     Type: Polynomial Integer
                           Time: 0.25 (IN) + 0.02 (EV) + 0.02 (OT) = 0.28 sec
groebner([%, c**2 + s**2 - 1])
 

           2    2      20     18      16      14     12    10
   (50)  [s  + c  - 1,c   - 5c   + 10c   - 10c   + 5c   - c  ]
                                                Type: List Polynomial Integer
                           Time: 0.02 (IN) + 0.17 (EV) + 0.02 (OT) = 0.20 sec
map(factor, %)
 

           2    2            5 10       5
   (51)  [s  + c  - 1,(c - 1) c  (c + 1) ]
                                       Type: List Factored Polynomial Integer
                           Time: 0.03 (IN) + 0.02 (EV) + 0.02 (OT) = 0.07 sec
-- => (x + y) (x - y)  mod  3
factor(4*x**2 - 21*x*y + 20*y**2 :: Polynomial(PrimeField(3)))
 
   There are 20 exposed and 17 unexposed library operations named ** 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op **
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named ** 
      with argument type(s) 
                                 Variable y
                           Polynomial PrimeField 3
      
-- => 1/4 (x + y) (2 x +  y [-1 + i sqrt(3)]) (2 x + y [-1 - i sqrt(3)])
factor(x**3 + y**3, [rootOf(isqrt3**2 + 3)])
 

              - isqrt3 - 1               isqrt3 - 1
   (52)  (y + ------------ x)(y + x)(y + ---------- x)
                    2                         2
                                    Type: Factored Polynomial AlgebraicNumber
               Time: 0.05 (IN) + 2.33 (EV) + 0.07 (OT) + 0.43 (GC) = 2.88 sec
-- Partial fraction decomposition => 3/(x + 2) - 2/(x + 1) + 2/(x + 1)^2
(x**2 + 2*x + 3)/(x**3 + 4*x**2 + 5*x + 2)
 

             2
            x  + 2x + 3
   (53)  -----------------
          3     2
         x  + 4x  + 5x + 2
                                            Type: Fraction Polynomial Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
fullPartialFraction( _
   % :: Fraction UnivariatePolynomial(x, Fraction Integer))
 

             2         2        3
   (54)  - ----- + -------- + -----
           x + 1          2   x + 2
                   (x + 1)
Type: FullPartialFractionExpansion(Fraction Integer,UnivariatePolynomial(x,Fraction Integer))
                           Time: 0.13 (IN) + 0.20 (EV) + 0.05 (OT) = 0.38 sec
-- Noncommutative algebra: note that (A B C)^(-1) = C^(-1) B^(-1) A^(-1)
-- => A B C A C B - C^(-1) B^(-1) C B
A : SquareMatrix(2, Integer);
 
                                                                   Type: Void
                                                                  Time: 0 sec
B : SquareMatrix(2, Integer);
 
                                                                   Type: Void
                                                                  Time: 0 sec
C : SquareMatrix(2, Integer);
 
                                                                   Type: Void
                                                                  Time: 0 sec
(A*B*C - (A*B*C)**(-1)) * A*C*B
 
 
   A is declared as being in SquareMatrix(2,Integer) but has not been 
      given a value.
-- Jacobi's identity: [A, B, C] + [B, C, A] + [C, A, B] = 0 where [A, B, C] =
-- [A, [B, C]] and [A, B] = A B - B A is the commutator of A and B
comm2(A, B) == A * B - B * A;
 
                                                                   Type: Void
                                                                  Time: 0 sec
comm3(A, B, C) == comm2(A, comm2(B, C));
 
                                                                   Type: Void
                                                                  Time: 0 sec
comm2(A, B)
 
 
   A is declared as being in SquareMatrix(2,Integer) but has not been 
      given a value.
comm3(A, B, C) + comm3(B, C, A) + comm3(C, A, B)
 
 
   A is declared as being in SquareMatrix(2,Integer) but has not been 
      given a value.
)clear properties A B C comm2 comm3
 
-- ---------- Quit ----------
)quit
 

real   1461.7
user   485.5
sys    0.6
\end{verbatim}
\section{Trigonometry}
\begin{verbatim}

 
-- ---------- Trigonometry ----------
-- => - [(sqrt(5) + 1) sqrt(2)]/[(sqrt(5) - 1) sqrt(sqrt(5) + 5)]
--    = - sqrt[1 + 2/sqrt(5)]
-- From B. F. Caviness, Robert P. Gilbert, Wolfram Koepf, Roman Shtokhamer and
-- David W. Wood, _An Introduction to Applied Symbolic Computation using
-- MACSYMA_, University of Delaware, draft of December 14, 1993, section 2.3.3.
tan(7*%pi/10)
 

            7%pi
   (1)  tan(----)
             10
                                                     Type: Expression Integer
                Time: 0.48 (IN) + 0.18 (EV) + 0.14 (OT) + 0.20 (GC) = 1.0 sec
-- => - cos 3
sqrt((1 + cos(6))/2)
 

         +----------+
         |cos(6) + 1
   (2)   |----------
        \|     2
                                                     Type: Expression Integer
                                       Time: 0.18 (IN) + 0.03 (EV) = 0.22 sec
simplify(normalize(%))
 

         +-------+
         |      2
   (3)  \|cos(3)
                                                     Type: Expression Integer
               Time: 0.10 (IN) + 0.20 (EV) + 0.02 (OT) + 0.02 (GC) = 0.33 sec
-- cos(n pi) + sin((4 n - 1)/2 pi) => (-1)^n - 1 for integer n
cos(n*%pi) + sin((4*n - 1)/2 * %pi)
 

            (4n - 1)%pi
   (4)  sin(-----------) + cos(n %pi)
                 2
                                                     Type: Expression Integer
                           Time: 1.15 (IN) + 0.02 (EV) + 0.17 (OT) = 1.33 sec
-- cos(cos(n pi) pi) + sin(cos(n pi) pi/2) => -1 + (-1)^n for integer n
cos(cos(n*%pi)*%pi) + sin(cos(n*%pi)*%pi/2)
 

            %pi cos(n %pi)
   (5)  sin(--------------) + cos(%pi cos(n %pi))
                   2
                                                     Type: Expression Integer
                           Time: 0.12 (IN) + 0.02 (EV) + 0.07 (OT) = 0.20 sec
-- sin([n^5/5 + n^4/2 + n^3/3 - n/30] pi) => 0 for integer n
-- [Paul Zimmermann]
sin((n**5/5 + n**4/2 + n**3/3 - n/30) * %pi)
 

               5      4      3
            (6n  + 15n  + 10n  - n)%pi
   (6)  sin(--------------------------)
                        30
                                                     Type: Expression Integer
                                       Time: 0.37 (IN) + 0.05 (OT) = 0.42 sec
-- | cos x |, | sin x | => - cos x, - sin x  for  - 3 pi < x < - 5/2 pi
--assume(-3*%pi < x, x < -5/2*%pi)
[abs(cos(x)), abs(sin(x))]
 

   (7)  [abs(cos(x)),abs(sin(x))]
                                                Type: List Expression Integer
                           Time: 0.05 (IN) + 0.03 (EV) + 0.02 (OT) = 0.10 sec
--forget(-3*%pi < x, x < -5/2*%pi)
-- Trigonometric manipulations---these are typically difficult for students
r:= cos(3*x)/cos(x)
 

        cos(3x)
   (8)  -------
         cos(x)
                                                     Type: Expression Integer
                                       Time: 0.03 (IN) + 0.02 (EV) = 0.05 sec
-- => cos(x)^2 - 3 sin(x)^2 or similar
real(complexNormalize(r))
 

                 2          2
   (9)  - 2sin(x)  + 2cos(x)  - 1
                                                     Type: Expression Integer
               Time: 0.07 (IN) + 1.45 (EV) + 0.03 (OT) + 0.02 (GC) = 1.57 sec
-- => 2 cos(2 x) - 1
real(normalize(simplify(complexNormalize(r))))
 

   (10)  2cos(2x) - 1
                                                     Type: Expression Integer
                                       Time: 0.02 (IN) + 1.10 (EV) = 1.12 sec
-- Use rewrite rules => cos(x)^2 - 3 sin(x)^2
sincosAngles:= rule ( _
   cos((n | integer?(n)) * x) == _
      cos((n - 1)*x) * cos(x) - sin((n - 1)*x) * sin(x); _
   sin((n | integer?(n)) * x) == _
      sin((n - 1)*x) * cos(x) + cos((n - 1)*x) * sin(x) )
 

   (11)
   {cos(n x) == - sin(x)sin((n - 1)x) + cos(x)cos((n - 1)x),
    sin(n x) == cos(x)sin((n - 1)x) + cos((n - 1)x)sin(x)}
                            Type: Ruleset(Integer,Integer,Expression Integer)
               Time: 0.25 (IN) + 0.15 (EV) + 0.07 (OT) + 0.02 (GC) = 0.48 sec
sincosAngles r
 

                  2         2
   (12)  - 3sin(x)  + cos(x)
                                                     Type: Expression Integer
               Time: 0.02 (IN) + 0.20 (EV) + 0.02 (OT) + 0.02 (GC) = 0.25 sec
)clear properties r
 
-- Here is a tricky way of writing 0/0
expr:= (tan(x)**2 + 1 - sec(x)**2)/(sin(x)**2 + cos(x)**2 - 1)
 

               2         2
         tan(x)  - sec(x)  + 1
   (13)  ---------------------
               2         2
         sin(x)  + cos(x)  - 1
                                                     Type: Expression Integer
                           Time: 0.08 (IN) + 0.02 (EV) + 0.02 (OT) = 0.12 sec
-- Let's try simplifying this expression!
simplify(expr)
 

            1
   (14)  -------
               2
         cos(x)
                                                     Type: Expression Integer
                                                   Time: 0.07 (EV) = 0.07 sec
normalize(expr)
 
 
   >> Error detected within library code:
   catdef: division by zero

initial (15) -> 
real   8.9
user   8.2
sys    0.4

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

Thu Apr 17 07:23:53 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Trigonometry ----------
expr:= (tan(x)**2 + 1 - sec(x)**2)/(sin(x)**2 + cos(x)**2 - 1)
 

              2         2
        tan(x)  - sec(x)  + 1
   (1)  ---------------------
              2         2
        sin(x)  + cos(x)  - 1
                                                     Type: Expression Integer
               Time: 0.32 (IN) + 0.40 (EV) + 0.27 (OT) + 0.20 (GC) = 1.18 sec
-- Let's try simplifying this expression!
complexNormalize(expr)
 
 
   >> Error detected within library code:
   catdef: division by zero

initial (2) -> 
real   5.5
user   2.0
sys    0.3

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

Thu Apr 17 07:25:51 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Trigonometry ----------
expr:= (tan(x)**2 + 1 - sec(x)**2)/(sin(x)**2 + cos(x)**2 - 1)
 

              2         2
        tan(x)  - sec(x)  + 1
   (1)  ---------------------
              2         2
        sin(x)  + cos(x)  - 1
                                                     Type: Expression Integer
               Time: 0.30 (IN) + 0.45 (EV) + 0.23 (OT) + 0.20 (GC) = 1.18 sec
-- What is its limit at zero?
limit(expr, x = 0)
 

   (2)  0
                        Type: Union(OrderedCompletion Expression Integer,...)
               Time: 0.35 (IN) + 8.02 (EV) + 0.05 (OT) + 0.53 (GC) = 8.95 sec
-- What is the derivative?
dexpr:= D(expr, x)
 

               3             2
        2tan(x)  + (- 2sec(x)  + 2)tan(x)
   (3)  ---------------------------------
                    2         2
              sin(x)  + cos(x)  - 1
                                                     Type: Expression Integer
                           Time: 0.02 (IN) + 0.13 (EV) + 0.02 (OT) = 0.17 sec
simplify(dexpr)
 

        2sin(x)
   (4)  -------
              3
        cos(x)
                                                     Type: Expression Integer
                           Time: 0.03 (IN) + 0.12 (EV) + 0.03 (OT) = 0.18 sec
normalize(dexpr)
 
 
   >> Error detected within library code:
   catdef: division by zero

initial (5) -> 
real   32.0
user   10.7
sys    0.4

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

Thu Apr 17 07:28:07 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Trigonometry ----------
expr:= (tan(x)**2 + 1 - sec(x)**2)/(sin(x)**2 + cos(x)**2 - 1)
 

              2         2
        tan(x)  - sec(x)  + 1
   (1)  ---------------------
              2         2
        sin(x)  + cos(x)  - 1
                                                     Type: Expression Integer
               Time: 0.37 (IN) + 0.40 (EV) + 0.22 (OT) + 0.20 (GC) = 1.18 sec
-- What is the derivative?
dexpr:= D(expr, x)
 

               3             2
        2tan(x)  + (- 2sec(x)  + 2)tan(x)
   (2)  ---------------------------------
                    2         2
              sin(x)  + cos(x)  - 1
                                                     Type: Expression Integer
                           Time: 0.15 (EV) + 0.02 (OT) + 0.02 (GC) = 0.18 sec
complexNormalize(dexpr)
 
 
   >> Error detected within library code:
   catdef: division by zero

initial (3) -> 
real   5.6
user   2.1
sys    0.3
\end{verbatim}
\section{Special Functions}
\begin{verbatim}
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Special Functions ----------
-- Bernoulli numbers: B_16 => -3617/510   [Gradshteyn and Ryzhik 9.71]
bernoulli(16)
 

          3617
   (1)  - ----
           510
                                                       Type: Fraction Integer
               Time: 0.02 (IN) + 0.07 (EV) + 0.03 (OT) + 0.03 (GC) = 0.15 sec
-- d/dk E(phi, k) => [E(phi, k) - F(phi, k)]/k  where  F(phi, k) and E(phi, k)
-- are elliptic integrals of the 1st and 2nd kind, respectively
-- [Gradshteyn and Ryzhik 8.123(3)]
--D(E(phi, k), k)
-- Jacobian elliptic functions: d/du dn u => -k^2 sn u cn u
-- [Gradshteyn and Ryzhik 8.158(3)]
--D(dn(u), u)
-- => -2 sqrt(pi)   [Gradshteyn and Ryzhik 8.338(3)]
Gamma(-1/2)
 

   (2)  - 3.5449077018110313
                                                            Type: DoubleFloat
                           Time: 0.03 (IN) + 0.03 (OT) + 0.02 (GC) = 0.08 sec
% + 2*sqrt(%pi)
 

   (3)  4.4408920985006262e-16
                                                 Type: Expression DoubleFloat
                            Time: 0.68 (IN) + 0.17 (OT) + 0.15 (GC) = 1.0 sec
-- psi(1/3) => - Euler's_constant - pi/2 sqrt(1/3) - 3/2 log 3  where  psi(x)
-- is the psi function [= d/dx log Gamma(x)]   [Gradshteyn and Ryzhik 8.366(6)]
digamma(1/3)
 

   (4)  - 3.1320337800208065
                                                            Type: DoubleFloat
                                                   Time: 0.02 (IN) = 0.02 sec
% + %pi/2*sqrt(1/3) + 3/2*log(3)
 

   (5)  - 0.57721566490153275
                                                 Type: Expression DoubleFloat
                           Time: 0.52 (IN) + 0.10 (EV) + 0.05 (OT) = 0.67 sec
-- Bessel function of the first kind of order 2 => 0.04158 + 0.24740 i
besselJ(2, 1 + %i)
 

   (6)  0.041579886943962127 + 0.2473976415133064%i
                                                    Type: Complex DoubleFloat
               Time: 0.12 (IN) + 0.02 (EV) + 0.05 (OT) + 0.03 (GC) = 0.22 sec
-- => 12/pi^2   [Gradshteyn and Ryzhik 8.464(6)]
besselJ(-5/2, %pi/2)
 

   (7)  1.2158542037080535
                                                            Type: DoubleFloat
                                       Time: 0.07 (IN) + 0.03 (OT) = 0.10 sec
% - 12/%pi**2
 

   (8)  2.2204460492503131e-16
                                                            Type: DoubleFloat
                                                   Time: 0.03 (IN) = 0.03 sec
-- => sqrt(2/(pi z)) (sin z/z - cos z)   [Gradshteyn and Ryzhik 8.464(3)]
besselJ(3/2, z)
 

                3
   (9)  besselJ(-,z)
                2
                                                     Type: Expression Integer
                           Time: 0.30 (IN) + 0.02 (EV) + 0.02 (OT) = 0.33 sec
-- d/dz J_0(z) => - J_1(z)   [Gradshteyn and Ryzhik 8.473(4)]
D(besselJ(0, z), z)
 

         - besselJ(1,z) + besselJ(- 1,z)
   (10)  -------------------------------
                        2
                                                     Type: Expression Integer
                           Time: 0.05 (IN) + 0.05 (EV) + 0.02 (GC) = 0.12 sec
-- Associated Legendre (spherical) function of the 1st kind: P^mu_nu(0)
-- => 2^mu sqrt(pi) / [Gamma([nu - mu]/2 + 1) Gamma([- nu - mu + 1]/2)]
--    [Gradshteyn and Ryzhik 8.756(1)]
--P(mu, nu, 0)
-- P^1_3(x) => -3/2 sqrt(1 - x^2) (5 x^2 - 1)
--             [Gradshteyn and Ryzhik 8.813(4)]
--P(1, 3, x)
-- nth Chebyshev polynomial of the 1st kind: T_n(x) => 0
-- [Gradshteyn and Ryzhik 8.941(1)]
chebyshevT(1008, x) - 2*x*chebyshevT(1007, x) + chebyshevT(1006, x)
 

   (11)  0
                                                     Type: Polynomial Integer
                        Time: 0.03 (IN) + 30.50 (EV) + 11.38 (GC) = 41.91 sec
-- T_n(-1) => (-1)^n   [Gradshteyn and Ryzhik 8.944(2)]
chebyshevT(n, -1)
 
   There are 1 exposed and 0 unexposed library operations named 
      chebyshevT having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                           )display op chebyshevT
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      chebyshevT with argument type(s) 
                                 Variable n
                                   Integer
      
-- => arcsin z/z   [Gradshteyn and Ryzhik 9.121(26)]
--hypergeometric([1/2, 1/2], [3/2], z**2)
-- => sin(n z)/(n sin z cos z)   [Gradshteyn and Ryzhik 9.121(17)]
--hypergeometric([(n + 2)/2, -(n - 2)/2], [3/2], sin(z)**2)
-- zeta'(0) => - 1/2 log(2 pi)   [Gradshteyn and Ryzhik 9.542(4)]
--subst(D(zeta(x), x), x = 0)
-- Dirac delta distribution => 3 f(4/5) + g'(1)
--f:= operator('f);
--g:= operator('g);
--integrate(f((x + 2)/5)*delta((x - 2)/3) - g(x)*D(delta(x - 1), x), x = 0..3)
--)clear properties f g
-- Define an antisymmetric function f
f:= operator('f);
 

                                                          Type: BasicOperator
                                                   Time: 0.07 (IN) = 0.07 sec
-- Test it out => [-f(a, b, c), 0]
[f(c, b, a), f(c, b, c)]
 

   (13)  [f(c,b,a),f(c,b,c)]
                                                Type: List Expression Integer
                                       Time: 0.17 (IN) + 0.02 (OT) = 0.18 sec
)clear properties f
 
-- ---------- Quit ----------
)quit
 

real   68.3
user   34.3
sys    0.4
\end{verbatim}
\section{The Complex Domain}
\begin{verbatim}

 
-- ---------- The Complex Domain ----------
-- Complex functions---separate into their real and imaginary parts.
-- Here, variables default to REAL.
-- [Re(x + i y), Im(x + i y)] => [Re(x) - Im(y), Im(x) + Re(y)]
-- for x and y complex
[real(x + %i*y), imag(x + %i*y)]
 

   (1)  [x,y]
                                                Type: List Expression Integer
               Time: 0.55 (IN) + 0.30 (EV) + 0.22 (OT) + 0.25 (GC) = 1.32 sec
x : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
y : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
[real(x + %i*y), imag(x + %i*y)]
 

   (4)  [x,y]
                                                Type: List Expression Integer
                                       Time: 0.52 (IN) + 0.07 (OT) = 0.58 sec
)clear properties x y
 
-- => 1   [W. Kahan]
abs(3 - sqrt(7) + %i*sqrt(6*sqrt(7) - 15))
 

               +----------+
               |  +-+          +-+
   (5)  abs(%i\|6\|7  - 15  - \|7  + 3)
                                             Type: Expression Complex Integer
                           Time: 0.20 (IN) + 0.10 (EV) + 0.05 (OT) = 0.35 sec
complexForm(%)
 

   (6)  1
                                             Type: Complex Expression Integer
                                                   Time: 0.07 (EV) = 0.07 sec
-- => 1/sqrt(a^2 + (1/a + b)^2) for real a, b
abs(1/(a + %i/a + %i*b))
 

                  %i a
   (7)  abs(---------------)
                      2
            a b - %i a  + 1
                                             Type: Expression Complex Integer
                           Time: 0.78 (IN) + 0.02 (EV) + 0.07 (OT) = 0.87 sec
complexForm(%)
 

         +--------------------+
         |          2
         |         a
   (8)   |--------------------
         | 2 2           4
        \|a b  + 2a b + a  + 1
                                             Type: Complex Expression Integer
                                       Time: 0.12 (EV) + 0.02 (GC) = 0.13 sec
-- => log 5 + i arctan(4/3)
complexForm(log(3 + 4*%i))
 

        log(25)        4
   (9)  ------- + atan(-)%i
           2           3
                                             Type: Complex Expression Integer
                                       Time: 0.03 (IN) + 0.05 (EV) = 0.08 sec
-- => [sin(x) cos(x) + i sinh(y) cosh(y)] / [cos(x)^2 + sinh(y)^2]
simplify(complexForm(tan(x + %i*y)))
 

                  - 2y          +---+  - 4y    +---+
         4cos(x)%e    sin(x) - \|- 1 %e     + \|- 1
   (10)  -------------------------------------------
                      2       - 2y     - 4y
              (4cos(x)  - 2)%e     + %e     + 1
                                                     Type: Expression Integer
               Time: 0.10 (IN) + 0.85 (EV) + 0.03 (OT) + 0.03 (GC) = 1.02 sec
simplify(complexNormalize(%))
 

                      +---+
            +---+  2x\|- 1  - 2y    +---+
         - \|- 1 %e              + \|- 1
   (11)  --------------------------------
                     +---+
                  2x\|- 1  - 2y
                %e              + 1
                                                     Type: Expression Integer
                                       Time: 1.60 (EV) + 0.02 (OT) = 1.62 sec
simp(e) == [simplify(e), normalize(e), complexNormalize(e)]
 
                                                                   Type: Void
                                                                  Time: 0 sec
-- Check for branch abuse.  See David R. Stoutemyer, ``Crimes and Misdemeanors
-- in the Computer Algebra Trade'', _Notices of the American Mathematical
-- Society_, Volume 38, Number 7, September 1991, 778--785.  This first
-- expression can simplify to sqrt(x y)/sqrt(x), but no further in general
-- (consider what happens when x, y = -1).  sqrt(x y) = sqrt(x) sqrt(y) if
-- either x >= 0 or y >= 0 or both x and y lie in the right-half plane
-- (Re x, Re y > 0) [considering principal values].
sqrt(x*y*abs(z)**2) / (sqrt(x)*abs(z))
 

          +-----------+
          |          2
         \|x y abs(z)
   (13)  --------------
                  +-+
           abs(z)\|x
                                                     Type: Expression Integer
               Time: 0.55 (IN) + 0.03 (EV) + 0.02 (OT) + 0.35 (GC) = 0.95 sec
simp(%)
 
   Compiling function simp with type Expression Integer -> List 
      Expression Integer 

           +-----------+  +-----------+  +-----------+
           |          2   |          2   |          2
          \|x y abs(z)   \|x y abs(z)   \|x y abs(z)
   (14)  [--------------,--------------,--------------]
                   +-+            +-+            +-+
            abs(z)\|x      abs(z)\|x      abs(z)\|x
                                                Type: List Expression Integer
                           Time: 0.03 (IN) + 0.13 (EV) + 0.03 (OT) = 0.20 sec
x : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
y : Complex Expression Integer
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
sqrt(x*y*abs(z)**2) / (sqrt(x)*abs(z))
 

          +-----------+
          |          2
         \|x y abs(z)
   (18)  --------------
                  +-+
           abs(z)\|x
                                             Type: Complex Expression Integer
                                       Time: 0.10 (IN) + 0.05 (OT) = 0.15 sec
simp(%)
 
   Compiling function simp with type Complex Expression Integer -> List
      Expression Complex Integer 

           +-----------+  +-----------+  +-----------+
           |          2   |          2   |          2
          \|x y abs(z)   \|x y abs(z)   \|x y abs(z)
   (19)  [--------------,--------------,--------------]
                   +-+            +-+            +-+
            abs(z)\|x      abs(z)\|x      abs(z)\|x
                                        Type: List Expression Complex Integer
                           Time: 0.32 (IN) + 0.13 (EV) + 0.07 (OT) = 0.52 sec
)clear properties x y z
 
-- Special case: sqrt(x y |z|^2)/(sqrt(x) |z|) => sqrt(y) [PV] for y >= 0
-- sqrt(1/z) = 1/sqrt(z) except when z is real and negative, in which case
-- sqrt(1/z) = - 1/sqrt(z) [considering principal values]
sqrt(1/z) - 1/sqrt(z)
 

   (20)  0
                                                     Type: Expression Integer
                                                   Time: 0.13 (IN) = 0.13 sec
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
sqrt(1/z) - 1/sqrt(z)
 

   (22)  0
                                             Type: Complex Expression Integer
                           Time: 0.02 (IN) + 0.02 (EV) + 0.02 (OT) = 0.05 sec
)clear properties z
 
-- Special case: sqrt(1/z) - 1/sqrt(z) => 0 [PV] for z > 0
-- Special case: sqrt(1/z) + 1/sqrt(z) => 0 [PV] for z < 0
-- sqrt(e^z) = e^(z/2) if and only if Im z is contained in the interval
-- ((4 n - 1) pi, (4 n + 1) pi] for n an integer: ..., (-5 pi, -3 pi],
-- (-pi, pi], (3 pi, 5 pi], ...; otherwise, sqrt(e^z) = - e^(z/2) [considering
-- principal values]
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
sqrt(%e**z) - %e**(z/2)
 

                    z
          +---+     -
          |  z      2
   (24)  \|%e   - %e
                                             Type: Complex Expression Integer
                           Time: 0.15 (IN) + 0.05 (EV) + 0.02 (OT) = 0.22 sec
simp(%)
 

                        +------+        +------+
                     z  |   z 2      z  |   z 2      z
           +---+     -  |   -        -  |   -        -
           |  z      2  |   2        2  |   2        2
   (25)  [\|%e   - %e ,\|(%e )   - %e ,\|(%e )   - %e ]
                                        Type: List Expression Complex Integer
                           Time: 0.22 (IN) + 0.42 (EV) + 0.03 (OT) = 0.67 sec
)clear properties z
 
-- Special case: sqrt(e^z) - e^(z/2) => 0 [PV] for z real
sqrt(%e**z) - %e**(z/2)
 

                    z
          +---+     -
          |  z      2
   (26)  \|%e   - %e
                                                     Type: Expression Integer
                           Time: 0.52 (IN) + 0.07 (EV) + 0.07 (OT) = 0.65 sec
simp(%)
 

                        +------+        +------+
                     z  |   z 2      z  |   z 2      z
           +---+     -  |   -        -  |   -        -
           |  z      2  |   2        2  |   2        2
   (27)  [\|%e   - %e ,\|(%e )   - %e ,\|(%e )   - %e ]
                                                Type: List Expression Integer
                                       Time: 0.27 (EV) + 0.02 (OT) = 0.28 sec
-- The principal value of this expression is - e^(3 i) = - cos 3 - i sin 3
sqrt(%e**(6*%i))
 

          +-----+
          |  6%i
   (28)  \|%e
                                             Type: Expression Complex Integer
                           Time: 0.15 (IN) + 0.05 (EV) + 0.02 (OT) = 0.22 sec
simplify(complexForm(%))
 

                        sin(6)              sin(6)
                   atan(------)        atan(------)
          +---+         cos(6)              cos(6)
   (29)  \|- 1 sin(------------) + cos(------------)
                         2                   2
                                                     Type: Expression Integer
                           Time: 0.02 (IN) + 0.15 (EV) + 0.02 (OT) = 0.18 sec
% :: Complex Float
 

   (30)  0.9899924966 0044545727 - 0.1411200080 598672221 %i
                                                          Type: Complex Float
                                                   Time: 0.20 (IN) = 0.20 sec
-- log(e^z) = z if and only if Im z is contained in the interval (-pi, pi]
-- [considering principal values]
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
log(%e**z)
 

   (32)  z
                                             Type: Complex Expression Integer
                                                   Time: 0.05 (EV) = 0.05 sec
)clear properties z
 
-- Special case: log(e^z) => z [PV] for z real
log(%e**z)
 

   (33)  z
                                                     Type: Expression Integer
                                       Time: 0.02 (IN) + 0.03 (EV) = 0.05 sec
-- The principal value of this expression is (10 - 4 pi) i
log(%e**(10*%i))
 

               10%i
   (34)  log(%e    )
                                             Type: Expression Complex Integer
                           Time: 0.02 (IN) + 0.03 (EV) + 0.03 (OT) = 0.08 sec
simplify(complexForm(%))
 

          +---+     sin(10)
   (35)  \|- 1 atan(-------)
                    cos(10)
                                                     Type: Expression Integer
                           Time: 0.02 (IN) + 0.07 (EV) + 0.02 (OT) = 0.10 sec
% :: Complex Float
 

   (36)  0.5752220392 3062028461 %i
                                                          Type: Complex Float
                                                   Time: 0.02 (IN) = 0.02 sec
-- (x y)^n = x^n y^n if either x > 0 or y > 0 or both x and y lie in the
-- right-half plane (Re x, Re y > 0) or n is an integer [considering principal
-- values]
(x*y)**(1/n) - x**(1/n)*y**(1/n)
 

              1    1 1
              -    - -
              n    n n
   (37)  (x y)  - x y
                                                     Type: Expression Integer
                           Time: 0.35 (IN) + 0.02 (EV) + 0.05 (OT) = 0.42 sec
simp(%)
 

               1    1 1
               -    - -
               n    n n
   (38)  [(x y)  - x y ,0,0]
                                                Type: List Expression Integer
                                                   Time: 0.62 (EV) = 0.62 sec
x : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
y : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
(x*y)**(1/n) - x**(1/n)*y**(1/n)
 

                2 2           2        2
           log(x y )     log(x )  log(y )
           ---------     -------  -------
               2n           2n       2n
   (41)  %e          - %e       %e
                                             Type: Complex Expression Integer
                           Time: 0.27 (IN) + 0.08 (EV) + 0.03 (OT) = 0.38 sec
simp(%)
 

                 2 2           2         2
            log(x y )     log(y ) + log(x )
            ---------     -----------------
                2n                2n
   (42)  [%e          - %e                 ,0,0]
                                        Type: List Expression Complex Integer
               Time: 0.22 (IN) + 1.18 (EV) + 0.03 (OT) + 0.35 (GC) = 1.78 sec
-- Special case: (x y)^(1/n) - x^(1/n) y^(1/n) => 0 [PV] for y > 0
-- Special case: (x y)^n - x^n y^n => 0 [PV] for integer n
(x*y)**n - x**n*y**n
 

              n    n n
   (43)  (x y)  - x y
                                                     Type: Expression Integer
                                       Time: 0.18 (IN) + 0.02 (OT) = 0.20 sec
simp(%)
 

               n    n n
   (44)  [(x y)  - x y ,0,0]
                                                Type: List Expression Integer
                                                   Time: 0.62 (EV) = 0.62 sec
)clear properties x y
 
-- arctan(tan(z)) = z for z real if and only if z is contained in the interval
-- (-pi/2, pi/2] [considering principal values]
atan(tan(z))
 

   (45)  z
                                                     Type: Expression Integer
                                                   Time: 0.02 (IN) = 0.02 sec
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
atan(tan(z))
 

   (47)
                    2cos(z)sin(z)
         - atan(---------------------)
                      2         2
                sin(z)  - cos(z)  - 1
       + 
                                 2cos(z)sin(z)
         atan(---------------------------------------------------)
                    4           2           2         4         2
              sin(z)  + (2cos(z)  - 1)sin(z)  + cos(z)  + cos(z)
    /
       2
   + 
                                  4          2      2          4
                           4sin(z)  + 8cos(z) sin(z)  + 4cos(z)
           - log(--------------------------------------------------------)
                       4           2           2         4          2
                 sin(z)  + (2cos(z)  - 2)sin(z)  + cos(z)  + 2cos(z)  + 1
         + 
                                           4
           log(--------------------------------------------------------)
                     4           2           2         4          2
               sin(z)  + (2cos(z)  - 2)sin(z)  + cos(z)  + 2cos(z)  + 1
      /
         4
    *
       %i
                                             Type: Complex Expression Integer
                           Time: 0.02 (IN) + 0.17 (EV) + 0.05 (OT) = 0.23 sec
simplify(%)
 

              sin(z)
   (48)  atan(------)
              cos(z)
                                                     Type: Expression Integer
                                       Time: 0.23 (EV) + 0.02 (OT) = 0.25 sec
)clear properties z
 
-- Special case: arctan(tan(z)) => z [PV] for -pi/2 < z < pi/2
-- The principal value of this expression is 10 - 3 pi
atan(tan(10))
 

   (49)  10
                                                     Type: Expression Integer
                                                   Time: 0.02 (IN) = 0.02 sec
-- The principal value of this expression is 11 - 4 pi + 30 i = -1.56637 + 30 i
atan(tan(11 + 30*%i))
 

   (50)  11 + 30%i
                                             Type: Expression Complex Integer
                                                   Time: 0.03 (OT) = 0.03 sec
atan(tan(11.0 + 30.0*%i))
 
 
   >> Error detected within library code:
   log 0 generated

initial (51) -> 
real   47.6
user   15.8
sys    0.4

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

Wed Jan 28 05:31:43 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- The Complex Domain ----------
-- This is a challenge problem proposed by W. Kahan: simplify the following
-- expression for complex z.  Expanding out the expression produces
-- (z^2 + 1)/(2 z) +- (z + 1)*(z - 1)/(2 z) => z or 1/z in each of its branches
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
w:= (z + 1/z)/2
 

         2
        z  + 1
   (2)  ------
          2z
                                             Type: Complex Expression Integer
               Time: 0.33 (IN) + 0.08 (EV) + 0.22 (OT) + 0.15 (GC) = 0.78 sec
expr:= w + sqrt(w + 1)*sqrt(w - 1)
 

           +-----------+ +-----------+
           | 2           | 2
           |z  - 2z + 1  |z  + 2z + 1     2
        2z |-----------  |-----------  + z  + 1
          \|     2z     \|     2z
   (3)  ---------------------------------------
                           2z
                                             Type: Complex Expression Integer
               Time: 0.03 (IN) + 0.05 (EV) + 0.05 (OT) + 0.02 (GC) = 0.15 sec
)clear properties z w expr
 
-- ---------- Quit ----------
)quit
 

real   3.2
user   1.4
sys    0.2
\end{verbatim}
\section{Determining Zero Equivalence}
\begin{verbatim}
 
-- ---------- Determining Zero Equivalence ----------
-- The following expressions are all equal to zero
sqrt(997) - (997**3)**(1/6)
 

   (1)  0
                                                        Type: AlgebraicNumber
               Time: 0.08 (IN) + 0.27 (EV) + 0.17 (OT) + 0.10 (GC) = 0.62 sec
sqrt(999983) - (999983**3)**(1/6)
 

   (2)  0
                                                        Type: AlgebraicNumber
                           Time: 0.03 (IN) + 0.08 (EV) + 0.02 (OT) = 0.13 sec
(2**(1/3) + 4**(1/3))**3 - 6*(2**(1/3) + 4**(1/3)) - 6
 

         3+-+3+-+2     3+-+2     3+-+    3+-+
   (3)  3\|2 \|4   + (3\|2   - 6)\|4  - 6\|2
                                                        Type: AlgebraicNumber
                           Time: 0.07 (IN) + 0.10 (EV) + 0.05 (OT) = 0.22 sec
expand(%)
 

   (4)  0
                                                        Type: AlgebraicNumber
                           Time: 0.50 (IN) + 0.02 (OT) + 0.02 (GC) = 0.53 sec
cos(x)**3 + cos(x)*sin(x)**2 - cos(x)
 

                    2         3
   (5)  cos(x)sin(x)  + cos(x)  - cos(x)
                                                     Type: Expression Integer
                           Time: 0.15 (IN) + 0.08 (EV) + 0.05 (OT) = 0.28 sec
simplify(%)
 

   (6)  0
                                                     Type: Expression Integer
                           Time: 0.02 (IN) + 0.07 (EV) + 0.03 (OT) = 0.12 sec
-- See Joel Moses, ``Algebraic Simplification: A Guide for the Perplexed'',
-- _Communications of the Association of Computing Machinery_, Volume 14,
-- Number 8, August 1971, 527--537.  This expression is zero if Re(x) is
-- contained in the interval ((4 n - 1)/2 pi, (4 n + 1)/2 pi) for n an integer:
-- ..., (-5/2 pi, -3/2 pi), (-pi/2, pi/2), (3/2 pi, 5/2 pi), ...
expr:= log(tan(1/2*x + %pi/4)) - asinh(tan(x))
 

                2x + %pi
   (7)  log(tan(--------)) - asinh(tan(x))
                    4
                                                     Type: Expression Integer
                            Time: 0.83 (IN) + 0.05 (EV) + 0.12 (OT) = 1.0 sec
complexNormalize(expr)
 

   (8)
     -
        log
                                +---+ 4
                     (2x + %pi)\|- 1
                     ----------------
                             4
                 ((%e                )  - 1)
              *
                  +----------------------------------------------------+
                  |                               +---+ 4
                  |                    (2x + %pi)\|- 1
                  |                    ----------------
                  |                            4
                  |                4(%e                )
                  |- --------------------------------------------------
                  |                +---+ 8                  +---+ 4
                  |     (2x + %pi)\|- 1          (2x + %pi)\|- 1
                  |     ----------------         ----------------
                  |             4                        4
                 \|  (%e                )  - 2(%e                )  + 1
             + 
                                     +---+ 4
                          (2x + %pi)\|- 1
                          ----------------
                  +---+           4             +---+
               - \|- 1 (%e                )  - \|- 1
          /
                           +---+ 4
                (2x + %pi)\|- 1
                ----------------
                        4
             (%e                )  - 1
   + 
                               +---+ 2
                    (2x + %pi)\|- 1
                    ----------------
            +---+           4             +---+
         - \|- 1 (%e                )  + \|- 1
     log(--------------------------------------)
                              +---+ 2
                   (2x + %pi)\|- 1
                   ----------------
                           4
                (%e                )  + 1
                                                     Type: Expression Integer
               Time: 0.05 (IN) + 1.85 (EV) + 0.10 (OT) + 0.05 (GC) = 2.05 sec
-- Use a roundabout method---show that expr is a constant equal to zero
D(expr, x)
 

   (9)
                        +-----------+
        2x + %pi 2      |      2             2x + %pi       2        2x + %pi
   (tan(--------)  + 1)\|tan(x)  + 1  - 2tan(--------)tan(x)  - 2tan(--------)
            4                                    4                       4
   ---------------------------------------------------------------------------
                                          +-----------+
                                2x + %pi  |      2
                           2tan(--------)\|tan(x)  + 1
                                    4
                                                     Type: Expression Integer
                                       Time: 0.05 (EV) + 0.02 (OT) = 0.07 sec
simplify(real(complexNormalize(expand(simplify(%)))))
 

            +-----------------------+
            |     x 4        x 2             x 2
         -  |4cos(-)  - 4cos(-)  + 1  + 2cos(-)  - 1
           \|     2          2               2
   (10)  -------------------------------------------
                        x 4        x 2
                   4cos(-)  - 4cos(-)  + 1
                        2          2
                                                     Type: Expression Integer
               Time: 0.08 (IN) + 3.50 (EV) + 0.03 (OT) + 0.52 (GC) = 4.13 sec
normalize(eval(expr, x = 0))
 

   (11)  0
                                                     Type: Expression Integer
                           Time: 0.83 (IN) + 0.02 (EV) + 0.17 (OT) = 1.02 sec
)clear properties expr
 
log((2*sqrt(r) + 1)/sqrt(4*r + 4*sqrt(r) + 1))
 

                   +-+
                 2\|r  + 1
   (12)  log(-----------------)
              +--------------+
              |  +-+
             \|4\|r  + 4r + 1
                                                     Type: Expression Integer
                           Time: 0.10 (IN) + 0.02 (EV) + 0.03 (OT) = 0.15 sec
simplify(%)
 

                   +-+
                 2\|r  + 1
   (13)  log(-----------------)
              +--------------+
              |  +-+
             \|4\|r  + 4r + 1
                                                     Type: Expression Integer
                                       Time: 0.03 (EV) + 0.02 (OT) = 0.05 sec
(4*r + 4*sqrt(r) + 1)**(sqrt(r)/(2*sqrt(r) + 1)) _
   * (2*sqrt(r) + 1)**(1/(2*sqrt(r) + 1)) - 2*sqrt(r) - 1
 

                                                 +-+
                        1                       \|r
                    ---------                ---------
                      +-+                      +-+
            +-+     2\|r  + 1   +-+          2\|r  + 1     +-+
   (14)  (2\|r  + 1)         (4\|r  + 4r + 1)          - 2\|r  - 1
                                                     Type: Expression Integer
                           Time: 0.22 (IN) + 0.05 (EV) + 0.02 (OT) = 0.28 sec
normalize(%)
 

   (15)  0
                                                     Type: Expression Integer
                                                   Time: 1.02 (EV) = 1.02 sec
-- [Gradshteyn and Ryzhik 9.535(3)]
--2**(1 - z)*Gamma(z)*zeta(z)*cos(z*%pi/2) - %pi^z*zeta(1 - z)
-- ---------- Quit ----------
)quit
 

real   31.5
user   12.1
sys    0.6
\end{verbatim}
\section{Equations}
\begin{verbatim}
 
-- ---------- Equations ----------
-- Manipulate an equation using a natural syntax:
-- (x = 2)/2 + (1 = 1) => x/2 + 1 = 2
(x = 2)/2 + (1 = 1)
 

        x + 2
   (1)  -----= 2
          2
                                   Type: Equation Fraction Polynomial Integer
               Time: 0.55 (IN) + 0.08 (EV) + 0.20 (OT) + 0.08 (GC) = 0.92 sec
-- Solve various nonlinear equations---this cubic polynomial has all real roots
radicalSolve(3*x**3 - 18*x**2 + 33*x - 19 = 0, x)
 

   (2)
                        +----------+2                 +----------+
                        | +---+                       | +---+
            +---+       |\|- 3  + 1       +---+       |\|- 3  + 1
       (- 3\|- 3  + 3)  |----------  + (6\|- 3  + 6)  |---------- - 2
                       3|    +---+                   3|    +---+
                       \|  6\|- 3                    \|  6\|- 3
   [x= --------------------------------------------------------------,
                                        +----------+
                                        | +---+
                            +---+       |\|- 3  + 1
                         (3\|- 3  + 3)  |----------
                                       3|    +---+
                                       \|  6\|- 3
                        +----------+2                 +----------+
                        | +---+                       | +---+
            +---+       |\|- 3  + 1       +---+       |\|- 3  + 1
       (- 3\|- 3  - 3)  |----------  + (6\|- 3  - 6)  |---------- + 2
                       3|    +---+                   3|    +---+
                       \|  6\|- 3                    \|  6\|- 3
    x= --------------------------------------------------------------,
                                        +----------+
                                        | +---+
                            +---+       |\|- 3  + 1
                         (3\|- 3  - 3)  |----------
                                       3|    +---+
                                       \|  6\|- 3
          +----------+2     +----------+
          | +---+           | +---+
          |\|- 3  + 1       |\|- 3  + 1
       3  |----------  + 6  |---------- + 1
         3|    +---+       3|    +---+
         \|  6\|- 3        \|  6\|- 3
    x= ------------------------------------]
                     +----------+
                     | +---+
                     |\|- 3  + 1
                  3  |----------
                    3|    +---+
                    \|  6\|- 3
                                       Type: List Equation Expression Integer
               Time: 0.10 (IN) + 0.55 (EV) + 0.15 (OT) + 0.08 (GC) = 0.88 sec
map(e +-> lhs(e) = simplify(complexForm(rhs(e))), %)
 

   (3)
          +-+    %pi        %pi      +-+      +-+    %pi        %pi      +-+
       - \|3 sin(---) - cos(---) + 2\|3      \|3 sin(---) - cos(---) + 2\|3
                  18         18                       18         18
   [x= ---------------------------------, x= -------------------------------,
                       +-+                                  +-+
                      \|3                                  \|3
            %pi      +-+
       2cos(---) + 2\|3
             18
    x= -----------------]
               +-+
              \|3
                                       Type: List Equation Expression Integer
                Time: 0.25 (IN) + 1.62 (EV) + 0.12 (OT) + 0.02 (GC) = 2.0 sec
-- Some simple seeming problems can have messy answers:
-- x = {  [sqrt(5) - 1]/4 +/- 5^(1/4) sqrt(sqrt(5) + 1)/[2 sqrt(2)] i,
--      - [sqrt(5) + 1]/4 +/- 5^(1/4) sqrt(sqrt(5) - 1)/[2 sqrt(2)] i}
eqn:= x**4 + x**3 + x**2 + x + 1 = 0
 

         4    3    2
   (4)  x  + x  + x  + x + 1= 0
                                            Type: Equation Polynomial Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
radicalSolve(eqn, x)
 

   (5)
   [
     x =
           -
                2
             *
                ROOT
                               +-------------+2      +-------------+
                               |    +---+            |    +---+
                               |    |  5             |    |  5
                               |45  |- - - 25        |45  |- - - 25
                               |   \|  3             |   \|  3
                         (- 4 3|-------------  - 10 3|------------- - 40)
                              \|      2             \|      2
                      *
                          +-------------------------------------------+
                          |   +-------------+2     +-------------+
                          |   |    +---+           |    +---+
                          |   |    |  5            |    |  5
                          |   |45  |- - - 25       |45  |- - - 25
                          |   |   \|  3            |   \|  3
                          |4 3|-------------  - 5 3|------------- + 40
                          |  \|      2            \|      2
                          |-------------------------------------------
                          |                 +-------------+
                          |                 |    +---+
                          |                 |    |  5
                          |                 |45  |- - - 25
                          |                 |   \|  3
                          |             12 3|-------------
                         \|                \|      2
                     + 
                             +-------------+
                             |    +---+
                             |    |  5
                             |45  |- - - 25
                             |   \|  3
                       - 15 3|-------------
                            \|      2
                  /
                           +-------------+
                           |    +---+
                           |    |  5
                           |45  |- - - 25
                           |   \|  3
                       12 3|-------------
                          \|      2
                    *
                        +-------------------------------------------+
                        |   +-------------+2     +-------------+
                        |   |    +---+           |    +---+
                        |   |    |  5            |    |  5
                        |   |45  |- - - 25       |45  |- - - 25
                        |   |   \|  3            |   \|  3
                        |4 3|-------------  - 5 3|------------- + 40
                        |  \|      2            \|      2
                        |-------------------------------------------
                        |                 +-------------+
                        |                 |    +---+
                        |                 |    |  5
                        |                 |45  |- - - 25
                        |                 |   \|  3
                        |             12 3|-------------
                       \|                \|      2
         + 
             +-------------------------------------------+
             |   +-------------+2     +-------------+
             |   |    +---+           |    +---+
             |   |    |  5            |    |  5
             |   |45  |- - - 25       |45  |- - - 25
             |   |   \|  3            |   \|  3
             |4 3|-------------  - 5 3|------------- + 40
             |  \|      2            \|      2
           2 |-------------------------------------------  - 1
             |                 +-------------+
             |                 |    +---+
             |                 |    |  5
             |                 |45  |- - - 25
             |                 |   \|  3
             |             12 3|-------------
            \|                \|      2
      /
         4
     ,

     x =
             2
          *
             ROOT
                            +-------------+2      +-------------+
                            |    +---+            |    +---+
                            |    |  5             |    |  5
                            |45  |- - - 25        |45  |- - - 25
                            |   \|  3             |   \|  3
                      (- 4 3|-------------  - 10 3|------------- - 40)
                           \|      2             \|      2
                   *
                       +-------------------------------------------+
                       |   +-------------+2     +-------------+
                       |   |    +---+           |    +---+
                       |   |    |  5            |    |  5
                       |   |45  |- - - 25       |45  |- - - 25
                       |   |   \|  3            |   \|  3
                       |4 3|-------------  - 5 3|------------- + 40
                       |  \|      2            \|      2
                       |-------------------------------------------
                       |                 +-------------+
                       |                 |    +---+
                       |                 |    |  5
                       |                 |45  |- - - 25
                       |                 |   \|  3
                       |             12 3|-------------
                      \|                \|      2
                  + 
                          +-------------+
                          |    +---+
                          |    |  5
                          |45  |- - - 25
                          |   \|  3
                    - 15 3|-------------
                         \|      2
               /
                        +-------------+
                        |    +---+
                        |    |  5
                        |45  |- - - 25
                        |   \|  3
                    12 3|-------------
                       \|      2
                 *
                     +-------------------------------------------+
                     |   +-------------+2     +-------------+
                     |   |    +---+           |    +---+
                     |   |    |  5            |    |  5
                     |   |45  |- - - 25       |45  |- - - 25
                     |   |   \|  3            |   \|  3
                     |4 3|-------------  - 5 3|------------- + 40
                     |  \|      2            \|      2
                     |-------------------------------------------
                     |                 +-------------+
                     |                 |    +---+
                     |                 |    |  5
                     |                 |45  |- - - 25
                     |                 |   \|  3
                     |             12 3|-------------
                    \|                \|      2
         + 
             +-------------------------------------------+
             |   +-------------+2     +-------------+
             |   |    +---+           |    +---+
             |   |    |  5            |    |  5
             |   |45  |- - - 25       |45  |- - - 25
             |   |   \|  3            |   \|  3
             |4 3|-------------  - 5 3|------------- + 40
             |  \|      2            \|      2
           2 |-------------------------------------------  - 1
             |                 +-------------+
             |                 |    +---+
             |                 |    |  5
             |                 |45  |- - - 25
             |                 |   \|  3
             |             12 3|-------------
            \|                \|      2
      /
         4
     ,

     x =
           -
                2
             *
                ROOT
                               +-------------+2      +-------------+
                               |    +---+            |    +---+
                               |    |  5             |    |  5
                               |45  |- - - 25        |45  |- - - 25
                               |   \|  3             |   \|  3
                         (- 4 3|-------------  - 10 3|------------- - 40)
                              \|      2             \|      2
                      *
                          +-------------------------------------------+
                          |   +-------------+2     +-------------+
                          |   |    +---+           |    +---+
                          |   |    |  5            |    |  5
                          |   |45  |- - - 25       |45  |- - - 25
                          |   |   \|  3            |   \|  3
                          |4 3|-------------  - 5 3|------------- + 40
                          |  \|      2            \|      2
                          |-------------------------------------------
                          |                 +-------------+
                          |                 |    +---+
                          |                 |    |  5
                          |                 |45  |- - - 25
                          |                 |   \|  3
                          |             12 3|-------------
                         \|                \|      2
                     + 
                           +-------------+
                           |    +---+
                           |    |  5
                           |45  |- - - 25
                           |   \|  3
                       15 3|-------------
                          \|      2
                  /
                           +-------------+
                           |    +---+
                           |    |  5
                           |45  |- - - 25
                           |   \|  3
                       12 3|-------------
                          \|      2
                    *
                        +-------------------------------------------+
                        |   +-------------+2     +-------------+
                        |   |    +---+           |    +---+
                        |   |    |  5            |    |  5
                        |   |45  |- - - 25       |45  |- - - 25
                        |   |   \|  3            |   \|  3
                        |4 3|-------------  - 5 3|------------- + 40
                        |  \|      2            \|      2
                        |-------------------------------------------
                        |                 +-------------+
                        |                 |    +---+
                        |                 |    |  5
                        |                 |45  |- - - 25
                        |                 |   \|  3
                        |             12 3|-------------
                       \|                \|      2
         + 
               +-------------------------------------------+
               |   +-------------+2     +-------------+
               |   |    +---+           |    +---+
               |   |    |  5            |    |  5
               |   |45  |- - - 25       |45  |- - - 25
               |   |   \|  3            |   \|  3
               |4 3|-------------  - 5 3|------------- + 40
               |  \|      2            \|      2
           - 2 |-------------------------------------------  - 1
               |                 +-------------+
               |                 |    +---+
               |                 |    |  5
               |                 |45  |- - - 25
               |                 |   \|  3
               |             12 3|-------------
              \|                \|      2
      /
         4
     ,

     x =
             2
          *
             ROOT
                            +-------------+2      +-------------+
                            |    +---+            |    +---+
                            |    |  5             |    |  5
                            |45  |- - - 25        |45  |- - - 25
                            |   \|  3             |   \|  3
                      (- 4 3|-------------  - 10 3|------------- - 40)
                           \|      2             \|      2
                   *
                       +-------------------------------------------+
                       |   +-------------+2     +-------------+
                       |   |    +---+           |    +---+
                       |   |    |  5            |    |  5
                       |   |45  |- - - 25       |45  |- - - 25
                       |   |   \|  3            |   \|  3
                       |4 3|-------------  - 5 3|------------- + 40
                       |  \|      2            \|      2
                       |-------------------------------------------
                       |                 +-------------+
                       |                 |    +---+
                       |                 |    |  5
                       |                 |45  |- - - 25
                       |                 |   \|  3
                       |             12 3|-------------
                      \|                \|      2
                  + 
                        +-------------+
                        |    +---+
                        |    |  5
                        |45  |- - - 25
                        |   \|  3
                    15 3|-------------
                       \|      2
               /
                        +-------------+
                        |    +---+
                        |    |  5
                        |45  |- - - 25
                        |   \|  3
                    12 3|-------------
                       \|      2
                 *
                     +-------------------------------------------+
                     |   +-------------+2     +-------------+
                     |   |    +---+           |    +---+
                     |   |    |  5            |    |  5
                     |   |45  |- - - 25       |45  |- - - 25
                     |   |   \|  3            |   \|  3
                     |4 3|-------------  - 5 3|------------- + 40
                     |  \|      2            \|      2
                     |-------------------------------------------
                     |                 +-------------+
                     |                 |    +---+
                     |                 |    |  5
                     |                 |45  |- - - 25
                     |                 |   \|  3
                     |             12 3|-------------
                    \|                \|      2
         + 
               +-------------------------------------------+
               |   +-------------+2     +-------------+
               |   |    +---+           |    +---+
               |   |    |  5            |    |  5
               |   |45  |- - - 25       |45  |- - - 25
               |   |   \|  3            |   \|  3
               |4 3|-------------  - 5 3|------------- + 40
               |  \|      2            \|      2
           - 2 |-------------------------------------------  - 1
               |                 +-------------+
               |                 |    +---+
               |                 |    |  5
               |                 |45  |- - - 25
               |                 |   \|  3
               |             12 3|-------------
              \|                \|      2
      /
         4
     ]
                                       Type: List Equation Expression Integer
                                       Time: 0.05 (EV) + 0.52 (OT) = 0.57 sec
-- Check one of the answers
eval(eqn, %.1)
 

   (6)  0= 0
                                            Type: Equation Expression Integer
                           Time: 0.47 (IN) + 0.58 (EV) + 0.07 (OT) = 1.12 sec
)clear properties eqn
 
-- x = {2^(1/3) +- sqrt(3), +- sqrt(3) - 1/2^(2/3) +- i sqrt(3)/2^(2/3)}
--     [Mohamed Omar Rayes]
solve(x**6 - 9*x**4 - 4*x**3 + 27*x**2 - 36*x - 23 = 0, x)
 

          6     4     3      2
   (7)  [x  - 9x  - 4x  + 27x  - 36x - 23= 0]
                              Type: List Equation Fraction Polynomial Integer
                           Time: 0.23 (IN) + 0.08 (EV) + 0.13 (OT) = 0.45 sec
-- x = {1, e^(+- 2 pi i/7), e^(+- 4 pi i/7), e^(+- 6 pi i/7)}
solve(x**7 - 1 = 0, x)
 

               6    5    4    3    2
   (8)  [x= 1,x  + x  + x  + x  + x  + x + 1= 0]
                              Type: List Equation Fraction Polynomial Integer
                                                   Time: 0.05 (EV) = 0.05 sec
-- x = 1 +- sqrt(+-sqrt(+-4 sqrt(3) - 3) - 3)/sqrt(2)   [Richard Liska]
solve(x**8 - 8*x**7 + 34*x**6 - 92*x**5 + 175*x**4 - 236*x**3 + 226*x**2 _
      - 140*x + 46 = 0, x)
 

          8     7      6      5       4       3       2
   (9)  [x  - 8x  + 34x  - 92x  + 175x  - 236x  + 226x  - 140x + 46= 0]
                              Type: List Equation Fraction Polynomial Integer
                           Time: 0.05 (IN) + 0.02 (EV) + 0.05 (OT) = 0.12 sec
-- The following equations have an infinite number of solutions (let n be an
-- arbitrary integer):
-- x = {log(sqrt(z) - 1), log(sqrt(z) + 1) + i pi} [+ n 2 pi i, + n 2 pi i]
%e**(2*x) + 2*%e**x + 1 = z
 

           2x      x
   (10)  %e   + 2%e  + 1= z
                                            Type: Equation Expression Integer
                           Time: 0.20 (IN) + 0.07 (EV) + 0.05 (OT) = 0.32 sec
solve(%, x)
 

                  +-+                +-+
   (11)  [x= log(\|z  - 1),x= log(- \|z  - 1)]
                                       Type: List Equation Expression Integer
               Time: 0.32 (IN) + 0.85 (EV) + 0.12 (OT) + 0.38 (GC) = 1.67 sec
-- x = (1 +- sqrt(9 - 8 n pi i))/2.  Real solutions correspond to n = 0 =>
-- x = {-1, 2}
solve(exp(2 - x**2) = exp(-x), x)
 

   (12)  []
                                       Type: List Equation Expression Integer
                                       Time: 0.17 (EV) + 0.02 (OT) = 0.18 sec
-- x = -W[n](-1) [e.g., -W[0](-1) = 0.31813 - 1.33724 i] where W[n](x) is the
-- nth branch of Lambert's W function
solve(exp(x) = x, x)
 

   (13)  []
                                       Type: List Equation Expression Integer
                           Time: 0.07 (IN) + 0.07 (EV) + 0.02 (OT) = 0.15 sec
-- x = {-1, 1}
solve(x**x = x, x)
 

   (14)  []
                                       Type: List Equation Expression Integer
                           Time: 0.03 (IN) + 0.08 (EV) + 0.02 (OT) = 0.13 sec
-- This equation is already factored and so *should* be easy to solve:
-- x = {-1, 2*{+-arcsinh(1) i + n pi}, 3*{pi/6 + n pi/3}}
(x + 1) * (sin(x)**2 + 1)**2 * cos(3*x)**3 = 0
 

                       3      4                  3      2                 3
   (15)  (x + 1)cos(3x) sin(x)  + (2x + 2)cos(3x) sin(x)  + (x + 1)cos(3x) = 0
                                            Type: Equation Expression Integer
                           Time: 0.05 (IN) + 0.03 (EV) + 0.03 (OT) = 0.12 sec
solve(%, x)
 

   (16)  []
                                       Type: List Equation Expression Integer
                                       Time: 2.88 (EV) + 0.02 (GC) = 2.90 sec
-- x = pi/4 [+ n pi]
solve(sin(x) = cos(x), x)
 

             %pi
   (17)  [x= ---]
              4
                                       Type: List Equation Expression Integer
                                       Time: 0.02 (IN) + 0.15 (EV) = 0.17 sec
solve(tan(x) = 1, x)
 

             %pi
   (18)  [x= ---]
              4
                                       Type: List Equation Expression Integer
                                                   Time: 0.03 (EV) = 0.03 sec
-- x = {pi/6, 5 pi/6} [ + n 2 pi, + n 2 pi ]
solve(sin(x) = 1/2, x)
 

                  1
   (19)  [x= asin(-)]
                  2
                                       Type: List Equation Expression Integer
                           Time: 0.08 (IN) + 0.02 (EV) + 0.02 (OT) = 0.12 sec
map(e +-> lhs(e) = normalize(rhs(e)), %)
 

             %pi
   (20)  [x= ---]
              6
                                       Type: List Equation Expression Integer
                                       Time: 0.05 (IN) + 0.02 (EV) = 0.07 sec
-- x = {0, 0} [+ n pi, + n 2 pi]
solve(sin(x) = tan(x), x)
 

   (21)  [x= 0]
                                       Type: List Equation Expression Integer
                                                   Time: 0.15 (EV) = 0.15 sec
-- x = {0, 0, 0}
solve(asin(x) = atan(x), x)
 

   (22)  [x= 0]
                                       Type: List Equation Expression Integer
                                       Time: 0.68 (EV) + 0.02 (OT) = 0.70 sec
-- x = sqrt[(sqrt(5) - 1)/2]
solve(acos(x) = atan(x), x)
 

   (23)
          +-----------+     +-----------+       +---------+     +---------+
          |    +-+          |    +-+            |  +-+          |  +-+
         \|- 2\|5  - 2     \|- 2\|5  - 2       \|2\|5  - 2     \|2\|5  - 2
   [x= - --------------,x= --------------,x= - ------------,x= ------------]
                2                 2                  2               2
                                       Type: List Equation Expression Integer
               Time: 0.02 (IN) + 1.08 (EV) + 0.03 (OT) + 0.38 (GC) = 1.52 sec
-- x = 2
solve((x - 2)/x**(1/3) = 0, x)
 

   (24)  [x= 2]
                                       Type: List Equation Expression Integer
                           Time: 0.10 (IN) + 0.03 (EV) + 0.03 (OT) = 0.17 sec
-- This equation has no solutions
solve(sqrt(x**2 + 1) = x - 2, x)
 

             3
   (25)  [x= -]
             4
                                       Type: List Equation Expression Integer
                                       Time: 0.05 (IN) + 0.05 (EV) = 0.10 sec
-- x = 1
solve(x + sqrt(x) = 2, x)
 

   (26)  [x= 4,x= 1]
                                       Type: List Equation Expression Integer
                                       Time: 0.03 (IN) + 0.03 (EV) = 0.07 sec
-- x = 1/16
solve(2*sqrt(x) + 3*x**(1/4) - 2 = 0, x)
 

                           +---+             +---+
                    1    3\|- 7  - 31    - 3\|- 7  - 31
   (27)  [x= 16,x= --,x= ------------,x= --------------]
                   16         32               32
                                       Type: List Equation Expression Integer
                           Time: 0.03 (IN) + 0.18 (EV) + 0.03 (OT) = 0.25 sec
-- x = {sqrt[(sqrt(5) - 1)/2], -i sqrt[(sqrt(5) + 1)/2]}
solve(x = 1/sqrt(1 + x**2), x)
 

   (28)
        +---------+       +---------+     +-----------+       +-----------+
        |  +-+            |  +-+          |    +-+            |    +-+
       \|2\|5  - 2       \|2\|5  - 2     \|- 2\|5  - 2       \|- 2\|5  - 2
   [x= ------------,x= - ------------,x= --------------,x= - --------------]
             2                 2                2                   2
                                       Type: List Equation Expression Integer
                           Time: 0.07 (IN) + 0.17 (EV) + 0.03 (OT) = 0.27 sec
-- This problem is from a computational biology talk => 1 - log_2[m (m - 1)]
solve(binomial(m, 2)*2**k = 1, k)
 

                    2
             log(------)
                  2
                 m  - m
   (29)  [k= -----------]
                log(2)
                                       Type: List Equation Expression Integer
                                       Time: 0.13 (IN) + 0.12 (EV) = 0.25 sec
-- x = log(c/a) / log(b/d) for a, b, c, d != 0 and b, d != 1   [Bill Pletsch]
solve(a*b**x = c*d**x, x)
 

   (30)  []
                                       Type: List Equation Expression Integer
                           Time: 0.15 (IN) + 0.18 (EV) + 0.02 (OT) = 0.35 sec
-- x = {1, e^4}
solve(sqrt(log(x)) = log(sqrt(x)), x)
 

   (31)  [x= 0,x= 1]
                                       Type: List Equation Expression Integer
                           Time: 0.02 (IN) + 0.10 (EV) + 0.03 (OT) = 0.15 sec
-- Recursive use of inverses, including multiple branches of rational
-- fractional powers   [Richard Liska]
-- => x = +-(b + sin(1 + cos(1/e^2)))^(3/2)
solve(log(acos(asin(x**(2/3) - b) - 1)) + 2 = 0, x)
 

   (32)
                                 +---------------------+
                   1             |         1
   [x= (- sin(cos(---) + 1) - b) |sin(cos(---) + 1) + b ,
                    2            |          2
                  %e            \|        %e
                               +---------------------+
                 1             |         1
    x= (sin(cos(---) + 1) + b) |sin(cos(---) + 1) + b ]
                  2            |          2
                %e            \|        %e
                                       Type: List Equation Expression Integer
               Time: 0.05 (IN) + 0.25 (EV) + 0.03 (OT) + 0.02 (GC) = 0.35 sec
-- x = {-0.784966, -0.016291, 0.802557}  From Metha Kamminga-van Hulsen,
-- ``Hoisting the Sails and Casting Off with Maple'', _Computer Algebra
-- Nederland Nieuwsbrief_, Number 13, December 1994, ISSN 1380-1260, 27--40.
eqn:= 5*x + exp((x - 5)/2) = 8*x**3
 

           x - 5
           -----
             2           3
   (33)  %e      + 5x= 8x
                                            Type: Equation Expression Integer
                           Time: 0.50 (IN) + 0.02 (EV) + 0.02 (OT) = 0.53 sec
solve(eqn, x)
 

   (34)  []
                                       Type: List Equation Expression Integer
                                                   Time: 0.08 (EV) = 0.08 sec
--root_by_bisection(eqn, x, -1,  -0.5)
--root_by_bisection(eqn, x, -0.5, 0.5)
--root_by_bisection(eqn, x,  0.5, 1)
)clear properties eqn
 
-- x = {-1, 3}
solve(abs(x - 1) = 2, x)
 

   (35)  []
                                       Type: List Equation Expression Integer
                                       Time: 0.03 (IN) + 0.03 (EV) = 0.07 sec
-- x = {-1, -7}
solve(abs(2*x + 5) = abs(x - 2), x)
 

   (36)  []
                                       Type: List Equation Expression Integer
                           Time: 0.02 (IN) + 0.05 (EV) + 0.02 (OT) = 0.08 sec
-- x = +-3/2
solve(1 - abs(x) = max(-x - 2, x - 2), x)
 

   (37)  []
                                       Type: List Equation Expression Integer
                           Time: 0.03 (IN) + 0.03 (EV) + 0.02 (OT) = 0.08 sec
-- x = {-1, 3}
solve(max(2 - x**2, x) = max(-x, x**3/9), x)
 

   (38)  [x= 3,x= 0,x= - 3]
                              Type: List Equation Fraction Polynomial Integer
                           Time: 0.58 (IN) + 0.02 (EV) + 0.12 (OT) = 0.72 sec
-- x = {+-3, -3 [1 + sqrt(3) sin t + cos t]} = {+-3, -1.554894}
-- where t = (arctan[sqrt(5)/2] - pi)/3.  The third answer is the root of
-- x^3 + 9 x^2 - 18 = 0 in the interval (-2, -1).
solve(max(2 - x**2, x) = x**3/9, x)
 

   (39)  [x= 3,x= 0,x= - 3]
                              Type: List Equation Fraction Polynomial Integer
                                       Time: 0.08 (IN) + 0.03 (OT) = 0.12 sec
-- z = 2 + 3 i
z : Complex Expression Integer
 
                                                                   Type: Void
                                                                  Time: 0 sec
(1 + %i)*z + (2 - %i)*conjugate(z) = -3*%i
 

   (41)  3z= - 3%i
                                    Type: Equation Complex Expression Integer
                           Time: 0.47 (IN) + 0.02 (EV) + 0.05 (OT) = 0.53 sec
)clear properties z
 
(1 + %i)*(x + %i*y) + (2 - %i)*conjugate(x + %i*y) = -3*%i
 
   There are 4 exposed and 1 unexposed library operations named 
      conjugate having 1 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op conjugate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      conjugate with argument type(s) 
                         Polynomial Complex Integer
      
(1 + %i)*(x + %i*y) + (2 - %i)*(x - %i*y) = -3*%i
 

   (42)  (- 2 - %i)y + 3x= - 3%i
                                    Type: Equation Polynomial Complex Integer
                                       Time: 0.07 (IN) + 0.03 (OT) = 0.10 sec
solve(%, [x, y])
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                     Equation Polynomial Complex Integer
                       List OrderedVariableList [x,y]
      
-- => {f^(-1)(1), f^(-1)(-2)} assuming f is invertible
f:= operator('f);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
solve(f(x)**2 + f(x) - 2 = 0, x)
 

   (44)  []
                                       Type: List Equation Expression Integer
                           Time: 0.32 (IN) + 0.02 (EV) + 0.07 (OT) = 0.40 sec
)clear properties f
 
-- Solve a 3 x 3 system of linear equations
eqn1:=   x +   y +   z =  6
 

   (45)  z + y + x= 6
                                            Type: Equation Polynomial Integer
                                                   Time: 0.08 (IN) = 0.08 sec
eqn2:= 2*x +   y + 2*z = 10
 

   (46)  2z + y + 2x= 10
                                            Type: Equation Polynomial Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
eqn3:=   x + 3*y +   z = 10
 

   (47)  z + 3y + x= 10
                                            Type: Equation Polynomial Integer
                                                   Time: 0.02 (OT) = 0.02 sec
-- Note that the solution is parametric: x = 4 - z, y = 2
solve([eqn1, eqn2, eqn3], [x, y, z])
 

   (48)  [[x= - %DW + 4,y= 2,z= %DW]]
                         Type: List List Equation Fraction Polynomial Integer
                           Time: 0.68 (IN) + 0.05 (EV) + 0.08 (OT) = 0.82 sec
-- A linear system arising from the computation of a truncated power series
-- solution to a differential equation.  There are 189 equations to be solved
-- for 49 unknowns.  42 of the equations are repeats of other equations; many
-- others are trivial.  Solving this system directly by Gaussian elimination
-- is *not* a good idea.  Solving the easy equations first is probably a better
-- method.  The solution is actually rather simple.   [Stanly Steinberg]
-- => k1 = ... = k22 = k24 = k25 = k27 = ... = k30 = k32 = k33 = k35 = ...
--    = k38 = k40 = k41 = k44 = ... = k49 = 0, k23 = k31 = k39,
--    k34 = b/a k26, k42 = c/a k26, {k23, k26, k43} are arbitrary
eqns:= [
 -b*k8/a+c*k8/a = 0, -b*k11/a+c*k11/a = 0, -b*k10/a+c*k10/a+k2 = 0, _
 -k3-b*k9/a+c*k9/a = 0, -b*k14/a+c*k14/a = 0, -b*k15/a+c*k15/a = 0, _
 -b*k18/a+c*k18/a-k2 = 0, -b*k17/a+c*k17/a = 0, -b*k16/a+c*k16/a+k4 = 0, _
 -b*k13/a+c*k13/a-b*k21/a+c*k21/a+b*k5/a-c*k5/a = 0, b*k44/a-c*k44/a = 0, _
 -b*k45/a+c*k45/a = 0, -b*k20/a+c*k20/a = 0, -b*k44/a+c*k44/a = 0, _
  b*k46/a-c*k46/a = 0, b**2*k47/a**2-2*b*c*k47/a**2+c**2*k47/a**2 = 0, k3 = 0, _
 -k4 = 0, -b*k12/a+c*k12/a-a*k6/b+c*k6/b = 0, _
 -b*k19/a+c*k19/a+a*k7/c-b*k7/c = 0, b*k45/a-c*k45/a = 0, _
 -b*k46/a+c*k46/a = 0, -k48+c*k48/a+c*k48/b-c**2*k48/(a*b) = 0, _
 -k49+b*k49/a+b*k49/c-b**2*k49/(a*c) = 0, a*k1/b-c*k1/b = 0, _
  a*k4/b-c*k4/b = 0, a*k3/b-c*k3/b+k9 = 0, -k10+a*k2/b-c*k2/b = 0, _
  a*k7/b-c*k7/b = 0, -k9 = 0, k11 = 0, b*k12/a-c*k12/a+a*k6/b-c*k6/b = 0, _
  a*k15/b-c*k15/b = 0, k10+a*k18/b-c*k18/b = 0, -k11+a*k17/b-c*k17/b = 0, _
  a*k16/b-c*k16/b = 0, -a*k13/b+c*k13/b+a*k21/b-c*k21/b+a*k5/b-c*k5/b = 0, _
 -a*k44/b+c*k44/b = 0, a*k45/b-c*k45/b = 0, _
  a*k14/c-b*k14/c+a*k20/b-c*k20/b = 0, a*k44/b-c*k44/b = 0, _
 -a*k46/b+c*k46/b = 0, -k47+c*k47/a+c*k47/b-c**2*k47/(a*b) = 0, _
  a*k19/b-c*k19/b = 0, -a*k45/b+c*k45/b = 0, a*k46/b-c*k46/b = 0, _
  a**2*k48/b**2-2*a*c*k48/b**2+c**2*k48/b**2 = 0, _
 -k49+a*k49/b+a*k49/c-a**2*k49/(b*c) = 0, k16 = 0, -k17 = 0, _
 -a*k1/c+b*k1/c = 0, -k16-a*k4/c+b*k4/c = 0, -a*k3/c+b*k3/c = 0, _
  k18-a*k2/c+b*k2/c = 0, b*k19/a-c*k19/a-a*k7/c+b*k7/c = 0, _
 -a*k6/c+b*k6/c = 0, -a*k8/c+b*k8/c = 0, -a*k11/c+b*k11/c+k17 = 0, _
 -a*k10/c+b*k10/c-k18 = 0, -a*k9/c+b*k9/c = 0, _
 -a*k14/c+b*k14/c-a*k20/b+c*k20/b = 0, _
 -a*k13/c+b*k13/c+a*k21/c-b*k21/c-a*k5/c+b*k5/c = 0, a*k44/c-b*k44/c = 0, _
 -a*k45/c+b*k45/c = 0, -a*k44/c+b*k44/c = 0, a*k46/c-b*k46/c = 0, _
 -k47+b*k47/a+b*k47/c-b**2*k47/(a*c) = 0, -a*k12/c+b*k12/c = 0, _
  a*k45/c-b*k45/c = 0, -a*k46/c+b*k46/c = 0, _
 -k48+a*k48/b+a*k48/c-a**2*k48/(b*c) = 0, _
  a**2*k49/c**2-2*a*b*k49/c**2+b**2*k49/c**2 = 0, k8 = 0, k11 = 0, -k15 = 0, _
  k10-k18 = 0, -k17 = 0, k9 = 0, -k16 = 0, -k29 = 0, k14-k32 = 0, _
 -k21+k23-k31 = 0, -k24-k30 = 0, -k35 = 0, k44 = 0, -k45 = 0, k36 = 0, _
  k13-k23+k39 = 0, -k20+k38 = 0, k25+k37 = 0, b*k26/a-c*k26/a-k34+k42 = 0, _
 -2*k44 = 0, k45 = 0, k46 = 0, b*k47/a-c*k47/a = 0, k41 = 0, k44 = 0, _
 -k46 = 0, -b*k47/a+c*k47/a = 0, k12+k24 = 0, -k19-k25 = 0, _
 -a*k27/b+c*k27/b-k33 = 0, k45 = 0, -k46 = 0, -a*k48/b+c*k48/b = 0, _
  a*k28/c-b*k28/c+k40 = 0, -k45 = 0, k46 = 0, a*k48/b-c*k48/b = 0, _
  a*k49/c-b*k49/c = 0, -a*k49/c+b*k49/c = 0, -k1 = 0, -k4 = 0, -k3 = 0, _
  k15 = 0, k18-k2 = 0, k17 = 0, k16 = 0, k22 = 0, k25-k7 = 0, _
  k24+k30 = 0, k21+k23-k31 = 0, k28 = 0, -k44 = 0, k45 = 0, -k30-k6 = 0, _
  k20+k32 = 0, k27+b*k33/a-c*k33/a = 0, k44 = 0, -k46 = 0, _
 -b*k47/a+c*k47/a = 0, -k36 = 0, k31-k39-k5 = 0, -k32-k38 = 0, _
  k19-k37 = 0, k26-a*k34/b+c*k34/b-k42 = 0, k44 = 0, -2*k45 = 0, k46 = 0, _
  a*k48/b-c*k48/b = 0, a*k35/c-b*k35/c-k41 = 0, -k44 = 0, k46 = 0, _
  b*k47/a-c*k47/a = 0, -a*k49/c+b*k49/c = 0, -k40 = 0, k45 = 0, -k46 = 0, _
 -a*k48/b+c*k48/b = 0, a*k49/c-b*k49/c = 0, k1 = 0, k4 = 0, k3 = 0, _
 -k8 = 0, -k11 = 0, -k10+k2 = 0, -k9 = 0, k37+k7 = 0, -k14-k38 = 0, _
 -k22 = 0, -k25-k37 = 0, -k24+k6 = 0, -k13-k23+k39 = 0, _
 -k28+b*k40/a-c*k40/a = 0, k44 = 0, -k45 = 0, -k27 = 0, -k44 = 0, _
  k46 = 0, b*k47/a-c*k47/a = 0, k29 = 0, k32+k38 = 0, k31-k39+k5 = 0, _
 -k12+k30 = 0, k35-a*k41/b+c*k41/b = 0, -k44 = 0, k45 = 0, _
 -k26+k34+a*k42/c-b*k42/c = 0, k44 = 0, k45 = 0, -2*k46 = 0, _
 -b*k47/a+c*k47/a = 0, -a*k48/b+c*k48/b = 0, a*k49/c-b*k49/c = 0, k33 = 0, _
 -k45 = 0, k46 = 0, a*k48/b-c*k48/b = 0, -a*k49/c+b*k49/c = 0 _
 ];
 

                              Type: List Equation Fraction Polynomial Integer
               Time: 6.35 (IN) + 0.72 (EV) + 1.33 (OT) + 0.87 (GC) = 9.26 sec
vars:= [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, _
        k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, _
        k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, _
        k45, k46, k47, k48, k49];
 

Type: List OrderedVariableList [k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16,k17,k18,k19,k20,k21,k22,k23,k24,k25,k26,k27,k28,k29,k30,k31,k32,k33,k34,k35,k36,k37,k38,k39,k40,k41,k42,k43,k44,k45,k46,k47,k48,k49]
                                                   Time: 0.05 (IN) = 0.05 sec
solve(eqns, vars)
 

   (51)
   [
     [k1= 0, k2= 0, k3= 0, k4= 0, k5= 0, k6= 0, k7= 0, k8= 0, k9= 0, k10= 0,
      k11= 0, k12= 0, k13= 0, k14= 0, k15= 0, k16= 0, k17= 0, k18= 0, k19= 0,
                                                             %DY a
      k20= 0, k21= 0, k22= 0, k23= %DX, k24= 0, k25= 0, k26= -----, k27= 0,
                                                               c
                                                             %DY b
      k28= 0, k29= 0, k30= 0, k31= %DX, k32= 0, k33= 0, k34= -----, k35= 0,
                                                               c
      k36= 0, k37= 0, k38= 0, k39= %DX, k40= 0, k41= 0, k42= %DY, k43= %DZ,
      k44= 0, k45= 0, k46= 0, k47= 0, k48= 0, k49= 0]
     ]
                         Type: List List Equation Fraction Polynomial Integer
                           Time: 0.69 (IN) + 1.42 (EV) + 0.15 (OT) = 2.25 sec
)clear properties eqns vars
 
-- Solve a 3 x 3 system of nonlinear equations
eqn1:= x**2*y + 3*y*z - 4 = 0
 

                 2
   (52)  3y z + x y - 4= 0
                                            Type: Equation Polynomial Integer
                                                   Time: 0.03 (OT) = 0.03 sec
eqn2:= -3*x**2*z + 2*y**2 + 1 = 0
 

             2      2
   (53)  - 3x z + 2y  + 1= 0
                                            Type: Equation Polynomial Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
eqn3:= 2*y*z**2 - z**2 - 1 = 0
 

                  2
   (54)  (2y - 1)z  - 1= 0
                                            Type: Equation Polynomial Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
-- Solving this by hand would be a nightmare
solve([eqn1, eqn2, eqn3], [x, y, z])
 

   (55)
   [[x= 1,y= 1,z= 1], [x= - 1,y= 1,z= 1],
             2                      2
    [- 3z + x  + 2= 0,y= - 3z + 1,3z  - 2z + 1= 0],

                                                4      3      2
         4      3      2          2        - 18z  + 24z  + 21z  + 12z + 3
     [12z  - 12z  - 30z  + 7z + 3x = 0, y= ------------------------------,
                                                          2
        5     4     3     2
      6z  - 6z  - 9z  - 7z  - 3z - 1= 0]
     ]
                         Type: List List Equation Fraction Polynomial Integer
               Time: 0.02 (IN) + 1.18 (EV) + 0.03 (OT) + 0.03 (GC) = 1.27 sec
)clear properties eqn1 eqn2 eqn3
 
-- ---------- Quit ----------
)quit
 

real   118.9
user   38.5
sys    0.9
\end{verbatim}
\section{Inequalities}
\begin{verbatim}

 
-- ---------- Inequalities ----------
-- => True
%e**%pi > %pi**%e
 

   (1)  false
                                                                Type: Boolean
               Time: 0.30 (IN) + 0.38 (EV) + 0.18 (OT) + 0.15 (GC) = 1.02 sec
-- => [True, False]
[x**4 - x + 1 > 0, x**4 - x + 1 > 1]
 

   (2)  [true,true]
                                                           Type: List Boolean
                           Time: 0.05 (IN) + 0.02 (EV) + 0.02 (OT) = 0.08 sec
-- => True
--assume(abs(x) < 1)
-1 < x and x < 1
 

   (3)  false
                                                                Type: Boolean
                                       Time: 0.23 (IN) + 0.02 (OT) = 0.25 sec
-- x > y > 0 and k, n > 0   =>   k x^n > k y^n
--assume(x > y, y > 0)
2*x**2 > 2*y**2
 

   (4)  false
                                                                Type: Boolean
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
--assume(k > 0)
k*x**2 > k*y**2
 

   (5)  false
                                                                Type: Boolean
                                                   Time: 0.02 (EV) = 0.02 sec
--assume(n > 0)
k*x**n > k*y**n
 

   (6)  false
                                                                Type: Boolean
                                       Time: 0.18 (IN) + 0.03 (OT) = 0.22 sec
-- x > 1 and y >= x - 1   =>   y > 0
--assume(x > 1, y >= x - 1)
y > 0
 

   (7)  true
                                                                Type: Boolean
                                                   Time: 0.03 (IN) = 0.03 sec
-- x >= y, y >= z, z >= x   =>   x = y = z
--assume(x >= y, y >= z, z >= x)
[x = y, x = z, y = z]
 

   (8)  [x= y,x= z,y= z]
                                                   Type: List Equation Symbol
                                       Time: 0.13 (IN) + 0.02 (OT) = 0.15 sec
-- x < -1 or x > 3
solve(abs(x - 1) > 2, x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable x
      
-- x < 1 or 2 < x < 3 or 4 < x < 5
solve((x - 1)*(x - 2)*(x - 3)*(x - 4)*(x - 5) < 0, x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable x
      
-- x < 3 or x >= 5
solve(6/(x - 3) <= 3, x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable x
      
-- => 0 <= x < 4
solve(sqrt(x) < 2, x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable x
      
-- => x is real
solve(sin(x) < 2, x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable x
      
-- => x != pi/2 + n 2 pi
solve(sin(x) < 1, x)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable x
      
-- The next two examples come from Abdubrahim Muhammad Farhat, _Stability
-- Analysis of Finite Difference Schemes_, Ph.D. dissertation, University of
-- New Mexico, Albuquerque, New Mexico, December 1993 => 0 <= A <= 1/2
solve(abs(2*A*(cos(t) - 1) + 1) <= 1, A)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable A
      
-- => 125 A^4 + 24 A^2 - 48 < 0   or   |A| < 2/5 sqrt([8 sqrt(6) - 3]/5)
solve(A**2*(cos(t) - 4)**2*sin(t)**2 < 9, A)
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                   Boolean
                                 Variable A
      
-- => |x| < y
solve([x + y > 0, x - y < 0], [x, y])
 
   There are 18 exposed and 3 unexposed library operations named solve 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                                List Boolean
                       List OrderedVariableList [x,y]
      
-- ---------- Quit ----------
)quit
 

real   24.5
user   6.0
sys    0.4
\end{verbatim}
\section{Vector Analysis}
\begin{verbatim}
 
-- ---------- Vector Analysis ----------
-- Vector norm => sqrt(15)
Norm(v) ==
   local V
   V : Matrix Complex Integer := v
   sqrt(map(conjugate, transpose(V)) * V)
 
                                                                   Type: Void
                                                                  Time: 0 sec
Norm(vector([1 + %i, -2, 3*%i]))
 
   Compiling function Norm with type Vector Complex Integer -> 
      Expression Complex Integer 

         +--+
   (2)  \|15
                                             Type: Expression Complex Integer
               Time: 0.97 (IN) + 0.23 (EV) + 0.33 (OT) + 0.17 (GC) = 1.70 sec
)clear properties Norm
 
   Compiled code for Norm has been cleared.
-- Cross product: (2, 2, -3) x (1, 3, 1) => (11, -5, 4)
--cross(vector([2, 2, -3]), vector([1, 3, 1]))
-- (a x b) . (c x d) => (a . c) (b . d) - (a . d) (b . c)
--cross(a, b) . cross(c, d)
-- => (2 y z^3 - 2 x^2 y^2 z,   x y,   2 x y^2 z^2 - x z)
--curl(vector([x*y*z, x**2*y**2*z**2, y**2*z**3]))
-- DEL . (f x g) => g . (DEL x f) - f . (DEL x g)
--div(cross(f, g))
-- Express DEL . a in spherical coordinates (r, theta, phi) for
-- a = (a_r(r, theta, phi), a_theta(r, theta, phi), a_phi(r, theta, phi)).
-- Here, phi is in the x-y plane and theta is the angle with the z-axis.
-- => 1/r^2 d/dr[r^2 a_r] + 1/[r sin(theta)] d/dtheta[sin(theta) a_theta]
--    + 1/[r sin(theta)] da_phi/dphi
-- => da_r/dr + (2 a_r)/r + 1/r da_theta/dtheta + a_theta/[r tan(theta)]
--    + 1/[r sin(theta)] da_phi/dphi
-- See Keith R. Symon, _Mechanics_, Third Edition, Addison-Wesley Publishing
-- Company, 1971, p. 103.
--coordinates == spherical
--div([a_r(r, theta, phi), a_theta(r, theta, phi), a_phi(r, theta, phi)])
-- Express dR/dt in spherical coordinates (r, theta, phi) where R is the
-- position vector r*Rhat(theta, phi) with Rhat being the unit vector in the
-- direction of R => (dr/dt, r dtheta/dt, r sin(theta) dphi/dt)
-- [Symon, p. 98]
r:= operator('r);
 

                                                          Type: BasicOperator
                                                   Time: 0.08 (IN) = 0.08 sec
rhat:= operator('rhat);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
theta:= operator('theta);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
phi:= operator('phi);
 

                                                          Type: BasicOperator
                                       Time: 0.02 (IN) + 0.03 (OT) = 0.05 sec
v:= vector([r(t)*rhat(theta(t), phi(t)), 0, 0])
 

   (7)  [r(t)rhat(theta(t),phi(t)),0,0]
                                              Type: Vector Expression Integer
                           Time: 0.58 (IN) + 0.03 (EV) + 0.14 (OT) = 0.75 sec
D(v, t)
 
   There are 5 exposed and 0 unexposed library operations named D 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op D
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named D 
      with argument type(s) 
                          Vector Expression Integer
                                 Variable t
      
map(e +-> D(e, t), v)
 

   (8)
   [
              ,                                      ,
       r(t)phi (t)rhat  (theta(t),phi(t)) + r(t)theta (t)rhat  (theta(t),phi(t))
                      ,2                                     ,1
     + 
                             ,
       rhat(theta(t),phi(t))r (t)

     ,
    0, 0]
                                              Type: Vector Expression Integer
                           Time: 0.02 (IN) + 0.10 (EV) + 0.03 (OT) = 0.15 sec
)clear properties r rhat theta phi v
 
-- Scalar potential => x^2 y + y + 2 z^3
--potential(vector([2*x*y, x**2 + 1, 6*z**2]))
-- Vector potential => (x y z, x^2 y^2 z^2, y^2 z^3) is one possible solution.
-- See Harry F. Davis and Arthur David Snider, _Introduction to Vector
-- Analysis_, Third Edition, Allyn and Bacon, Inc., 1975, p. 97.
--vectorpotential(vector([2*y*z**3 - 2*x**2*y**2*z, x*y, 2*x*y**2*z**2 - x*z]))
--curl(%)
-- Orthogonalize the following vectors (Gram-Schmidt).  See Lee W. Johnson and
-- R. Dean Riess, _Introduction to Linear Algebra_, Addison-Wesley Publishing
-- Company, 1981, p. 104 => [[0 1 2 1], [0 -1 1 -1], [2 1 0 -1]]^T
[transpose(matrix([[0, 1, 2, 1]])), transpose(matrix([[0, 1, 3, 1]])), _
 transpose(matrix([[1, 1, 1, 0]])), transpose(matrix([[1, 3, 6, 2]]))]
 

         +0+ +0+ +1+ +1+
         | | | | | | | |
         |1| |1| |1| |3|
   (9)  [| |,| |,| |,| |]
         |2| |3| |1| |6|
         | | | | | | | |
         +1+ +1+ +0+ +2+
                                                    Type: List Matrix Integer
                                       Time: 0.02 (IN) + 0.03 (OT) = 0.05 sec
gramschmidt(%)
 

              +   1   +
              | ----  |
              |  +-+  |
              |  |3   | +  0   + + 0  +
              |  |-   | |      | |    |
              | \|2   | |   +-+| |  1 |
              |       | |  \|3 | |----|
          +0+ |   1   | |- ----| | +-+|
          | | | ----- | |    3 | |\|6 |
          |0| |    +-+| |      | |    |
   (10)  [| |,|    |3 |,|  +-+ |,|  2 |]
          |0| | 2  |- | | \|3  | |----|
          | | |   \|2 | | ---- | | +-+|
          +0+ |       | |   3  | |\|6 |
              |   0   | |      | |    |
              |       | |   +-+| |  1 |
              |    1  | |  \|3 | |----|
              |- -----| |- ----| | +-+|
              |     +-| +    3 + +\|6 +
              |     |3|
              |  2  |-|
              +    \|2+
                                         Type: List Matrix Expression Integer
               Time: 0.10 (IN) + 0.20 (EV) + 0.07 (OT) + 0.03 (GC) = 0.40 sec
-- ---------- Quit ----------
)quit
 

real   7.6
user   4.3
sys    0.5
\end{verbatim}
\section{Matrix Theory}
\begin{verbatim}
 
-- ---------- Matrix Theory ----------
-- Extract the superdiagonal => [2, 6]
matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
 

                                                         Type: Matrix Integer
                           Time: 0.03 (IN) + 0.02 (EV) + 0.02 (GC) = 0.07 sec
[%(j - 1, j) for j in 2..ncols(%)]
 

   (2)  [2,6]
                                                           Type: List Integer
                                       Time: 0.05 (OT) + 0.02 (GC) = 0.07 sec
-- (2, 3)-minor => [[1, 2], [7, 8]]
--minor(matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), 2, 3)
-- Create the 7 x 6 matrix B from rearrangements of the elements of the 4 x 4
-- matrix A (this is easiest to do with a MATLAB style notation):
-- B = [A(1:3,2:4), A([1,2,4],[3,1,4]); A, [A(1:2,3:4); A([4,1],[3,2])]]
-- => [[12 13 14|13 11 14],
--     [22 23 24|23 21 24],
--     [32 33 34|43 41 44],
--     [--------+--+-----]
--     [11 12 13 14|13 14],
--     [21 22 23 24|23 24],
--     [           +-----]
--     [31 32 33 34|43 42],
--     [41 42 43 44|13 12]].  See Michael James Wester, _Symbolic Calculation
-- and Expression Swell Analysis of Matrix Determinants and Eigenstuff_, Ph.D.
-- dissertation, University of New Mexico, Albuquerque, New Mexico, December
-- 1992, p. 89.
A:= matrix([[11, 12, 13, 14], _
            [21, 22, 23, 24], _
            [31, 32, 33, 34], _
            [41, 42, 43, 44]]);
 

                                                         Type: Matrix Integer
                                                   Time: 0.02 (IN) = 0.02 sec
vertConcat(horizConcat(subMatrix(A, 1, 3, 2, 4), _
                       matrix([[A(1,3), A(1,1), A(1,4)], _
                               [A(2,3), A(2,1), A(2,4)], _
                               [A(4,3), A(4,1), A(4,4)]])), _
           horizConcat(A, vertConcat(subMatrix(A, 1, 2, 3, 4), _
                                     matrix([[A(4,3), A(4,2)], _
                                             [A(1,3), A(1,2)]]))))
 

        +12  13  14  13  11  14+
        |                      |
        |22  23  24  23  21  24|
        |                      |
        |32  33  34  43  41  44|
        |                      |
   (4)  |11  12  13  14  13  14|
        |                      |
        |21  22  23  24  23  24|
        |                      |
        |31  32  33  34  43  42|
        |                      |
        +41  42  43  44  13  12+
                                                         Type: Matrix Integer
                                       Time: 0.07 (IN) + 0.03 (OT) = 0.10 sec
)clear properties A
 
-- Create a block diagonal matrix
diagonalMatrix( _
   [matrix([[a, 1],[0, a]]), b, matrix([[c, 1, 0],[0, c, 1],[0, 0, c]])])
 

   (5)  diagonalMatrix
                               +c  1  0+
                      +a  1+   |       |
                      |    |,b,|0  c  1|
                      +0  a+   |       |
                               +0  0  c+
                                                                 Type: Symbol
                           Time: 0.30 (IN) + 0.22 (OT) + 0.02 (GC) = 0.53 sec
-- => [[1 1], [1 0]]
matrix([[7, 11], [3, 8]]) :: Matrix(PrimeField(2))
 

        +1  1+
   (6)  |    |
        +1  0+
                                                    Type: Matrix PrimeField 2
                           Time: 0.07 (IN) + 0.05 (OT) + 0.05 (GC) = 0.17 sec
-- => [[-cos t, -sin t], [sin t, -cos t]]
matrix([[cos(t), sin(t)], [-sin(t), cos(t)]])
 

        + cos(t)   sin(t)+
   (7)  |                |
        +- sin(t)  cos(t)+
                                              Type: Matrix Expression Integer
               Time: 0.22 (IN) + 0.23 (EV) + 0.07 (OT) + 0.10 (GC) = 0.62 sec
D(%, t, 2)
 

        +- cos(t)  - sin(t)+
   (8)  |                  |
        + sin(t)   - cos(t)+
                                     Type: SquareMatrix(2,Expression Integer)
                                       Time: 0.32 (IN) + 0.07 (EV) = 0.38 sec
-- => [[(a + 7) x + (2 a - 8) y,   (3 a - 9) x + (4 a + 10) y,
--      (5 a + 11) x + (6 a - 12) y]]
matrix([[x, y]]) * (a*matrix([[1, 3, 5], [2, 4, 6]]) _
                    + matrix([[7, -9, 11], [-8, 10, -12]]))
 

   (9)
   [(2a - 8)y + (a + 7)x  (4a + 10)y + (3a - 9)x  (6a - 12)y + (5a + 11)x]
                                              Type: Matrix Polynomial Integer
                                       Time: 1.58 (IN) + 0.35 (OT) = 1.93 sec
-- Matrix norms: infinity norm => 7
norm(matrix([[1, -2*%i], [-3*%i, 4]]), %plusInfinity)
 
   There are 5 exposed and 6 unexposed library operations named norm 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op norm
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named norm 
      with argument type(s) 
                           Matrix Complex Integer
                          OrderedCompletion Integer
      
-- Frobenius norm => (a^2 + b^2 + c^2)/(|a| |b| |c|)   (a, b, c real)
norm(matrix([[a/(b*c), 1/c, 1/b], [1/c, b/(a*c), 1/a], [1/b, 1/a, c/(a*b)]]), _
     'f)
 
   There are 5 exposed and 6 unexposed library operations named norm 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op norm
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named norm 
      with argument type(s) 
                     Matrix Fraction Polynomial Integer
                                 Variable f
      
-- Hermitian (complex conjugate transpose) => [[1, f(4 + 5 i)], [2 - 3 i, 6]]
-- (This assumes f is a real valued function.  In general, the (1, 2) entry
-- will be conjugate[f(4 - 5 i)] = conjugate(f)(4 + 5 i).)
f:= operator('f);
 

                                                          Type: BasicOperator
                                                   Time: 0.07 (IN) = 0.07 sec
map('conjugate, transpose(matrix([[1, 2 + 3*%i], [f(4 - 5*%i), 6]])) _
                   :: Matrix Complex Expression Integer)
 
 
   Cannot convert from type Matrix Expression Complex Integer to Matrix
      Complex Expression Integer for value
   +   1     f(4 - 5%i)+
   |                   |
   +2 + 3%i      6     +

m:= matrix([[a, b], [1, a*b]])
 

         +a   b +
   (11)  |      |
         +1  a b+
                                              Type: Matrix Polynomial Integer
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
-- Invert the matrix => 1/(a^2 - 1) [[a, -1], [-1/b, a/b]]
minv:= inverse(m)
 

         +     a            1   +
         |  ------     - ------ |
         |   2            2     |
         |  a  - 1       a  - 1 |
   (12)  |                      |
         |      1          a    |
         |- ---------  ---------|
         |    2          2      |
         +  (a  - 1)b  (a  - 1)b+
                          Type: Union(Matrix Fraction Polynomial Integer,...)
                           Time: 0.05 (IN) + 0.03 (EV) + 0.02 (OT) = 0.10 sec
m * minv
 

         +1  0+
   (13)  |    |
         +0  1+
                                     Type: Matrix Fraction Polynomial Integer
                                       Time: 0.38 (IN) + 0.07 (OT) = 0.45 sec
)clear properties m minv
 
-- Inverse of a triangular partitioned (or block) matrix
-- => [[A_11^(-1), -A_11^(-1) A_12 A_22^(-1)], [0, A_22^(-1)]].
-- See Charles G. Cullen, _Matrices and Linear Transformations_, Second
-- Edition, Dover Publications Inc., 1990, p. 35.
matrix([[A11, A12], [0, A22]])**(-1)
 

         + 1       A12  +
         |---  - -------|
         |A11    A11 A22|
   (14)  |              |
         |         1    |
         | 0      ---   |
         +        A22   +
                                     Type: Matrix Fraction Polynomial Integer
                                       Time: 0.15 (IN) + 0.02 (OT) = 0.17 sec
-- LU decomposition of a symbolic matrix   [David Wood]
-- [ 1    0   0] [1  x-2  x-3]   [ 1      x-2        x-3    ]
-- [x-1   1   0] [0   4   x-5] = [x-1  x^2-3x+6   x^2-3x-2  ]
-- [x-2  x-3  1] [0   0   x-7]   [x-2    x^2-8   2x^2-12x+14]
matrix([[ 1,     x-2,          x-3      ], _
        [x-1, x**2-3*x+6,   x**2-3*x-2  ], _
        [x-2,   x**2-8,   2*x**2-12*x+14]]);
 

                                              Type: Matrix Polynomial Integer
                                                   Time: 0.08 (IN) = 0.08 sec
-- Reduced row echelon form   [Cullen, p. 43]
-- => [[1 0 -1 0 2], [0 1 2 0 -1], [0 0 0 1 3], [0 0 0 0 0]]
matrix([[1, 2, 3, 1, 3], _
        [3, 2, 1, 1, 7], _
        [0, 2, 4, 1, 1], _
        [1, 1, 1, 1, 4]]);
 

                                                         Type: Matrix Integer
                                                   Time: 0.03 (IN) = 0.03 sec
rowEchelon(%)
 

         +1  0  - 1  0   2 +
         |                 |
         |0  1   2   0  - 1|
   (17)  |                 |
         |0  0   0   1   3 |
         |                 |
         +0  0   0   0   0 +
                                                         Type: Matrix Integer
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
-- => 2.  See Gerald L. Bradley, _A Primer of Linear Algebra_, Prentice-Hall,
--    Inc., 1975, p. 135.
rank(matrix([[-1, 3, 7, -5], [4, -2, 1, 3], [2, 4, 15, -7]]))
 

   (18)  2
                                                        Type: PositiveInteger
                                                   Time: 0.02 (OT) = 0.02 sec
-- => 1
rank(matrix([[2*sqrt(2), 8], [6*sqrt(6), 24*sqrt(3)]]))
 

   (19)  1
                                                        Type: PositiveInteger
                           Time: 0.05 (IN) + 0.35 (EV) + 0.03 (OT) = 0.43 sec
-- => 1
rank(matrix([[sin(2*t), cos(2*t)], _
             [2*(1 - cos(t)**2)*cos(t), (1 - 2*sin(t)**2)*sin(t)]]))
 

   (20)  2
                                                        Type: PositiveInteger
                           Time: 0.10 (IN) + 0.02 (EV) + 0.02 (OT) = 0.13 sec
-- Null space => [[2 4 1 0], [0 -3 0 1]]^T or variant   [Bradley, p. 207]
nullSpace(matrix([[1, 0, -2, 0], [-2, 1, 0, 3], [-1, 2, -6, 6]]))
 

   (21)  [[2,4,1,0],[0,- 3,0,1]]
                                                    Type: List Vector Integer
                                       Time: 0.03 (EV) + 0.02 (OT) = 0.05 sec
-- Define a Vandermonde matrix (useful for doing polynomial interpolations)
matrix([[1,    1,    1,    1   ], _
        [w,    x,    y,    z   ], _
        [w**2, x**2, y**2, z**2], _
        [w**3, x**3, y**3, z**3]])
 

         +1   1   1   1 +
         |              |
         |w   x   y   z |
         |              |
   (22)  | 2   2   2   2|
         |w   x   y   z |
         |              |
         | 3   3   3   3|
         +w   x   y   z +
                                              Type: Matrix Polynomial Integer
                                       Time: 0.15 (IN) + 0.05 (OT) = 0.20 sec
determinant(%)
 

   (23)
              2       2    2        2    2   3
     ((x - w)y  + (- x  + w )y + w x  - w x)z
   + 
                3     3    3        3    3   2
     ((- x + w)y  + (x  - w )y - w x  + w x)z
   + 
        2    2  3       3    3  2    2 3    3 2           2    2   3
     ((x  - w )y  + (- x  + w )y  + w x  - w x )z + (- w x  + w x)y
   + 
         3    3   2       2 3    3 2
     (w x  - w x)y  + (- w x  + w x )y
                                                     Type: Polynomial Integer
                                                   Time: 0.07 (OT) = 0.07 sec
-- The following formula implies a general result:
-- => (w - x) (w - y) (w - z) (x - y) (x - z) (y - z)
factor(%)
 

   (24)  (x - w)(y - x)(y - w)(z - y)(z - x)(z - w)
                                            Type: Factored Polynomial Integer
                           Time: 0.07 (IN) + 0.25 (EV) + 0.03 (OT) = 0.35 sec
-- Minimum polynomial => (lambda - 1)^2 (lambda + 1)   [Cullen, p. 181]
matrix([[17,  -8, -12, 14], _
        [46, -22, -35, 41], _
        [-2,   1,   4, -4], _
        [ 4,  -2,  -2,  3]]);
 

                                                         Type: Matrix Integer
                                                                  Time: 0 sec
minimalPolynomial(% :: SquareMatrix(4, Integer))
 
   There are 2 exposed and 1 unexposed library operations named 
      minimalPolynomial having 1 argument(s) but none was determined to
      be applicable. Use HyperDoc Browse, or issue
                        )display op minimalPolynomial
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      minimalPolynomial with argument type(s) 
                           SquareMatrix(4,Integer)
      
-- Compute the eigenvalues of a matrix from its characteristic polynomial
-- => lambda = {1, -2, 3}
m:= matrix([[ 5, -3, -7], _
            [-2,  1,  2], _
            [ 2, -3, -4]])
 

         + 5   - 3  - 7+
         |             |
   (26)  |- 2   1    2 |
         |             |
         + 2   - 3  - 4+
                                                         Type: Matrix Integer
                                                   Time: 0.02 (OT) = 0.02 sec
characteristicPolynomial(m, lambda)
 

                 3          2
   (27)  - lambda  + 2lambda  + 5lambda - 6
                                                     Type: Polynomial Integer
                                       Time: 0.02 (IN) + 0.03 (OT) = 0.05 sec
solve(% = 0, lambda)
 

   (28)  [lambda= 3,lambda= 1,lambda= - 2]
                              Type: List Equation Fraction Polynomial Integer
                           Time: 0.47 (IN) + 0.18 (EV) + 0.07 (OT) = 0.72 sec
)clear properties m
 
-- In theory, an easy eigenvalue problem! => lambda = {2 - a} for k = 1..100
-- [Wester, p. 154]
identityMatrix(n) == diagonalMatrix([1 for i in 1..n])
 
                                                                   Type: Void
                                                                  Time: 0 sec
eigenvalues((2 - a)*identityMatrix(100))
 
   Compiling function identityMatrix with type PositiveInteger -> 
      Matrix Integer 

   (30)  [- a + 2]
Type: List Union(Fraction Polynomial Integer,SuchThat(Symbol,Polynomial Integer))
             Time: 31.44 (IN) + 7.85 (EV) + 4.32 (OT) + 5.17 (GC) = 48.77 sec
-- => lambda = {4 sin^2(pi k/[2 (n + 1)])} for k = 1..n for an n x n matrix.
--    For n = 5, lambda = {2 - sqrt(3), 1, 2, 3, 2 + sqrt(3)}
-- See J. H. Wilkinson, _The Algebraic Eigenvalue Problem_, Oxford University
-- Press, 1965, p. 307.
matrix([[2, 1, 0, 0, 0], _
        [1, 2, 1, 0, 0], _
        [0, 1, 2, 1, 0], _
        [0, 0, 1, 2, 1], _
        [0, 0, 0, 1, 2]])
 

         +2  1  0  0  0+
         |             |
         |1  2  1  0  0|
         |             |
   (31)  |0  1  2  1  0|
         |             |
         |0  0  1  2  1|
         |             |
         +0  0  0  1  2+
                                                         Type: Matrix Integer
                                                   Time: 0.02 (IN) = 0.02 sec
radicalEigenvalues(%)
 

             +-+      +-+
   (32)  [- \|3  + 2,\|3  + 2,1,2,3]
                                                Type: List Expression Integer
                           Time: 0.08 (IN) + 0.08 (EV) + 0.02 (OT) = 0.18 sec
-- Eigenvalues of the Rosser matrix.  This matrix is notorious for causing
-- numerical eigenvalue routines to fail.   [Wester, p. 146 (Cleve Moler)]
-- => {-10 sqrt(10405), 0, 510 - 100 sqrt(26), 1000, 1000,
--     510 + 100 sqrt(26), 1020, 10 sqrt(10405)} =
--    {-1020.049, 0, 0.098, 1000, 1000, 1019.902, 1020, 1020.049}
rosser:= matrix([[ 611,  196, -192,  407,   -8,  -52,  -49,   29], _
                 [ 196,  899,  113, -192,  -71,  -43,   -8,  -44], _
                 [-192,  113,  899,  196,   61,   49,    8,   52], _
                 [ 407, -192,  196,  611,    8,   44,   59,  -23], _
                 [  -8,  -71,   61,    8,  411, -599,  208,  208], _
                 [ -52,  -43,   49,   44, -599,  411,  208,  208], _
                 [ -49,   -8,    8,   59,  208,  208,   99, -911], _
                 [  29,  -44,   52,  -23,  208,  208, -911,   99]]);
 

                                                         Type: Matrix Integer
                                                   Time: 0.02 (IN) = 0.02 sec
radicalEigenvalues(rosser)
 

   (34)
       +-----+      +-----+       +--+           +--+
   [10\|10405 ,- 10\|10405 ,- 100\|26  + 510,100\|26  + 510,0,1000,1000,1020]
                                                Type: List Expression Integer
                            Time: 0.12 (IN) + 1.0 (EV) + 0.02 (OT) = 1.13 sec
realEigenvalues(rosser, 1.0e-6)
 

   (35)
   [- 1020.0490183830 26123, 0.0, 1020.0490183830 26123, 1020.0,
    1019.9019513130 187988, 1000.0, 0.0980486869 8120117187 5]
                                                             Type: List Float
               Time: 0.07 (IN) + 0.28 (EV) + 0.05 (OT) + 0.02 (GC) = 0.42 sec
eigenvalues(rosser :: Matrix(Float))
 
   WARNING (genufact): No known algorithm to factor
        125            124                 123                       122
       ?    - 86215.0 ?    + 3672643562.0 ?    - 10305 2524136076.0 ?
     + 
                               121                                 120
       214242065 1760625974.0 ?    - 0.3519437981 9139045528 E 23 ?
     + 
                                     119                                 118
       0.4757930276 0524392937 E 27 ?    - 0.5443719612 8759169508 E 31 ?
     + 
                                     117                                 116
       0.5379979009 8770356924 E 35 ?    - 0.4664749268 2226816519 E 39 ?
     + 
                                     115                                 114
       0.3592087692 2534478781 E 43 ?    - 0.2480907901 4852864426 E 47 ?
     + 
                                     113                                 112
       0.1549276891 3929107162 E 51 ?    - 0.8807036930 5149411468 E 54 ?
     + 
                                     111                                 110
       0.4583391720 1504761731 E 58 ?    - 0.2194388254 7216326309 E 62 ?
     + 
                                    109                                 108
       0.9705762773 604715712 E 65 ?    - 0.3980292705 4424329091 E 69 ?
     + 
                                     107                                 106
       0.1518264867 7783075257 E 73 ?    - 0.5401752426 0724778564 E 76 ?
     + 
                                     105                                 104
       0.1796955195 1515805598 E 80 ?    - 0.5601295905 4406117874 E 83 ?
     + 
                                     103                                 102
       0.1639113863 1096220906 E 87 ?    - 0.4510439265 9444505639 E 90 ?
     + 
                                     101                                 100
       0.1168814463 6800724178 E 94 ?    - 0.2855827986 1382495038 E 97 ?
     + 
                                      99                                  98
       0.6586280305 3086327597 E 100 ?   - 0.1435005623 1770466372 E 104 ?
     + 
                                      97                                 96
       0.2955815573 3367270221 E 107 ?   - 0.5758845873 428492513 E 110 ?
     + 
                                      95                                  94
       0.1061610141 8172155474 E 114 ?   - 0.1851850768 7922934268 E 117 ?
     + 
                                      93                                  92
       0.3056218491 6782132505 E 120 ?   - 0.4769657381 1684487203 E 123 ?
     + 
                                      91                                  90
       0.7032699330 7418158372 E 126 ?   - 0.9782596656 7436389234 E 129 ?
     + 
                                      89                                  88
       0.1280860874 3712484582 E 133 ?   - 0.1573106414 8242673085 E 136 ?
     + 
                                     87                                  86
       0.1802439290 923378293 E 139 ?   - 0.1909575702 2321405039 E 142 ?
     + 
                                      85                                  84
       0.1841324046 7558627001 E 145 ?   - 0.1565578204 6290786175 E 148 ?
     + 
                                      83                                  82
       0.1084018298 6945156255 E 151 ?   - 0.4377988417 1758608725 E 153 ?
     + 
                                        81                                  80
       - 0.2968496265 1894553792 E 156 ?   + 0.1023002729 7224474459 E 160 ?
     + 
                                        79                                  78
       - 0.1643770493 4269005245 E 163 ?   + 0.2083326959 4734561364 E 166 ?
     + 
                                        77                                  76
       - 0.2301999742 2965920355 E 169 ?   + 0.2301309174 9423652886 E 172 ?
     + 
                                        75                                  74
       - 0.2118385504 6752677393 E 175 ?   + 0.1812642708 7694905254 E 178 ?
     + 
                                        73                                  72
       - 0.1449610412 5042294701 E 181 ?   + 0.1086839448 8924848295 E 184 ?
     + 
                                        71                                  70
       - 0.7651391596 9967540208 E 186 ?   + 0.5060299956 3124704326 E 189 ?
     + 
                                        69                                  68
       - 0.3142367184 7713335751 E 192 ?   + 0.1829574772 0415689208 E 195 ?
     + 
                                        67                                  66
       - 0.9961784415 3166827826 E 197 ?   + 0.5051793379 2698179236 E 200 ?
     + 
                                        65                                  64
       - 0.2370885486 7640128904 E 203 ?   + 0.1019224176 5460569951 E 206 ?
     + 
                                        63                                 62
       - 0.3942260312 5442307776 E 208 ?   + 0.1323834699 481648387 E 211 ?
     + 
                                        61                                  60
       - 0.3524632481 6587139553 E 213 ?   + 0.4907904491 2672068684 E 215 ?
     + 
                                      59                                  58
       0.1935153311 3162677451 E 218 ?   - 0.2135886927 6123692419 E 221 ?
     + 
                                      57                                  56
       0.1223237295 5917448702 E 224 ?   - 0.5462064456 7735058373 E 226 ?
     + 
                                      55                                  54
       0.2062619424 5435174697 E 229 ?   - 0.6737922494 4291403287 E 231 ?
     + 
                                      53                                52
       0.1898827082 1604329724 E 234 ?   - 0.4486781196 52298524 E 236 ?
     + 
                                      51                                  50
       0.8133738511 6364504076 E 238 ?   - 0.7358667283 4876131493 E 240 ?
     + 
                                       49                                  48
       - 0.1986000215 428423829 E 243 ?   + 0.1331591187 7791407655 E 246 ?
     + 
                                        47                                  46
       - 0.4492807815 4925031508 E 248 ?   + 0.1106530639 7295677952 E 251 ?
     + 
                                        45                                  44
       - 0.2046039509 2572215835 E 253 ?   + 0.2430619124 0670333847 E 255 ?
     + 
                                      43                                  42
       0.3252259818 2888244489 E 256 ?   - 0.1131150344 9655271066 E 260 ?
     + 
                                      41                                  40
       0.3691051035 7773753178 E 262 ?   - 0.7900011265 6063011579 E 264 ?
     + 
                                      39                                  38
       0.1233981952 5026790198 E 267 ?   - 0.1270418736 3851064032 E 269 ?
     + 
                                      37                                  36
       0.1660218706 9618209188 E 270 ?   + 0.2862105879 5857092645 E 273 ?
     + 
                                        35                                  34
       - 0.8110417668 3161233591 E 275 ?   + 0.1484448521 8686301081 E 278 ?
     + 
                                       33                                  32
       - 0.2123387008 794925024 E 280 ?   + 0.2506751820 5612670323 E 282 ?
     + 
                                        31                                  30
       - 0.2494329065 6728197272 E 284 ?   + 0.2109806712 8889498289 E 286 ?
     + 
                                        29                                  28
       - 0.1521224934 1012072561 E 288 ?   + 0.9351456154 4154324412 E 289 ?
     + 
                                        27                                  26
       - 0.4897636603 2042451012 E 291 ?   + 0.2184259738 2222779488 E 293 ?
     + 
                                        25                                  24
       - 0.8298614578 7219241205 E 294 ?   + 0.2689816827 0170685903 E 296 ?
     + 
                                        23                                  22
       - 0.7455272800 2234756452 E 297 ?   + 0.1771957532 6653063304 E 299 ?
     + 
                                        21                                  20
       - 0.3622167611 4512303391 E 300 ?   + 0.6385537866 7592677628 E 301 ?
     + 
                                        19                                  18
       - 0.9730487915 5887722779 E 302 ?   + 0.1283818926 2924796953 E 304 ?
     + 
                                        17                                  16
       - 0.1467911675 9006671118 E 305 ?   + 0.1454586351 2070495541 E 306 ?
     + 
                                        15                                  14
       - 0.1247986846 9975071194 E 307 ?   + 0.9251453429 5406258973 E 307 ?
     + 
                                        13                                  12
       - 0.5905679202 8110037735 E 308 ?   + 0.3230290678 3860457938 E 309 ?
     + 
                                        11                                  10
       - 0.1503623501 5158820289 E 310 ?   + 0.5900666022 0150867207 E 310 ?
     + 
                                        9                                  8
       - 0.1927643191 6531249396 E 311 ?  + 0.5152198729 6418385783 E 311 ?
     + 
                                        7                                  6
       - 0.1099680204 0615001798 E 312 ?  + 0.1809295237 1502506625 E 312 ?
     + 
                                        5                                  4
       - 0.2172461015 8315085132 E 312 ?  + 0.1733446261 3560586487 E 312 ?
     + 
                                        3                                  2
       - 0.7597264055 3053863391 E 311 ?  + 0.1050398077 8828775171 E 311 ?
     + 
       - 0.4443971993 2926345443 E 309 ? - 0.7155498947 0116891371 E 291
     , trying square-free.

   (36)
   [
       %G
     | 
           125             124                  123                        122
         %G    - 86215.0 %G    + 3672643562.0 %G    - 10305 2524136076.0 %G
       + 
                                  121                                  120
         214242065 1760625974.0 %G    - 0.3519437981 9139045528 E 23 %G
       + 
                                        119                                  118
         0.4757930276 0524392937 E 27 %G    - 0.5443719612 8759169508 E 31 %G
       + 
                                        117                                  116
         0.5379979009 8770356924 E 35 %G    - 0.4664749268 2226816519 E 39 %G
       + 
                                        115                                  114
         0.3592087692 2534478781 E 43 %G    - 0.2480907901 4852864426 E 47 %G
       + 
                                        113                                  112
         0.1549276891 3929107162 E 51 %G    - 0.8807036930 5149411468 E 54 %G
       + 
                                        111                                  110
         0.4583391720 1504761731 E 58 %G    - 0.2194388254 7216326309 E 62 %G
       + 
                                       109                                  108
         0.9705762773 604715712 E 65 %G    - 0.3980292705 4424329091 E 69 %G
       + 
                                        107                                  106
         0.1518264867 7783075257 E 73 %G    - 0.5401752426 0724778564 E 76 %G
       + 
                                        105                                  104
         0.1796955195 1515805598 E 80 %G    - 0.5601295905 4406117874 E 83 %G
       + 
                                        103                                  102
         0.1639113863 1096220906 E 87 %G    - 0.4510439265 9444505639 E 90 %G
       + 
                                        101                                  100
         0.1168814463 6800724178 E 94 %G    - 0.2855827986 1382495038 E 97 %G
       + 
                                         99                                   98
         0.6586280305 3086327597 E 100 %G   - 0.1435005623 1770466372 E 104 %G
       + 
                                         97                                  96
         0.2955815573 3367270221 E 107 %G   - 0.5758845873 428492513 E 110 %G
       + 
                                         95                                   94
         0.1061610141 8172155474 E 114 %G   - 0.1851850768 7922934268 E 117 %G
       + 
                                         93                                   92
         0.3056218491 6782132505 E 120 %G   - 0.4769657381 1684487203 E 123 %G
       + 
                                         91                                   90
         0.7032699330 7418158372 E 126 %G   - 0.9782596656 7436389234 E 129 %G
       + 
                                         89                                   88
         0.1280860874 3712484582 E 133 %G   - 0.1573106414 8242673085 E 136 %G
       + 
                                        87                                   86
         0.1802439290 923378293 E 139 %G   - 0.1909575702 2321405039 E 142 %G
       + 
                                         85                                   84
         0.1841324046 7558627001 E 145 %G   - 0.1565578204 6290786175 E 148 %G
       + 
                                         83                                   82
         0.1084018298 6945156255 E 151 %G   - 0.4377988417 1758608725 E 153 %G
       + 
                                           81
         - 0.2968496265 1894553792 E 156 %G
       + 
                                         80                                   79
         0.1023002729 7224474459 E 160 %G   - 0.1643770493 4269005245 E 163 %G
       + 
                                         78                                   77
         0.2083326959 4734561364 E 166 %G   - 0.2301999742 2965920355 E 169 %G
       + 
                                         76                                   75
         0.2301309174 9423652886 E 172 %G   - 0.2118385504 6752677393 E 175 %G
       + 
                                         74                                   73
         0.1812642708 7694905254 E 178 %G   - 0.1449610412 5042294701 E 181 %G
       + 
                                         72                                   71
         0.1086839448 8924848295 E 184 %G   - 0.7651391596 9967540208 E 186 %G
       + 
                                         70                                   69
         0.5060299956 3124704326 E 189 %G   - 0.3142367184 7713335751 E 192 %G
       + 
                                         68                                   67
         0.1829574772 0415689208 E 195 %G   - 0.9961784415 3166827826 E 197 %G
       + 
                                         66                                   65
         0.5051793379 2698179236 E 200 %G   - 0.2370885486 7640128904 E 203 %G
       + 
                                         64                                   63
         0.1019224176 5460569951 E 206 %G   - 0.3942260312 5442307776 E 208 %G
       + 
                                        62                                   61
         0.1323834699 481648387 E 211 %G   - 0.3524632481 6587139553 E 213 %G
       + 
                                         60                                   59
         0.4907904491 2672068684 E 215 %G   + 0.1935153311 3162677451 E 218 %G
       + 
                                           58
         - 0.2135886927 6123692419 E 221 %G
       + 
                                         57                                   56
         0.1223237295 5917448702 E 224 %G   - 0.5462064456 7735058373 E 226 %G
       + 
                                         55                                   54
         0.2062619424 5435174697 E 229 %G   - 0.6737922494 4291403287 E 231 %G
       + 
                                         53                                 52
         0.1898827082 1604329724 E 234 %G   - 0.4486781196 52298524 E 236 %G
       + 
                                         51                                   50
         0.8133738511 6364504076 E 238 %G   - 0.7358667283 4876131493 E 240 %G
       + 
                                          49
         - 0.1986000215 428423829 E 243 %G
       + 
                                         48                                   47
         0.1331591187 7791407655 E 246 %G   - 0.4492807815 4925031508 E 248 %G
       + 
                                         46                                   45
         0.1106530639 7295677952 E 251 %G   - 0.2046039509 2572215835 E 253 %G
       + 
                                         44                                   43
         0.2430619124 0670333847 E 255 %G   + 0.3252259818 2888244489 E 256 %G
       + 
                                           42
         - 0.1131150344 9655271066 E 260 %G
       + 
                                         41                                   40
         0.3691051035 7773753178 E 262 %G   - 0.7900011265 6063011579 E 264 %G
       + 
                                         39                                   38
         0.1233981952 5026790198 E 267 %G   - 0.1270418736 3851064032 E 269 %G
       + 
                                         37                                   36
         0.1660218706 9618209188 E 270 %G   + 0.2862105879 5857092645 E 273 %G
       + 
                                           35
         - 0.8110417668 3161233591 E 275 %G
       + 
                                         34                                  33
         0.1484448521 8686301081 E 278 %G   - 0.2123387008 794925024 E 280 %G
       + 
                                         32                                   31
         0.2506751820 5612670323 E 282 %G   - 0.2494329065 6728197272 E 284 %G
       + 
                                         30                                   29
         0.2109806712 8889498289 E 286 %G   - 0.1521224934 1012072561 E 288 %G
       + 
                                         28                                   27
         0.9351456154 4154324412 E 289 %G   - 0.4897636603 2042451012 E 291 %G
       + 
                                         26                                   25
         0.2184259738 2222779488 E 293 %G   - 0.8298614578 7219241205 E 294 %G
       + 
                                         24                                   23
         0.2689816827 0170685903 E 296 %G   - 0.7455272800 2234756452 E 297 %G
       + 
                                         22                                   21
         0.1771957532 6653063304 E 299 %G   - 0.3622167611 4512303391 E 300 %G
       + 
                                         20                                   19
         0.6385537866 7592677628 E 301 %G   - 0.9730487915 5887722779 E 302 %G
       + 
                                         18                                   17
         0.1283818926 2924796953 E 304 %G   - 0.1467911675 9006671118 E 305 %G
       + 
                                         16                                   15
         0.1454586351 2070495541 E 306 %G   - 0.1247986846 9975071194 E 307 %G
       + 
                                         14                                   13
         0.9251453429 5406258973 E 307 %G   - 0.5905679202 8110037735 E 308 %G
       + 
                                         12                                   11
         0.3230290678 3860457938 E 309 %G   - 0.1503623501 5158820289 E 310 %G
       + 
                                         10                                   9
         0.5900666022 0150867207 E 310 %G   - 0.1927643191 6531249396 E 311 %G
       + 
                                         8                                   7
         0.5152198729 6418385783 E 311 %G  - 0.1099680204 0615001798 E 312 %G
       + 
                                         6                                   5
         0.1809295237 1502506625 E 312 %G  - 0.2172461015 8315085132 E 312 %G
       + 
                                         4                                   3
         0.1733446261 3560586487 E 312 %G  - 0.7597264055 3053863391 E 311 %G
       + 
                                         2
         0.1050398077 8828775171 E 311 %G  - 0.4443971993 2926345443 E 309 %G
       + 
         - 0.7155498947 0116891371 E 291
     ]
Type: List Union(Fraction Polynomial Float,SuchThat(Symbol,Polynomial Float))
             Time: 0.32 (IN) + 12.73 (EV) + 0.82 (OT) + 1.97 (GC) = 15.83 sec
)clear properties rosser
 
-- Eigenvalues of the generalized hypercompanion matrix of
-- (x^5 + a4*x^4 + a3*x^3 + a2*x^2 + a1*x + a0)*(x^2 + x + 1)^2
-- => {[-1 +- sqrt(3) i]/2, [-1 +- sqrt(3) i]/2,
--     RootsOf(x^5 + a4*x^4 + a3*x^3 + a2*x^2 + a1*x + a0)}
matrix([[-a4, -a3, -a2, -a1, -a0,  0,  0,  0,  0], _
        [  1,   0,   0,   0,   0,  0,  0,  0,  0], _
        [  0,   1,   0,   0,   0,  0,  0,  0,  0], _
        [  0,   0,   1,   0,   0,  0,  0,  0,  0], _
        [  0,   0,   0,   1,   0,  0,  0,  0,  0], _
        [  0,   0,   0,   0,   0, -1, -1,  0,  0], _
        [  0,   0,   0,   0,   0,  1,  0,  0,  0], _
        [  0,   0,   0,   0,   0,  0,  1, -1, -1], _
        [  0,   0,   0,   0,   0,  0,  0,  1,  0]]);
 

                                              Type: Matrix Polynomial Integer
                                       Time: 0.15 (IN) + 0.03 (OT) = 0.18 sec
radicalEigenvalues(%)
 

             +---+        +---+      +---+      +---+
          - \|- 3  - 1 - \|- 3  - 1 \|- 3  - 1 \|- 3  - 1
   (38)  [------------,------------,----------,----------]
                2            2           2          2
                                                Type: List Expression Integer
                           Time: 0.17 (IN) + 0.07 (EV) + 0.03 (OT) = 0.27 sec
-- Eigenvalues and eigenvectors => lambda = {a, a, a, 1 - i, 1 + i},
-- eigenvectors = [[1 0 0 0 0], [0 0 1 0 0], [0 0 0 1 0],
--                 [0, (1 + i)/2, 0, 0, 1], [0, (1 - i)/2, 0, 0, 1]]^T
matrix([[a,  0, 0, 0, 0], _
        [0,  0, 0, 0, 1], _
        [0,  0, a, 0, 0], _
        [0,  0, 0, a, 0], _
        [0, -2, 0, 0, 2]]);
 

                                              Type: Matrix Polynomial Integer
                                                   Time: 0.05 (IN) = 0.05 sec
radicalEigenvectors(%)
 

   (40)
                                             +     0      +
                                             |            |
                                             |   +---+    |
                                             |- \|- 1  + 1|
              +---+                          |------------|
   [[radval= \|- 1  + 1,radmult= 1,radvect= [|      2     |]],
                                             |            |
                                             |     0      |
                                             |            |
                                             |     0      |
                                             |            |
                                             +     1      +
                                               +    0     +
                                               |          |
                                               | +---+    |
                                               |\|- 1  + 1|
                +---+                          |----------|
    [radval= - \|- 1  + 1,radmult= 1,radvect= [|     2    |]],
                                               |          |
                                               |    0     |
                                               |          |
                                               |    0     |
                                               |          |
                                               +    1     +
                                    +0+ +0+ +1+
                                    | | | | | |
                                    |0| |0| |0|
                                    | | | | | |
    [radval= a,radmult= 3,radvect= [|0|,|1|,|0|]]]
                                    | | | | | |
                                    |1| |0| |0|
                                    | | | | | |
                                    +0+ +0+ +0+
Type: List Record(radval: Expression Integer,radmult: Integer,radvect: List Matrix Expression Integer)
                           Time: 0.03 (IN) + 0.17 (EV) + 0.08 (OT) = 0.28 sec
-- Eigenvalues and generalized eigenvectors   [Johnson and Riess, p. 193]
-- => lambda = {1, 1, 1}, eigenvectors = [[4 -1 4], [1 -1 2], [3 -1 3]]^T
matrix([[-1,  -8, 1], _
        [-1,  -3, 2], _
        [-4, -16, 7]]);
 

                                                         Type: Matrix Integer
                                                                  Time: 0 sec
radicalEigenvectors(%)
 

                                          +- 4+
                                          |   |
   (42)  [[radval= 1,radmult= 3,radvect= [| 1 |]]]
                                          |   |
                                          + 0 +
Type: List Record(radval: Expression Integer,radmult: Integer,radvect: List Matrix Expression Integer)
                           Time: 0.02 (IN) + 0.02 (EV) + 0.02 (OT) = 0.05 sec
-- Eigenvalues and generalized eigenvectors   [Johnson and Riess, p. 199]
-- => lambda = {1, 1, 1, 1, 2, 2}, eigenvectors =
--    [[1 -1  0  0  0 0], [-1 0 0 1 0 0], [0 0 1 -1 0 -1],
--     [0  0 -1 -2 -1 3], [ 0 2 0 0 0 0], [2 0 1  1 0  0]]^T
matrix([[1, 0, 1, 1, 0, 1], _
        [1, 2, 0, 0, 0, 0], _
        [0, 0, 2, 0, 1, 1], _
        [0, 0, 1, 1, 0, 0], _
        [0, 0, 0, 0, 1, 0], _
        [0, 0, 0, 0, 1, 1]]);
 

                                                         Type: Matrix Integer
                                                   Time: 0.02 (IN) = 0.02 sec
radicalEigenvectors(%)
 

   (44)
                                    +0+
                                    | |
                                    |1|
                                    | |
                                    |0|
   [[radval= 2,radmult= 2,radvect= [| |]],
                                    |0|
                                    | |
                                    |0|
                                    | |
                                    +0+
                                    +- 1+
                                    |   |
                                    | 1 |
                                    |   |
                                    | 0 |
    [radval= 1,radmult= 4,radvect= [|   |]]]
                                    | 0 |
                                    |   |
                                    | 0 |
                                    |   |
                                    + 0 +
Type: List Record(radval: Expression Integer,radmult: Integer,radvect: List Matrix Expression Integer)
                           Time: 0.05 (IN) + 0.02 (EV) + 0.05 (OT) = 0.12 sec
-- Jordan form => diag([[1 1],[0 1]], [[1 1],[0 1]], -1)   [Gantmacher, p. 172]
matrix([[1,  0,  0,  1, -1], _
        [0,  1, -2,  3, -3], _
        [0,  0, -1,  2, -2], _
        [1, -1,  1,  0,  1], _
        [1, -1,  1, -1,  2]]);
 

                                                         Type: Matrix Integer
                                                                  Time: 0 sec
-- Smith normal form => [[1, 0], [0, x^4 - x^2 + 1]]   [Cullen, p. 230]
matrix([[x**2, x - 1], [x + 1, x**2]])
 

         +  2         +
         | x     x - 1|
   (46)  |            |
         |         2  |
         +x + 1   x   +
                                              Type: Matrix Polynomial Integer
                                                   Time: 0.03 (IN) = 0.03 sec
-- Matrix exponential => e [[cos 2, -sin 2], [sin 2, cos 2]]
exp(matrix([[1, -2], [2, 1]]))
 
   There are 2 exposed and 6 unexposed library operations named exp 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op exp
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named exp 
      with argument type(s) 
                               Matrix Integer
      
-- Matrix exponential   [Rick Niles] =>
-- [[1, 4 sin(w t)/w - 3 t , 6 [w t - sin(w t)], 2/w [1 - cos(w t)] ],
--  [0, 4 cos(w t) - 3     , 6 w [1 - cos(w t)], 2 sin(w t)         ],
--  [0, -2/w [1 - cos(w t)], 4 - 3 cos(w t)    , sin(w t)/w         ],
--  [0, -2 sin(w t)        , 3 w sin(w t)      , cos(w t)           ]]
matrix([[0, 1,    0,      0  ], _
        [0, 0,    0,      2*w], _
        [0, 0,    0,      1  ], _
        [0, -2*w, 3*w**2, 0  ]]);
 

                                              Type: Matrix Polynomial Integer
                                                   Time: 0.05 (IN) = 0.05 sec
exp(%*t)
 
   There are 2 exposed and 6 unexposed library operations named exp 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op exp
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named exp 
      with argument type(s) 
                          Matrix Polynomial Integer
      
-- Sine of a Jordan matrix => diag([[sin a, cos a],[0, sin a]], sin b,
-- [[sin c, cos c, -sin(c)/2],[0, sin c, cos c],[0, 0, sin c]])
-- See F. R. Gantmacher, _The Theory of Matrices_, Volume One, Chelsea
-- Publishing Company, 1977, p. 100 to see how to do a general function.
matrix([[a, 1, 0, 0, 0, 0], _
        [0, a, 0, 0, 0, 0], _
        [0, 0, b, 0, 0, 0], _
        [0, 0, 0, c, 1, 0], _
        [0, 0, 0, 0, c, 1], _
        [0, 0, 0, 0, 0, c]]);
 

                                              Type: Matrix Polynomial Integer
                                       Time: 0.03 (IN) + 0.03 (OT) = 0.07 sec
sin(%)
 
   There are 2 exposed and 6 unexposed library operations named sin 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op sin
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named sin 
      with argument type(s) 
                          Matrix Polynomial Integer
      
-- Sine of a matrix => [[1 0 0], [0 1 0], [0 0 1]]   [Cullen, p. 261]
%pi/2*matrix([[2, 1, 1], [2, 3, 2], [1, 1, 2]]);
 

                                                              Type: Matrix Pi
                                       Time: 0.30 (IN) + 0.05 (OT) = 0.35 sec
sin(%)
 
   There are 2 exposed and 6 unexposed library operations named sin 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                               )display op sin
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named sin 
      with argument type(s) 
                                  Matrix Pi
      
-- Matrix square root => {+-[[3 1], [1 4]], +-1/sqrt(5) [[-1 7], [7 6]]}
matrix([[10, 7], [7, 17]])
 

         +10  7 +
   (50)  |      |
         +7   17+
                                                         Type: Matrix Integer
                                                                  Time: 0 sec
sqrt(%)
 
   There are 2 exposed and 0 unexposed library operations named sqrt 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op sqrt
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named sqrt 
      with argument type(s) 
                               Matrix Integer
      
-- Square root of a non-singular matrix   [Gantmacher, p. 233]
-- => [[e, (e - n) v w + e/2, (n - e) v], [0, e, 0], [0, (e - n) w, n]
-- for arbitrary v and w with arbitrary signs e and n = +-1
matrix([[1, 1, 0], [0, 1, 0], [0, 0, 1]]);
 

                                                         Type: Matrix Integer
                                                                  Time: 0 sec
sqrt(%)
 
   There are 2 exposed and 0 unexposed library operations named sqrt 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op sqrt
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named sqrt 
      with argument type(s) 
                               Matrix Integer
      
-- Square root of a singular matrix   [Gantmacher, p. 239]
-- => [[0 a b], [0 0 0], [0 1/b 0]] for arbitrary a and b
matrix([[0, 1, 0], [0, 0, 0], [0, 0, 0]]);
 

                                                         Type: Matrix Integer
                                                   Time: 0.02 (IN) = 0.02 sec
sqrt(%)
 
   There are 2 exposed and 0 unexposed library operations named sqrt 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op sqrt
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named sqrt 
      with argument type(s) 
                               Matrix Integer
      
-- Singular value decomposition
-- => [1/sqrt(14)  3/sqrt(10) 1/sqrt(35) ] [2 sqrt(7) 0] [1/sqrt(2)  1/sqrt(2)]
--    [2/sqrt(14)  0           -sqrt(5/7)] [0         0] [1/sqrt(2) -1/sqrt(2)]
--    [3/sqrt(14) -1/sqrt(10) 3/sqrt(35) ] [0         0]
--    = U Sigma V^T --- singular values are [2 sqrt(7), 0]
matrix([[1, 1], [2, 2], [3, 3]])
 

         +1  1+
         |    |
   (53)  |2  2|
         |    |
         +3  3+
                                                         Type: Matrix Integer
                                                   Time: 0.02 (OT) = 0.02 sec
-- Jacobian of (r cos t, r sin t) => [[cos t, -r sin t], [sin t, r cos t]]
[r*cos(t), r*sin(t)]
 

   (54)  [r cos(t),r sin(t)]
                                                Type: List Expression Integer
                                       Time: 0.07 (IN) + 0.02 (OT) = 0.08 sec
-- Hessian of r^2 sin t => [[2 sin t, 2 r cos t], [2 r cos t, -r^2 sin t]]
r**2*sin(t)
 

          2
   (55)  r sin(t)
                                                     Type: Expression Integer
                                       Time: 0.08 (IN) + 0.02 (OT) = 0.10 sec
-- Wronskian of (cos t, sin t) => [[cos t, sin t], [-sin t, cos t]]
[cos(t), sin(t)]
 

   (56)  [cos(t),sin(t)]
                                                Type: List Expression Integer
                                                   Time: 0.02 (IN) = 0.02 sec
-- How easy is it to define functions to do the last three operations?
-- Jacobian of (r cos t, r sin t) => [[cos t, -r sin t], [sin t, r cos t]]
MYjacobian(e, v) == matrix([[D(f, x) for x in v] for f in e])
 
                                                                   Type: Void
                                                                  Time: 0 sec
MYjacobian([r*cos(t), r*sin(t)], [r, t])
 
   Compiling function MYjacobian with type (List Expression Integer,
      List OrderedVariableList [r,t]) -> Matrix Expression Integer 

         +cos(t)  - r sin(t)+
   (58)  |                  |
         +sin(t)   r cos(t) +
                                              Type: Matrix Expression Integer
                           Time: 0.08 (IN) + 0.02 (EV) + 0.05 (OT) = 0.15 sec
-- Hessian of r^2 sin t => [[2 sin t, 2 r cos t], [2 r cos t, -r^2 sin t]]
MYhessian(f, x) ==
   local n
   n:= #x
   matrix([[D(f, [x . i, x . j]) for j in 1..n] for i in 1..n])
 
                                                                   Type: Void
                                                                  Time: 0 sec
MYhessian(r**2*sin(t), [r, t])
 
   Compiling function MYhessian with type (Expression Integer,List 
      OrderedVariableList [r,t]) -> Matrix Expression Integer 

         + 2sin(t)   2r cos(t) +
   (60)  |                     |
         |              2      |
         +2r cos(t)  - r sin(t)+
                                              Type: Matrix Expression Integer
                           Time: 0.13 (IN) + 0.03 (EV) + 0.03 (OT) = 0.20 sec
-- Wronskian of (cos t, sin t) => [[cos t, sin t], [-sin t, cos t]]
MYwronskian(f, x) ==
   local n
   n:= #f
   matrix([[D(f . j, x, i-1) for j in 1..n] for i in 1..n])
 
                                                                   Type: Void
                                                                  Time: 0 sec
MYwronskian([cos(t), sin(t)], t)
 
   Your expression cannot be fully compiled because it contains an 
      integer expression (for - ) whose sign cannot be determined (in 
      general) and so must be specified by you. Perhaps you can try 
      substituting something like
                                  (- :: PI) 
                                     or
                                 (- :: NNI) 
      into your expression for - .
   AXIOM will attempt to step through and interpret the code.

         + cos(t)   sin(t)+
   (62)  |                |
         +- sin(t)  cos(t)+
                                              Type: Matrix Expression Integer
                                       Time: 0.15 (IN) + 0.05 (EV) = 0.20 sec
-- ---------- Quit ----------
)quit
 

real   160.6
user   78.2
sys    2.1
\end{verbatim}
\section{Tensor Analysis}
\begin{verbatim}
 
-- ---------- Tensor Analysis ----------
-- Generalized Kronecker delta: delta([j, h], [i, k]) =
-- delta(j, i) delta(h, k) - delta(j, k) delta(h, i).  See David Lovelock and
-- Hanno Rund, _Tensors, Differential Forms, & Variational Principles_,  John
-- Wiley & Sons, Inc., 1975, p. 109.
delta : CartesianTensor(1, 4, Integer) := kroneckerDelta()
 

        +1  0  0  0+
        |          |
        |0  1  0  0|
   (1)  |          |
        |0  0  1  0|
        |          |
        +0  0  0  1+
                                           Type: CartesianTensor(1,4,Integer)
                           Time: 0.02 (EV) + 0.03 (OT) + 0.02 (GC) = 0.07 sec
delta([i, k], [j, h])
 
   There are no exposed library operations named delta but there is one
      unexposed operation with that name. Use HyperDoc Browse or issue
                              )display op delta
      to learn more about the available operation.
 
   Cannot find a definition or applicable library operation named delta
      with argument type(s) 
                       List OrderedVariableList [i,k]
                       List OrderedVariableList [j,h]
      
)clear properties delta
 
-- Levi-Civita symbol: [epsilon(2,1,3), epsilon(1,3,1)] => [-1, 0]
epsilon : CartesianTensor(1, 3, Integer) := leviCivitaSymbol()
 

         +0   0   0+ +0  0  - 1+ + 0   1  0+
         |         | |         | |         |
   (2)  [|0   0   1|,|0  0   0 |,|- 1  0  0|]
         |         | |         | |         |
         +0  - 1  0+ +1  0   0 + + 0   0  0+
                                           Type: CartesianTensor(1,3,Integer)
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
[epsilon(2, 1, 3), epsilon(1, 3, 1)]
 

   (3)  [- 1,0]
                                                           Type: List Integer
                           Time: 0.02 (IN) + 0.02 (EV) + 0.02 (GC) = 0.05 sec
)clear properties epsilon
 
-- Tensor outer product:                   [[  5  6] [-10 -12]]
--                       [1 -2]   [ 5 6]   [[ -7  8] [ 14 -16]]
--  ij      ij           [3  4] X [-7 8] = [                  ]
-- c     = a   b                           [[ 15 18] [ 20  24]]
--    kl        kl                         [[-21 24] [-28  32]]
a:= matrix([[1, -2], [3, 4]]);
 

                                                         Type: Matrix Integer
               Time: 0.02 (IN) + 0.02 (EV) + 0.02 (OT) + 0.03 (GC) = 0.09 sec
b:= matrix([[5, 6], [-7, 8]]);
 

                                                         Type: Matrix Integer
                                                   Time: 0.02 (IN) = 0.02 sec
product(a :: CartesianTensor(1, 2, Integer), _
        b :: CartesianTensor(1, 2, Integer))
 

        + + 5   6+   +- 10  - 12++
        | |      |   |          ||
        | +- 7  8+   + 14   - 16+|
   (6)  |                        |
        |+ 15   18+   + 20   24+ |
        ||        |   |        | |
        ++- 21  24+   +- 28  32+ +
                                           Type: CartesianTensor(1,2,Integer)
                                       Time: 0.15 (IN) + 0.08 (OT) = 0.23 sec
)clear properties a b
 
-- Definition of the Christoffel symbol of the first kind (a is the metric
-- tensor) [Lovelock and Rund, p. 81]
--              d a     d a     d a
--           1     kh      hl      lk
-- Chr1    = - (----- + ----- - -----)
--     lhk   2      l       k       h
--               d x     d x     d x
-- Partial covariant derivative of a type (1, 1) tensor field (Chr2 is the
-- Christoffel symbol of the second kind) [Lovelock and Rund, p. 77]
--  i      d    i        i   m        m   i
-- T    = ---- T  + Chr2    T  - Chr2    T
--  j|k      k  j       m k  j       j k  m
--        d x
T:= operator('T);
 

                                                          Type: BasicOperator
                           Time: 0.08 (IN) + 0.02 (EV) + 0.02 (GC) = 0.12 sec
T([i], [j])
 

   (8)  T([i],[j])
                                                 Type: Expression List Symbol
               Time: 0.65 (IN) + 0.02 (EV) + 0.12 (OT) + 0.05 (GC) = 0.83 sec
-- Verify the Bianchi identity for a symmetric connection (K is the Riemann
-- curvature tensor) [Lovelock and Rund, p. 94]
--   h         h          h
-- K       + K        + K       = 0
--  i jk|l    i kl|j     i lj|k
-- ---------- Quit ----------
)quit
 

real   4.6
user   2.7
sys    0.2
\end{verbatim}
\section{Sums}
\begin{verbatim}

 
-- ---------- Sums ----------
-- Simplify the sum below to sum(x[i]^2, i = 1..n) - sum(x[i], i = 1..n)^2/n
x:= operator('x);
 

                                                          Type: BasicOperator
                                       Time: 0.07 (IN) + 0.10 (OT) = 0.17 sec
xbar:= sum(x(j), j = 1..n) / n
 

         n
        --+
        >     x(j)
        --+
        j= 1
   (2)  ----------
             n
                                                     Type: Expression Integer
               Time: 0.98 (IN) + 0.41 (EV) + 0.32 (OT) + 0.15 (GC) = 1.87 sec
sum((x(i) - xbar)**2, i = 1..n)
 

               n        2           n
              --+                  --+           2    2
              >     x(j)  - 2n x(i)>     x(j) + n x(i)
         n    --+                  --+
        --+   j= 1                 j= 1
   (3)  >     -----------------------------------------
        --+                        2
        i= 1                      n
                                                     Type: Expression Integer
               Time: 0.18 (IN) + 0.22 (EV) + 0.07 (OT) + 0.02 (GC) = 0.48 sec
)clear properties x xbar
 
-- Derivation of the least squares fitting of data points (x[i], y[i]) to a
-- line y = m x + b.  See G. Keady, ``Using Maple's linalg package with Zill
-- and Cullen _Advanced Engineering Mathematics_, Part II: Vectors, Matrices
-- and Vector Calculus'', University of Western Australia,
-- ftp://maths.uwa.edu.au/pub/keady/
x:= operator('x);
 

                                                          Type: BasicOperator
                                                   Time: 0.02 (EV) = 0.02 sec
y:= operator('y);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
f:= sum((y(i) - m*x(i) - b)**2, i = 1..n);
 

                                                     Type: Expression Integer
                           Time: 0.17 (IN) + 0.15 (EV) + 0.02 (OT) = 0.33 sec
solve([D(f, m) = 0, D(f, b) = 0], [m, b])
 

   (7)  [[]]
                                  Type: List List Equation Expression Integer
               Time: 1.45 (IN) + 0.30 (EV) + 0.20 (OT) + 0.08 (GC) = 2.03 sec
)clear properties x y f
 
-- Indefinite sum => (-1)^n binomial(2 n, n).  See Herbert S, Wilf,
-- ``IDENTITIES and their computer proofs'', University of Pennsylvania.
sum((-1)**k * binomial(2*n, k)**2, k)
 

         k              2
        --+       %A 2n
   (8)  >    (- 1)  (  )
        --+          %A
        %A
                                                     Type: Expression Integer
               Time: 0.17 (IN) + 0.90 (EV) + 0.03 (OT) + 0.03 (GC) = 1.13 sec
-- Check whether the full Gosper algorithm is implemented
-- => 1/2^(n + 1) binomial(n, k - 1)
sum(binomial(n, k)/2**n - binomial(n + 1, k)/2**(n + 1), k)
 

                      n n + 1                n + 1   n
        (- n + k - 2)2 (     ) + (n - k + 2)2     (     )
                        k - 1                      k - 1
   (9)  -------------------------------------------------
                                    n n + 1
                       (n - 2k + 3)2 2
                                                     Type: Expression Integer
                           Time: 0.12 (IN) + 0.92 (EV) + 0.02 (OT) = 1.05 sec
normalize(%)
 

                          n!
   (10)  -----------------------------------
           (n + 1)log(2)
         %e             (k - 1)!(n - k + 1)!
                                                     Type: Expression Integer
                           Time: 0.03 (IN) + 0.40 (EV) + 0.03 (OT) = 0.47 sec
-- Dixon's identity (check whether Zeilberger's algorithm is implemented).
-- Note that the indefinite sum is equivalent to the definite
-- sum(..., k = -min(a, b, c)..min(a, b, c)) => (a + b + c)!/(a! b! c!)
-- [Wilf]
sum((-1)**k * binomial(a+b, a+k) * binomial(b+c, b+k) _
            * binomial(c+a, c+k), k)
 

          k
         --+       %A b + a   c + a   c + b
   (11)  >    (- 1)  (      )(      )(      )
         --+          a + %A  c + %A  b + %A
         %A
                                                     Type: Expression Integer
               Time: 0.27 (IN) + 6.12 (EV) + 0.05 (OT) + 1.02 (GC) = 7.45 sec
-- Telescoping sum => g(n + 1) - g(0)
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
sum(g(k + 1) - g(k), k = 0..n)
 

          n
         --+
   (13)  >     g(k + 1) - g(k)
         --+
         k= 0
                                                     Type: Expression Integer
                           Time: 0.25 (IN) + 0.05 (EV) + 0.03 (OT) = 0.33 sec
)clear properties g
 
-- => n^2 (n + 1)^2 / 4
sum(k**3, k = 1..n)
 

          4     3    2
         n  + 2n  + n
   (14)  -------------
               4
                                            Type: Fraction Polynomial Integer
                           Time: 0.03 (IN) + 0.12 (EV) + 0.02 (OT) = 0.17 sec
factorFraction(%)
 

          2       2
         n (n + 1)
   (15)  ----------
              4
                                   Type: Fraction Factored Polynomial Integer
                           Time: 0.02 (IN) + 0.08 (EV) + 0.02 (OT) = 0.12 sec
-- See Daniel I. A. Cohen, _Basic Techniques of Combinatorial Theory_, John
-- Wiley and Sons, 1978, p. 60.  The following two sums can be derived directly
-- from the binomial theorem:
-- sum(k^2 * binomial(n, k) * x^k, k = 1..n) = n x (1 + n x) (1 + x)^(n - 2)
-- => n (n + 1) 2^(n - 2)   [Cohen, p. 60]
sum(k**2 * binomial(n, k), k = 1..n)
 

          n
         --+    2 n
   (16)  >     k ( )
         --+      k
         k= 1
                                                     Type: Expression Integer
                           Time: 0.10 (IN) + 0.20 (EV) + 0.02 (OT) = 0.32 sec
-- => [2^(n + 1) - 1]/(n + 1)   [Cohen, p. 83]
sum(binomial(n, k)/(k + 1), k = 0..n)
 

                 n
                ( )
          n      k
         --+
   (17)  >     -----
         --+   k + 1
         k= 0
                                                     Type: Expression Integer
                           Time: 0.03 (IN) + 0.20 (EV) + 0.02 (OT) = 0.25 sec
-- Vandermonde's identity => binomial(n + m, r)   [Cohen, p. 31]
sum(binomial(n, k) * binomial(m, r - k), k = 0..r)
 

          r
         --+      m    n
   (18)  >     (     )( )
         --+    r - k  k
         k= 0
                                                     Type: Expression Integer
                           Time: 0.08 (IN) + 0.55 (EV) + 0.03 (OT) = 0.67 sec
-- => Fibonacci[2 n]   [Cohen, p. 88]
sum(binomial(n, k) * fibonacci(k), k = 0..n)
 
   There are 1 exposed and 0 unexposed library operations named 
      fibonacci having 1 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op fibonacci
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      fibonacci with argument type(s) 
                                 Variable k
      
-- => Fibonacci[n] Fibonacci[n + 1]   [Cohen, p. 65]
sum(fibonacci(k)**2, k = 1..n)
 
   There are 1 exposed and 0 unexposed library operations named 
      fibonacci having 1 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op fibonacci
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      fibonacci with argument type(s) 
                                 Variable k
      
-- => 1/2 cot(x/2) - cos([2 n + 1] x/2)/[2 sin(x/2)]
-- See Konrad Knopp, _Theory and Application of Infinite Series_, Dover
-- Publications, Inc., 1990, p. 480.
sum(sin(k*x), k = 1..n)
 

          n
         --+
   (19)  >     sin(k x)
         --+
         k= 1
                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 0.27 (EV) + 0.03 (OT) = 0.37 sec
-- => sin(n x)^2/sin x   [Gradshteyn and Ryzhik 1.342(3)]
sum(sin((2*k - 1)*x), k = 1..n)
 

          n
         --+
   (20)  >     sin((2k - 1)x)
         --+
         k= 1
                                                     Type: Expression Integer
                           Time: 0.05 (IN) + 0.20 (EV) + 0.03 (OT) = 0.28 sec
-- => Fibonacci[n + 1]   [Cohen, p. 87]
sum(binomial(n - k, k), k = 0..floor(n/2))
 
   There are 2 exposed and 0 unexposed library operations named floor 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op floor
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named floor
      with argument type(s) 
                         Polynomial Fraction Integer
      
-- => pi^2 / 6 + zeta(3) =~ 2.84699
limit(sum(1/k**2 + 1/k**3, k = 1..n), n = %plusInfinity)
 

   (21)  "failed"
                                                    Type: Union("failed",...)
                Time: 0.45 (IN) + 1.0 (EV) + 0.05 (OT) + 0.55 (GC) = 2.05 sec
-- => pi^2/12 - 1/2 (log 2)^2   [Gradshteyn and Ryzhik 0.241(2)]
limit(sum(1/(2**k*k**2), k = 1..n), n = %plusInfinity)
 

   (22)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.10 (IN) + 0.32 (EV) + 0.07 (OT) = 0.48 sec
-- => pi/12 sqrt(3) - 1/4 log 3   [Knopp, p. 268]
limit(sum(1/((3*k + 1)*(3*k + 2)*(3*k + 3)), k = 0..n), n = %plusInfinity)
 

   (23)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.10 (IN) + 0.30 (EV) + 0.02 (OT) = 0.42 sec
-- => 1/2 (2^(n - 1) + 2^(n/2) cos(n pi/4))   [Gradshteyn and Ryzhik 0.153(1)]
limit(sum(binomial(n, 4*k), k = 0..nn), nn = %plusInfinity)
 

   (24)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.13 (IN) + 4.83 (EV) + 0.02 (OT) + 0.53 (GC) = 5.52 sec
-- => 1   [Knopp, p. 233]
limit(sum(1/(sqrt(k*(k + 1)) * (sqrt(k) + sqrt(k + 1))), k = 1..n), _
      n = %plusInfinity)
 

   (25)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.10 (IN) + 0.58 (EV) + 0.03 (OT) = 0.72 sec
-- => 1/sqrt([1 - x y]^2 - 4 x^2)   (| x y | < 1 and -1 <= x < 1).
--    From Evangelos A. Coutsias, Michael J. Wester and Alan S. Perelson, ``A
--    Nucleation Theory of Cell Surface Capping'', draft.
limit(sum(sum(binomial(n, k)*binomial(n - k, n - 2*k)*x**n*y**(n - 2*k), _
              k = 0..floor(n/2)), _
          n = 0..nn), nn = %plusInfinity)
 
   There are 2 exposed and 0 unexposed library operations named floor 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op floor
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named floor
      with argument type(s) 
                         Polynomial Fraction Integer
      
-- An equivalent summation to the above is:
limit(limit(sum(sum(factorial(n)/(factorial(k)**2*factorial(n - 2*k))* _
                       (x/y)**k*(x*y)**(n - k), _
                    n = 2*k..nn), _
                k = 0..mm), _
            mm = %plusInfinity), _
      nn = %plusInfinity)
 
   There are 3 exposed and 0 unexposed library operations named limit 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op limit
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named limit
      with argument type(s) 
                                   failed
                Equation OrderedCompletion Polynomial Integer
      
-- => pi/2   [Knopp, p. 269]
limit(sum(product(k/(2*k - 1), k = 1..m), m = 2..n), n = %plusInfinity)
 

   (26)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.37 (IN) + 0.33 (EV) + 0.05 (OT) = 0.75 sec
-- ---------- Quit ----------
)quit
 

real   210.8
user   33.1
sys    1.6
\end{verbatim}
\section{Products}
\begin{verbatim}
 
-- ---------- Products ----------
-- => [640 pi^3]/[2187 sqrt(3)]   [Gradshteyn and Ryzhik 8.338(5)]
product(Gamma(k/3), k = 1..8)
 

         _ 1  _ 2  _ 4  _ 5  _ 7  _ 8
   (1)  | (-)| (-)| (-)| (-)| (-)| (-)
           3    3    3    3    3    3
                                                     Type: Expression Integer
               Time: 1.18 (IN) + 0.25 (EV) + 0.42 (OT) + 0.18 (GC) = 2.03 sec
-- => n! = gamma(n + 1)
product(k, k = 1..n)
 

          n
        ++-++
   (2)   | |   k
         | |
        k= 1
                                                     Type: Expression Integer
                                       Time: 0.45 (IN) + 0.07 (OT) = 0.52 sec
-- => x^[n (n + 1)/2]
product(x**k, k = 1..n)
 

          n
        ++-++   k
   (3)   | |   x
         | |
        k= 1
                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 0.02 (EV) + 0.03 (OT) = 0.12 sec
-- => n
product((1 + 1/k), k = 1..n - 1)
 

        n - 1
        ++-++  k + 1
   (4)   | |   -----
         | |     k
        k= 1
                                                     Type: Expression Integer
                           Time: 0.27 (IN) + 0.03 (EV) + 0.03 (OT) = 0.33 sec
-- => 1/2^(2 n) binomial(2 n, n)   [Knopp, p. 385]
product((2*k - 1)/(2*k), k = 1..n)
 

          n
        ++-++  2k - 1
   (5)   | |   ------
         | |     2k
        k= 1
                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 0.02 (EV) + 0.02 (OT) = 0.10 sec
-- => [x^(2 n) - 1]/(x^2 - 1)   [Gradshteyn and Ryzhik 1.396(1)]
product(x**2 - 2*x*cos(k*%pi/n) + 1, k = 1..n - 1)
 

        n - 1
        ++-++           k %pi     2
   (6)   | |   - 2x cos(-----) + x  + 1
         | |              n
        k= 1
                                                     Type: Expression Integer
               Time: 0.56 (IN) + 0.07 (EV) + 0.18 (OT) + 0.03 (GC) = 0.85 sec
-- => 2/3   [Knopp, p. 228]
limit(product((k**3 - 1)/(k**3 + 1), k = 2..n), n = %plusInfinity)
 

   (7)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.45 (IN) + 0.27 (EV) + 0.09 (OT) + 0.03 (GC) = 0.83 sec
-- => 2/pi   [Gradshteyn and Ryzhik 0.262(2)]
limit(product(1 - 1/(2*k)**2, k = 1..n), n = %plusInfinity)
 

   (8)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.10 (IN) + 0.08 (EV) + 0.03 (OT) = 0.22 sec
-- => sqrt(2)   [Gradshteyn and Ryzhik 0.261]
limit(product(1 + (-1)**(k + 1)/(2*k - 1), k = 1..n), n = %plusInfinity)
 

   (9)  "failed"
                                                    Type: Union("failed",...)
                                       Time: 0.08 (IN) + 0.17 (EV) = 0.25 sec
-- => -1   [Knopp, p. 436]
limit(product((k*(k +  1) + 1 + %i)/(k*(k + 1) + 1 - %i), k = 0..n), _
      n = %plusInfinity)
 

   (10)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.98 (IN) + 0.50 (EV) + 0.20 (OT) + 0.03 (GC) = 1.72 sec
-- ---------- Quit ----------
)quit
 

real   23.4
user   7.8
sys    0.5
\end{verbatim}
\section{Limits}
\begin{verbatim}
 
-- ---------- Limits ----------
-- Start with a famous example => e
limit((1 + 1/n)**n, n = %plusInfinity)
 

   (1)  %e
                        Type: Union(OrderedCompletion Expression Integer,...)
               Time: 1.07 (IN) + 0.58 (EV) + 0.28 (OT) + 0.25 (GC) = 2.18 sec
-- => 1/2
limit((1 - cos(x))/x**2, x = 0)
 

        1
   (2)  -
        2
                        Type: Union(OrderedCompletion Expression Integer,...)
                           Time: 0.38 (IN) + 0.12 (EV) + 0.03 (OT) = 0.53 sec
-- See Dominik Gruntz, _On Computing Limits in a Symbolic Manipulation System_,
-- Ph.D. dissertation, Swiss Federal Institute of Technology, Zurich,
-- Switzerland, 1996. => 5
limit((3**x + 5**x)**(1/x), x = %plusInfinity)
 

   (3)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.21 (IN) + 0.45 (EV) + 0.02 (OT) + 0.02 (GC) = 0.70 sec
-- => 1
limit(log(x)/(log(x) + sin(x)), x = %plusInfinity)
 

   (4)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.05 (IN) + 1.62 (EV) + 0.03 (OT) + 0.02 (GC) = 1.72 sec
-- => - e^2   [Gruntz]
limit((exp(x*exp(-x)/(exp(-x) + exp(-2*x**2/(x + 1)))) - exp(x))/x, _
      x = %plusInfinity)
 

   (5)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.17 (IN) + 4.52 (EV) + 0.03 (OT) + 0.52 (GC) = 5.23 sec
-- => 1/3   [Gruntz]
limit(x*log(x)*log(x*exp(x) - x**2)**2/log(log(x**2 + _
                                               2*exp(exp(3*x**3*log(x))))), _
      x = %plusInfinity)
 

   (6)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.17 (IN) + 2.21 (EV) + 0.03 (OT) = 2.42 sec
-- => 1/e   [Knopp, p. 73]
limit(1/n * factorial(n)**(1/n), n = %plusInfinity)
 

   (7)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.08 (IN) + 1.45 (EV) + 0.07 (OT) = 1.60 sec
-- Rewrite the above problem slightly => 1/e
limit(1/n * Gamma(n + 1)**(1/n), n = %plusInfinity)
 

   (8)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.12 (IN) + 1.50 (EV) + 0.05 (OT) + 0.02 (GC) = 1.68 sec
-- => 1   [Gradshteyn and Ryzhik 8.328(2)]
limit(Gamma(z + a)/Gamma(z)*exp(-a*log(z)), z = %plusInfinity)
 

   (9)  "failed"
                                                    Type: Union("failed",...)
                           Time: 0.32 (IN) + 2.22 (EV) + 0.08 (OT) = 2.62 sec
-- => e^z   [Gradshteyn and Ryzhik 9.121(8)]
--limit(hypergeometric([1, k], [1], z/k), k = %plusInfinity)
-- => Euler's_constant   [Gradshteyn and Ryzhik 9.536]
--limit(zeta(x) - 1/(x - 1), x = 1)
-- => gamma(x)   [Knopp, p. 385]
limit(n**x/(x * product((1 + x/k), k = 1..n)), n = %plusInfinity)
 

   (10)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.40 (IN) + 3.75 (EV) + 0.13 (OT) + 0.47 (GC) = 4.75 sec
-- See Angus E. Taylor and W. Robert Mann, _Advanced Calculus_, Second Edition,
-- Xerox College Publishing, 1972, p. 125 => 1
limit(x * integrate(exp(-t**2), t = 0..x)/(1 - exp(-x**2)), x = 0)
 

   (11)  "failed"
                                                    Type: Union("failed",...)
               Time: 0.65 (IN) + 2.63 (EV) + 0.08 (OT) + 0.05 (GC) = 3.42 sec
-- => [-1, 1]
[limit(x/abs(x), x = 0, "left"), limit(x/abs(x), x = 0, "right")]
 

   (12)  [- 1,1]
              Type: List Union(OrderedCompletion Expression Integer,"failed")
                           Time: 0.23 (IN) + 0.30 (EV) + 0.05 (OT) = 0.58 sec
-- => pi/2   [Richard Q. Chen]
limit(atan(-log(x)), x = 0, "right")
 

         %pi
   (13)  ---
          2
                        Type: Union(OrderedCompletion Expression Integer,...)
                                       Time: 0.03 (IN) + 0.72 (EV) = 0.75 sec
-- ---------- Quit ----------
)quit
 

real   85.9
user   28.1
sys    0.7
\end{verbatim}
\section{Calculus}
\begin{verbatim}

 
-- ---------- Calculus ----------
-- Calculus on a non-smooth (but well defined) function => x/|x| or sign(x)
D(abs(x), x)
 

        abs(x)
   (1)  ------
           x
                                                     Type: Expression Integer
               Time: 0.20 (IN) + 0.30 (EV) + 0.22 (OT) + 0.20 (GC) = 0.92 sec
-- Calculus on a piecewise defined function
a(x) == if x < 0 then -x else x
 
                                                                   Type: Void
                                                                  Time: 0 sec
-- => if x < 0 then -1 else 1
D(a(x), x)
 
   Compiling function a with type Variable x -> Polynomial Integer 

   (3)  1
                                                     Type: Polynomial Integer
                                       Time: 0.28 (IN) + 0.03 (OT) = 0.32 sec
)clear properties a
 
   Compiled code for a has been cleared.
-- Derivative of a piecewise defined function at a point [Herbert Fischer]. 
-- f(x) = x^2 - 1 for x = 1 otherwise x^3.  f(1) = 0 and f'(1) = 3
f(x) == if x = 1 then x**2 - 1 else x**3
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
f(1)
 
   Compiling function f with type PositiveInteger -> Integer 

   (5)  0
                                                     Type: NonNegativeInteger
                                       Time: 0.10 (IN) + 0.02 (EV) = 0.12 sec
D(f(x), x)
 
   Compiling function f with type Variable x -> Polynomial Integer 

          2
   (6)  3x
                                                     Type: Polynomial Integer
                                       Time: 0.18 (IN) + 0.08 (OT) = 0.27 sec
subst(%, x = 1)
 

   (7)  3
                                                     Type: Expression Integer
                           Time: 0.25 (IN) + 0.03 (EV) + 0.05 (OT) = 0.33 sec
)clear properties f
 
   Compiled code for f has been cleared.
-- d^n/dx^n(x^n) => n!
D(x**n, x, n)
 
   There are 3 exposed and 0 unexposed library operations named D 
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op D
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named D 
      with argument type(s) 
                             Expression Integer
                                 Variable x
                                 Variable n
      
-- Apply the chain rule---this is important for PDEs and many other
-- applications => y_xx (x_t)^2 + y_x x_tt
x:= operator('x);
 

                                                          Type: BasicOperator
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
y:= operator('y);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
D(y(x(t)), t, 2)
 

          ,   2 ,,          ,       ,,
   (10)  x (t) y  (x(t)) + y (x(t))x  (t)

                                                     Type: Expression Integer
                           Time: 0.42 (IN) + 0.05 (EV) + 0.12 (OT) = 0.58 sec
)clear properties x y
 
-- => f(h(x)) dh/dx - f(g(x)) dg/dx
f:= operator('f);
 

                                                          Type: BasicOperator
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
h:= operator('h);
 

                                                          Type: BasicOperator
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
'integrate(f(y), y = g(x)..h(x))
 

   (14)  integrate(f(y),y= g(x),h(x)    )
                                                             Type: OutputForm
                                                                  Time: 0 sec
D(%, x)
 
   There are 5 exposed and 0 unexposed library operations named D 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op D
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named D 
      with argument type(s) 
                                 OutputForm
                                 Variable x
      
)clear properties f g h
 
-- Exact differential => d(V(P, T)) => dV/dP DP + dV/dT DT
V:= operator('V);
 

                                                          Type: BasicOperator
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
D(V(P, T))
 
   There are 2 exposed and 0 unexposed library operations named D 
      having 1 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op D
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named D 
      with argument type(s) 
                             Expression Integer
      
)clear properties V
 
-- Implicit differentiation => dy/dx = [1 - y sin(x y)] / [1 + x sin(x y)]
y = cos(x*y) + x
 

   (16)  y= cos(x y) + x
                                            Type: Equation Expression Integer
               Time: 0.22 (IN) + 0.12 (EV) + 0.05 (OT) + 0.02 (GC) = 0.40 sec
-- => 2 (x + y) g'(x^2 + y^2)
f:= operator('f);
 

                                                          Type: BasicOperator
                                                   Time: 0.02 (OT) = 0.02 sec
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.02 (OT) = 0.02 sec
D(f(x, y), x) + D(f(x, y), y)
 

   (19)  f  (x,y) + f  (x,y)
          ,2         ,1
                                                     Type: Expression Integer
                           Time: 0.05 (IN) + 0.03 (EV) + 0.02 (OT) = 0.10 sec
subst(%, f(x, y) = g(x**2 + y**2))
 

   (20)  f  (x,y) + f  (x,y)
          ,2         ,1
                                                     Type: Expression Integer
                                       Time: 0.10 (IN) + 0.02 (OT) = 0.12 sec
)clear properties f g
 
-- Residue => - 9/4
--residue((z**3 + 5)/((z**4 - 1)*(z + 1)), z, -1)
-- Differential forms
DeRham:= DERHAM(Integer, [x, y, z])
 

   (21)  DeRhamComplex(Integer,[x,y,z])
                                                                 Type: Domain
                                                   Time: 0.02 (IN) = 0.02 sec
[dx, dy, dz]:= [generator(i)$DeRham for i in 1..3]
 

   (22)  [dx,dy,dz]
                                    Type: List DeRhamComplex(Integer,[x,y,z])
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
-- (2 dx + dz) /\ (3 dx + dy + dz) /\ (dx + dy + 4 dz) => 8 dx /\ dy /\ dz
(2*dx + dz) * (3*dx + dy + dz) * (dx + dy + 4*dz)
 

   (23)  8dx dy dz
                                         Type: DeRhamComplex(Integer,[x,y,z])
                                       Time: 0.03 (IN) + 0.02 (EV) = 0.05 sec
-- d(3 x^5 dy /\ dz + 5 x y^2 dz /\ dx + 8 z dx /\ dy)
-- => (15 x^4 + 10 x y + 8) dx /\ dy /\ dz
totalDifferential( _
   3*x**5 * dy * dz + 5*x*y**2 * dz * dx + 8*z * dx * dy :: DeRham)
 
   Internal Error
   The function * with signature hashcode is missing from domain 
      Polynomial(DeRhamComplex (Integer) (x y z)) 

initial (24) -> 
real   12.1
user   5.6
sys    0.4

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

Sat Jul 11 23:35:58 MET DST 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Calculus ----------
-- => 1 - 3/8 2^(1/3) = 0.5275296
--minimize(x**4 - x + 1)
-- => [0, 1]
--[minimize(1/(x**2 + y**2 + 1)), maximize(1/(x**2 + y**2 + 1))]
-- Minimize on [-1, 1] x [-1, 1]:
-- => min(a - b - c + d, a - b + c - d, a + b - c - d, a + b + c + d)
--minimize(a + b*x + c*y + d*x*y, [x = -1..1, y = -1..1])
-- => [-1, 1]
--[minimize(x**2*y**3, [x = -1..1, y = -1..1]), _
-- maximize(x**2*y**3, [x = -1..1, y = -1..1])]
-- Linear programming: minimize the objective function z subject to the
-- variables xi being non-negative along with an additional set of constraints.
-- See William R. Smythe, Jr. and Lynwood A. Johnson, _Introduction to Linear
-- Programming, with Applications_, Prentice Hall, Inc., 1966, p. 117:
-- minimize z = 4 x1 - x2 + 2 x3 - 2 x4 => {x1, x2, x3, x4}  = {2, 0, 2, 4}
-- with zmin = 4
--simplex(-(4*x1 - x2 + 2*x3 - 2*x4), [2*x1 + x2 + x3 + x4 <= 10, _
--        x1 - 2*x2 - x3 + x4 >= 4, x1 + x2 + 3*x3 - x4 >= 4])
-- ---------- Quit ----------
)quit
 

real   0.9
user   0.7
sys    0.1
\end{verbatim}
\section{Indefinite Integrals}
\begin{verbatim}
 
-- ---------- Indefinite Integrals ----------
-- This integral only makes sense for x real => x |x|/2
integrate(abs(x), x)
 

           x
         ++
   (1)   |   abs(%I)d%I
        ++
                                          Type: Union(Expression Integer,...)
               Time: 0.33 (IN) + 0.62 (EV) + 0.13 (OT) + 0.22 (GC) = 1.30 sec
-- Calculus on a piecewise defined function
a(x) == if x < 0 then -x else x
 
                                                                   Type: Void
                                                                  Time: 0 sec
-- => if x < 0 then -x^2/2 else x^2/2
integrate(a(x), x)
 
   Compiling function a with type Variable x -> Polynomial Integer 

        1  2
   (3)  - x
        2
                                            Type: Polynomial Fraction Integer
                           Time: 0.30 (IN) + 0.02 (EV) + 0.02 (OT) = 0.33 sec
)clear properties a
 
   Compiled code for a has been cleared.
-- This would be very difficult to do by hand
-- => 2^(1/3)/6 [1/2 log([x + 2^(1/3)]^2/[x^2 - 2^(1/3) x + 2^(2/3)])
--               + sqrt(3) arctan({[sqrt(3) x]/[2^(4/3) - x]   or
--                                 [2 x - 2^(1/3)]/[2^(1/3) sqrt(3)]})
--    [Gradshteyn and Ryzhik 2.126(1)]
1/(x**3 + 2)
 

           1
   (4)  ------
         3
        x  + 2
                                            Type: Fraction Polynomial Integer
                                       Time: 0.08 (IN) + 0.03 (OT) = 0.12 sec
integrate(%, x)
 

   (5)
          +-+     2 3+-+2    3+-+          +-+     3+-+
       - \|3 log(x  \|4  - 2x\|4  + 4) + 2\|3 log(x\|4  + 2)
     + 
               +-+3+-+    +-+
             x\|3 \|4  - \|3
       6atan(----------------)
                     3
  /
       +-+3+-+
     6\|3 \|4
                                          Type: Union(Expression Integer,...)
               Time: 0.10 (IN) + 0.75 (EV) + 0.07 (OT) + 0.07 (GC) = 0.98 sec
D(%, x)
 

           1
   (6)  ------
         3
        x  + 2
                                                     Type: Expression Integer
                                                   Time: 0.12 (EV) = 0.12 sec
-- This integral is easy if one realizes that 4^x = (2^x)^2
-- => arcsinh(2^x)/log(2)   [Robert Israel in sci.math.symbolic]
integrate(2**x/sqrt(1 + 4**x), x)
 
 
   >> Error detected within library code:
   integrate: implementation incomplete (constant residues)

initial (7) -> 
real   15.2
user   3.8
sys    0.3

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

Mon Feb  9 04:37:53 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Indefinite Integrals ----------
-- => (-9 x^2 + 16 x - 41/5)/(2 x - 1)^(5/2)
--    [Gradshteyn and Ryzhik 2.244(8)]
integrate((3*x - 5)**2/(2*x - 1)**(7/2), x)
 

                 2
            - 45x  + 80x - 41
   (1)  -------------------------
            2            +------+
        (20x  - 20x + 5)\|2x - 1
                                          Type: Union(Expression Integer,...)
               Time: 0.49 (IN) + 0.67 (EV) + 0.20 (OT) + 0.20 (GC) = 1.55 sec
-- => 1/[2 m sqrt(10)] log([-5 + e^(m x) sqrt(10)]/[-5 - e^(m x) sqrt(10)])
--    [Gradshteyn and Ryzhik 2.314]
integrate(1/(2*exp(m*x) - 5*exp(-m*x)), x)
 

              +--+   m x 2       m x     +--+
            2\|10 (%e   )  - 20%e    + 5\|10
        log(---------------------------------)
                          m x 2
                      2(%e   )  - 5
   (2)  --------------------------------------
                           +--+
                        2m\|10
                                          Type: Union(Expression Integer,...)
               Time: 0.15 (IN) + 0.75 (EV) + 0.08 (OT) + 0.03 (GC) = 1.02 sec
-- => -3/2 x + 1/4 sinh(2 x) + tanh x   [Gradshteyn and Ryzhik 2.423(24)]
integrate(sinh(x)**4/cosh(x)**2, x)
 

               3            2
        sinh(x)  + (3cosh(x)  + 9)sinh(x) + (- 12x - 8)cosh(x)
   (3)  ------------------------------------------------------
                               8cosh(x)
                                          Type: Union(Expression Integer,...)
                           Time: 0.13 (IN) + 0.17 (EV) + 0.02 (OT) = 0.32 sec
simplify(%)
 

                2
        (cosh(x)  + 2)sinh(x) + (- 3x - 2)cosh(x)
   (4)  -----------------------------------------
                         2cosh(x)
                                                     Type: Expression Integer
                           Time: 0.03 (IN) + 0.05 (EV) + 0.02 (OT) = 0.10 sec
-- This example involves several symbolic parameters
-- => 1/sqrt(b^2 - a^2) log([sqrt(b^2 - a^2) tan(x/2) + a + b]/
--                          [sqrt(b^2 - a^2) tan(x/2) - a - b])   (a^2 < b^2)
--    [Gradshteyn and Ryzhik 2.553(3)]
integrate(1/(a + b*cos(x)), x)
 

   (5)
                         +-------+
                         | 2    2        2    2
        (- a cos(x) - b)\|b  - a   + (- b  + a )sin(x)
    log(----------------------------------------------)
                         b cos(x) + a
   [---------------------------------------------------,
                          +-------+
                          | 2    2
                         \|b  - a
                   +---------+
                   |   2    2
            sin(x)\|- b  + a
    2atan(---------------------)
          (b + a)cos(x) + b + a
    ----------------------------]
             +---------+
             |   2    2
            \|- b  + a
                                     Type: Union(List Expression Integer,...)
                           Time: 0.12 (IN) + 0.67 (EV) + 0.05 (OT) = 0.83 sec
map(simplify, map(f +-> D(f, x), %))
 

               1            1
   (6)  [------------,------------]
         b cos(x) + a b cos(x) + a
                                                Type: List Expression Integer
                                       Time: 0.32 (EV) + 0.02 (OT) = 0.33 sec
-- The integral of 1/(a + 3 cos x + 4 sin x) can have 4 different forms
-- depending on the value of a !   [Gradshteyn and Ryzhik 2.558(4)]
-- => (a = 3) 1/4 log[3 + 4 tan(x/2)]
integrate(1/(3 + 3*cos(x) + 4*sin(x)), x)
 

            4sin(x) + 3cos(x) + 3
        log(---------------------)
                  cos(x) + 1
   (7)  --------------------------
                     4
                                          Type: Union(Expression Integer,...)
                           Time: 0.05 (IN) + 0.20 (EV) + 0.02 (OT) = 0.27 sec
-- => (a = 4) 1/3 log([tan(x/2) + 1]/[tan(x/2) + 7])
integrate(1/(4 + 3*cos(x) + 4*sin(x)), x)
 

              sin(x) + 7cos(x) + 7        sin(x) + cos(x) + 1
        - log(--------------------) + log(-------------------)
                   cos(x) + 1                  cos(x) + 1
   (8)  ------------------------------------------------------
                                   3
                                          Type: Union(Expression Integer,...)
                                       Time: 0.27 (EV) + 0.02 (OT) = 0.28 sec
-- => (a = 5) -1/[2 + tan(x/2)]
integrate(1/(5 + 3*cos(x) + 4*sin(x)), x)
 

            - cos(x) - 1
   (9)  --------------------
        sin(x) + 2cos(x) + 2
                                          Type: Union(Expression Integer,...)
                           Time: 0.03 (IN) + 0.08 (EV) + 0.02 (OT) = 0.13 sec
-- => (a = 6) 2/sqrt(11) arctan([3 tan(x/2) + 4]/sqrt(11))
integrate(1/(6 + 3*cos(x) + 4*sin(x)), x)
 

                 +--+           +--+           +--+
               3\|11 sin(x) + 4\|11 cos(x) + 4\|11
         2atan(------------------------------------)
                           11cos(x) + 11
   (10)  -------------------------------------------
                             +--+
                            \|11
                                          Type: Union(Expression Integer,...)
                                       Time: 0.22 (EV) + 0.05 (OT) = 0.27 sec
-- => x log|x^2 - a^2| - 2 x + a log|(x + a)/(x - a)|
--    [Gradshteyn and Ryzhik 2.736(1)]
integrate(log(abs(x**2 - a**2)), x)
 

                    2    2
   (11)  x log(abs(x  - a )) + a log(x + a) - a log(x - a) - 2x
                                          Type: Union(Expression Integer,...)
                           Time: 0.05 (IN) + 0.20 (EV) + 0.02 (OT) = 0.27 sec
-- => (a x)/2 + (pi x^2)/4 - 1/2 (x^2 + a^2) arctan(x/a)
--       [Gradshteyn and Ryzhik 2.822(4)]   or
--    (a x)/2 + 1/2 (x^2 + a^2) arccot(x/a)   [Gradshteyn and Ryzhik 2.853(2)]
integrate(x*acot(x/a), x)
 

           2    2        2a x
         (x  + a )atan(-------) + 2a x
                        2    2
                       x  - a
   (12)  -----------------------------
                       4
                                          Type: Union(Expression Integer,...)
               Time: 0.07 (IN) + 0.80 (EV) + 0.02 (OT) + 0.03 (GC) = 0.92 sec
-- => [sin(5 x) Ci(2 x)]/5 - [Si(7 x) + Si(3 x)]/10
--    [Gradshteyn and Ryzhik 5.31(1)]
integrate(cos(5*x)*real(Ei(%i*2*x)), x)
 
 
   >> Error detected within library code:
   ker2trigs: cannot convert kernel to gaussian function

initial (13) -> 
real   30.1
user   7.6
sys    0.3

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

Mon Feb  9 04:40:40 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Indefinite Integrals ----------
-- => 1/2 [f(x) - g(x)]/[f(x) + g(x)]   [Gradshteyn and Ryzhik 2.02(25)]
f:= operator('f);
 

                                                          Type: BasicOperator
                           Time: 0.03 (IN) + 0.08 (OT) + 0.03 (GC) = 0.15 sec
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.02 (OT) = 0.02 sec
integrate((D(f(x), x)*g(x) - f(x)*D(g(x), x))/(f(x)**2 - g(x)**2), x)
 

                   ,             ,
           x f(%I)g (%I) - g(%I)f (%I)
         ++
   (3)   |   ------------------------- d%I
        ++             2        2
                  g(%I)  - f(%I)
                                          Type: Union(Expression Integer,...)
               Time: 0.72 (IN) + 0.82 (EV) + 0.20 (OT) + 0.07 (GC) = 1.80 sec
)clear properties f g
 
-- ---------- Quit ----------
)quit
 

real   9.1
user   2.5
sys    0.2
\end{verbatim}
\section{Definite Integrals}
\begin{verbatim}
 
-- ---------- Definite Integrals ----------
-- The following two functions have a pole at a.  The first integral has a
-- principal value of zero; the second is divergent
integrate(1/(x - a), x = (a - 1)..(a + 1))
 
 
   >> Error detected within library code:
   integrate: pole in path of integration

initial (1) -> 
real   5.3
user   2.5
sys    0.3

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

Fri Jun 20 00:05:11 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Definite Integrals ----------
integrate(1/(x - a)**2, x = (a - 1)..(a + 1))
 

   (1)  potentialPole
                                         Type: Union(pole: potentialPole,...)
               Time: 0.63 (IN) + 0.73 (EV) + 0.17 (OT) + 0.22 (GC) = 1.75 sec
-- Different branches of the square root need to be chosen in the intervals
-- [0, 1] and [1, 2].  The correct results are 4/3, [4 - sqrt(8)]/3,
-- [8 - sqrt(8)]/3, respectively
integrate(sqrt(x + 1/x - 2), x = 0..1)
 

   (2)  potentialPole
                                         Type: Union(pole: potentialPole,...)
               Time: 0.13 (IN) + 0.13 (EV) + 0.02 (OT) + 0.02 (GC) = 0.30 sec
integrate(sqrt(x + 1/x - 2), x = 0..1, "noPole")
 

          4
   (3)  - -
          3
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.25 (IN) + 0.83 (EV) + 0.02 (OT) + 0.08 (GC) = 1.19 sec
integrate(sqrt(x + 1/x - 2), x = 1..2)
 

   (4)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                           Time: 0.12 (IN) + 0.02 (EV) + 0.02 (OT) = 0.15 sec
integrate(sqrt(x + 1/x - 2), x = 1..2, "noPole")
 

            +-+
        - 2\|2  + 4
   (5)  -----------
             3
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
                           Time: 0.07 (IN) + 0.20 (EV) + 0.03 (OT) = 0.30 sec
integrate(sqrt(x + 1/x - 2), x = 0..2)
 

   (6)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
integrate(sqrt(x + 1/x - 2), x = 0..2, "noPole")
 

            +-+
          2\|2
   (7)  - -----
            3
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
                           Time: 0.05 (IN) + 0.18 (EV) + 0.02 (OT) = 0.25 sec
-- => sqrt(2)   [a modification of a problem due to W. Kahan]
integrate(sqrt(2 - 2*cos(2*x))/2, x = -3*%pi/4..-%pi/4)
 

   (8)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                                       Time: 0.50 (IN) + 0.07 (OT) = 0.57 sec
integrate(sqrt(2 - 2*cos(2*x))/2, x = -3*%pi/4..-%pi/4, "noPole")
 

   (9)  0
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.07 (IN) + 2.90 (EV) + 0.02 (OT) + 0.10 (GC) = 3.08 sec
-- Contour integrals => pi/a e^(-a) for a > 0.  See Norman Levinson and
-- Raymond M. Redheffer, _Complex Variables_, Holden-Day, Inc., 1970, p. 198.
integrate(cos(x)/(x**2 + a**2), x = %minusInfinity..%plusInfinity)
 

   (10)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                           Time: 0.23 (IN) + 0.03 (EV) + 0.10 (OT) = 0.37 sec
integrate(cos(x)/(x**2 + a**2), x = %minusInfinity..%plusInfinity, "noPole")
 

   (11)  "failed"
                                                Type: Union(fail: failed,...)
                           Time: 0.07 (IN) + 1.07 (EV) + 0.60 (GC) = 1.73 sec
-- Integrand with a branch point => pi/sin(pi a) for 0 < a < 1
-- [Levinson and Redheffer, p. 212]
integrate(t**(a - 1)/(1 + t), t = 0..%plusInfinity)
 

   (12)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                           Time: 0.08 (IN) + 0.25 (EV) + 0.02 (GC) = 0.35 sec
integrate(t**(a - 1)/(1 + t), t = 0..%plusInfinity, "noPole")
 

   (13)  "failed"
                                                Type: Union(fail: failed,...)
                           Time: 0.07 (IN) + 0.62 (EV) + 0.03 (GC) = 0.72 sec
-- Integrand with a residue at infinity => -2 pi [sin(pi/5) + sin(2 pi/5)]
-- (principal value)   [Levinson and Redheffer, p. 234]
integrate(5*x**3/(1 + x + x**2 + x**3 + x**4), _
          x = %minusInfinity..%plusInfinity)
 

   (14)  "failed"
                                                Type: Union(fail: failed,...)
             Time: 0.08 (IN) + 46.28 (EV) + 0.05 (OT) + 3.97 (GC) = 50.38 sec
-- integrate(1/[1 + x + x^2 + ... + x^(2 n)], x = -infinity..infinity)
-- = 2 pi/(2 n + 1) [1 + cos(pi/[2 n + 1])] csc(2 pi/[2 n + 1])
-- [Levinson and Redheffer, p. 255] => 2 pi/5 [1 + cos(pi/5)] csc(2 pi/5)
integrate(1/(1 + x + x**2 + x**4), x = %minusInfinity..%plusInfinity)
 
/usr/local/bin/axiomb: 21068 Terminated

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

Mon Jun 16 06:14:26 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Definite Integrals ----------
-- Integrand with a residue at infinity and a branch cut => pi [sqrt(2) - 1]
-- [Levinson and Redheffer, p. 234]
integrate(sqrt(1 - x**2)/(1 + x**2), x = -1..1)
 

   (1)  potentialPole
                                         Type: Union(pole: potentialPole,...)
               Time: 0.55 (IN) + 0.37 (EV) + 0.20 (OT) + 0.18 (GC) = 1.30 sec
integrate(sqrt(1 - x**2)/(1 + x**2), x = -1..1, "noPole")
 

          +-+       2       +-+       1
   (2)  2\|2 atan(----) + 2\|2 atan(----) - %pi
                   +-+               +-+
                  \|2               \|2
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.20 (IN) + 2.62 (EV) + 0.05 (OT) + 0.18 (GC) = 3.05 sec
-- This is a common integral in many physics calculations
-- => q/p sqrt(pi/p) e^(q^2/p)   (Re p > 0)   [Gradshteyn and Ryzhik 3.462(6)]
integrate(x*exp(-p*x**2 + 2*q*x), x = %minusInfinity..%plusInfinity)
 

   (3)  "failed"
                                                Type: Union(fail: failed,...)
               Time: 0.32 (IN) + 0.41 (EV) + 0.05 (OT) + 0.03 (GC) = 0.82 sec
-- => 2 Euler's_constant   [Gradshteyn and Ryzhik 8.367(5-6)]
integrate(1/log(t) + 1/(1 - t) - log(log(1/t)), t = 0..1)
 

   (4)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                           Time: 0.37 (IN) + 0.02 (EV) + 0.07 (OT) = 0.45 sec
integrate(1/log(t) + 1/(1 - t) - log(log(1/t)), t = 0..1, "noPole")
 

   (5)  "failed"
                                                Type: Union(fail: failed,...)
                           Time: 0.12 (IN) + 0.75 (EV) + 0.07 (GC) = 0.93 sec
-- This integral comes from atomic collision theory => 0   [John Prentice]
integrate(sin(t)/t*exp(2*%i*t), t = %minusInfinity..%plusInfinity)
 
 
   >> Error detected within library code:
   integrate: pole in path of integration

initial (6) -> 
real   18.4
user   8.2
sys    0.6

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

Mon Jun 16 06:19:54 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Definite Integrals ----------
-- => 1/12   [Gradshteyn and Ryzhik 6.443(3)]
integrate(log(Gamma(x))*cos(6*%pi*x), x = 0..1)
 

   (1)  potentialPole
                                         Type: Union(pole: potentialPole,...)
               Time: 0.67 (IN) + 0.48 (EV) + 0.32 (OT) + 0.20 (GC) = 1.67 sec
integrate(log(Gamma(x))*cos(6*%pi*x), x = 0..1, "noPole")
 

   (2)  "failed"
                                                Type: Union(fail: failed,...)
               Time: 0.22 (IN) + 1.67 (EV) + 0.02 (OT) + 0.12 (GC) = 2.02 sec
-- => 36/35   [Gradshteyn and Ryzhik 7.222(2)]
integrate((1 + x)**3*legendreP(1, x)*legendreP(2, x), x = -1..1)
 

        36
   (3)  --
        35
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.92 (IN) + 0.40 (EV) + 0.12 (OT) + 0.03 (GC) = 1.47 sec
-- => 1/sqrt(a^2 + b^2)   (a > 0 and b real)
--    [Gradshteyn and Ryzhik 6.611(1)]
integrate(exp(-a*x)*besselJ(0, b*x), x = 0..%plusInfinity)
 

   (4)  potentialPole
                                         Type: Union(pole: potentialPole,...)
                           Time: 0.37 (IN) + 0.23 (EV) + 0.07 (OT) = 0.67 sec
integrate(exp(-a*x)*besselJ(0, b*x), x = 0..%plusInfinity, "noPole")
 

   (5)  "failed"
                                                Type: Union(fail: failed,...)
                           Time: 0.05 (IN) + 0.37 (EV) + 0.03 (OT) = 0.45 sec
-- Integrand contains a special function => 4/(3 pi)   [Tom Hagstrom]
integrate((besselJ(1, x)/x)**2, x = 0..%plusInfinity)
 

   (6)  potentialPole
                                         Type: Union(pole: potentialPole,...)
               Time: 0.12 (IN) + 0.22 (EV) + 0.05 (OT) + 0.02 (GC) = 0.40 sec
integrate((besselJ(1, x)/x)**2, x = 0..%plusInfinity, "noPole")
 

   (7)  "failed"
                                                Type: Union(fail: failed,...)
                           Time: 0.03 (IN) + 0.25 (EV) + 0.02 (OT) = 0.30 sec
-- => (cos 7 - 1)/7   [Gradshteyn and Ryzhik 6.782(3)]
integrate(real(Ei(%i*x))*besselJ(0, 2*sqrt(7*x)), x = 0..%plusInfinity)
 
 
   >> Error detected within library code:
   ker2trigs: cannot convert kernel to gaussian function

initial (8) -> 
real   16.2
user   8.1
sys    0.5

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

Mon Jun 16 06:38:04 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Definite Integrals ----------
-- This integral comes from doing a two loop Feynman diagram for a QCD problem
-- => - [17/3 + pi^2]/36 + log 2/9 [35/3 - pi^2/2 - 4 log 2 + log(2)^2]
--    + zeta(3)/4 = 0.210883...   [Rolf Mertig]
--integrate(x**2*polylog(3, 1/(x + 1)), x = 0..1)
--integrate(x**2*polylog(3, 1/(x + 1)), x = 0..1) :: Complex Float
-- - (17/3 + %pi**2)/36 + log(2)/9*(35/3 - %pi**2/2 - 4*log(2) + log(2)**2)
--    + zeta(3)/4 :: Complex Float
-- Integrate a piecewise defined step function s(t) multiplied by cos t, where
-- s(t) = 0   (t < 1);   1   (1 <= t <= 2);   0   (t > 2)
-- => 0   (u < 1);   sin u - sin 1   (1 <= u <= 2);   sin 2 - sin 1   (u > 2)
s(t) == if 1 <= t and t <= 2 then 1 else 0;
 
                                                                   Type: Void
                                                                  Time: 0 sec
integrate(s(t)*cos(t), t = 0..u)
 
   Compiling function s with type Variable t -> NonNegativeInteger 

   (2)  0
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.88 (IN) + 0.58 (EV) + 0.37 (OT) + 0.33 (GC) = 2.17 sec
)clear properties s
 
   Compiled code for s has been cleared.
-- Integrating first with respect to y and then x is much easier than
-- integrating first with respect to x and then y
-- => (|b| - |a|) pi   [W. Kahan]
integrate(integrate(x/(x**2 + y**2), y = %minusInfinity..%plusInfinity), _
          x = a..b)
 
   There are 11 exposed and 7 unexposed library operations named 
      integrate having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                            SegmentBinding Symbol
      
integrate(integrate(x/(x**2 + y**2), y = %minusInfinity..%plusInfinity, _
          "noPole"), x = a..b, "noPole")
 

   (3)  "failed"
                                                Type: Union(fail: failed,...)
               Time: 0.72 (IN) + 1.10 (EV) + 0.12 (OT) + 0.12 (GC) = 2.05 sec
integrate(integrate(x/(x**2 + y**2), x = a..b), _
          y = %minusInfinity..%plusInfinity)
 
   There are 11 exposed and 7 unexposed library operations named 
      integrate having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                  SegmentBinding OrderedCompletion Integer
      
integrate(integrate(x/(x**2 + y**2), x = a..b, "noPole"), _
          y = %minusInfinity..%plusInfinity, "noPole")
 

           2        1     2        1
   (4)  - a %pi abs(-) + b %pi abs(-)
                    a              b
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.10 (IN) + 2.18 (EV) + 0.05 (OT) + 0.05 (GC) = 2.38 sec
-- => [log(sqrt(2) + 1) + sqrt(2)]/3   [Caviness et all, section 2.10.1]
integrate(integrate(sqrt(x**2 + y**2), x = 0..1), y = 0..1)
 
   There are 11 exposed and 7 unexposed library operations named 
      integrate having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                      SegmentBinding NonNegativeInteger
      
integrate(integrate(sqrt(x**2 + y**2), x = 0..1, "noPole"), y = 0..1, "noPole")
 

   (5)
        +-+             +-+             +-+              +-+            +-+
   (- 4\|2  + 6)log(- 2\|2  + 3) + (- 2\|2  + 3)log(- 12\|2  + 17) - 24\|2  + 32
   -----------------------------------------------------------------------------
                                       +-+
                                    48\|2  - 72
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 0.10 (IN) + 6.17 (EV) + 0.03 (OT) + 0.03 (GC) = 6.33 sec
-- => (pi a)/2   [Gradshteyn and Ryzhik 4.621(1)]
integrate(integrate(sin(a)*sin(y)/sqrt(1 - sin(a)**2*sin(x)**2*sin(y)**2), _
                    x = 0..%pi/2), _
          y = 0..%pi/2)
 
   There are 11 exposed and 7 unexposed library operations named 
      integrate having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                              SegmentBinding Pi
      
integrate(integrate(sin(a)*sin(y)/sqrt(1 - sin(a)**2*sin(x)**2*sin(y)**2), _
                    x = 0..%pi/2, "noPole"), _
          y = 0..%pi/2, "noPole")
 
   There are 4 exposed and 1 unexposed library operations named 
      integrate having 3 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                              SegmentBinding Pi
                                   String
      
-- => 46/15   [Paul Zimmermann]
integrate(integrate(abs(y - x**2), y = 0..2), x = -1..1)
 
   There are 11 exposed and 7 unexposed library operations named 
      integrate having 2 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                           SegmentBinding Integer
      
integrate(integrate(abs(y - x**2), y = 0..2, "noPole"), x = -1..1, "noPole")
 
   There are 4 exposed and 1 unexposed library operations named 
      integrate having 3 argument(s) but none was determined to be 
      applicable. Use HyperDoc Browse, or issue
                            )display op integrate
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      integrate with argument type(s) 
Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
                           SegmentBinding Integer
                                   String
      
-- Multiple integrals: volume of a tetrahedron => a b c / 6
integrate(integrate(integrate(1, z = 0..c*(1 - x/a - y/b)), _
                    y = 0..b*(1 - x/a)), _
          x = 0..a)
 

        a b c
   (6)  -----
          6
                    Type: Union(f1: OrderedCompletion Expression Integer,...)
               Time: 1.73 (IN) + 0.55 (EV) + 0.40 (OT) + 0.02 (GC) = 2.70 sec
-- ---------- Quit ----------
)quit
 

real   47.7
user   23.7
sys    0.7
\end{verbatim}
\section{Series}
\begin{verbatim}
 
-- ---------- Series ----------
-- Taylor series---this first example comes from special relativity
-- => 1 + 1/2 (v/c)^2 + 3/8 (v/c)^4 + 5/16 (v/c)^6 + O((v/c)^8)
1/sqrt(1 - (v/c)**2)
 

              1
   (1)  ------------
         +---------+
         |   2    2
         |- v  + c
         |---------
         |     2
        \|    c
                                                     Type: Expression Integer
               Time: 0.43 (IN) + 0.18 (EV) + 0.22 (OT) + 0.22 (GC) = 1.05 sec
series(%, v = 0)
 

             1   2    3   4     5   6      8
   (2)  1 + --- v  + --- v  + ---- v  + O(v )
              2        4         6
            2c       8c       16c
                        Type: UnivariatePuiseuxSeries(Expression Integer,v,0)
               Time: 0.38 (IN) + 0.27 (EV) + 0.12 (OT) + 0.05 (GC) = 0.82 sec
1/%**2
 

             1  2      8
   (3)  1 - -- v  + O(v )
             2
            c
                        Type: UnivariatePuiseuxSeries(Expression Integer,v,0)
                                       Time: 0.27 (IN) + 0.10 (OT) = 0.37 sec
-- Note: sin(x) = x - x^3/6 + x^5/120 - x^7/5040 + O(x^9)
--       cos(x) = 1 - x^2/2 + x^4/24 - x^6/720 + O(x^8)
--       tan(x) = x + x^3/3 + 2/15 x^5 + 17/315 x^7 + O(x^9)
tsin:= series(sin(x), x = 0)
 

            1  3    1   5     1   7      9
   (4)  x - - x  + --- x  - ---- x  + O(x )
            6      120      5040
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
               Time: 0.12 (IN) + 0.18 (EV) + 0.05 (OT) + 0.03 (GC) = 0.38 sec
tcos:= series(cos(x), x = 0)
 

            1  2    1  4    1   6      8
   (5)  1 - - x  + -- x  - --- x  + O(x )
            2      24      720
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
-- Note that additional terms will be computed as needed
tsin/tcos
 

            1  3    2  5    17  7      9
   (6)  x + - x  + -- x  + --- x  + O(x )
            3      15      315
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                                       Time: 0.08 (IN) + 0.03 (OT) = 0.12 sec
series(tan(x), x = 0)
 

            1  3    2  5    17  7      9
   (7)  x + - x  + -- x  + --- x  + O(x )
            3      15      315
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                           Time: 0.02 (IN) + 0.02 (EV) + 0.03 (OT) = 0.07 sec
)clear properties tsin tcos
 
-- => -x^2/6 - x^4/180 - x^6/2835 - O(x^8)
series(log(sin(x)/x), x = 0)
 

          1  2    1   4     1   6     1    8      10
   (8)  - - x  - --- x  - ---- x  - ----- x  + O(x  )
          6      180      2835      37800
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                           Time: 0.02 (IN) + 0.05 (EV) + 0.05 (OT) = 0.12 sec
series(sin(x)/x, x = 0, 7)
 

            1  2    1   4     1   6      8
   (9)  1 - - x  + --- x  - ---- x  + O(x )
            6      120      5040
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                           Time: 0.05 (IN) + 0.03 (EV) + 0.02 (OT) = 0.10 sec
log(%)
 

           1  2    1   4     1   6     1    8      10
   (10)  - - x  - --- x  - ---- x  - ----- x  + O(x  )
           6      180      2835      37800
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                                       Time: 0.02 (EV) + 0.02 (OT) = 0.03 sec
-- => [a f'(a d) + g(b d) + integrate(h(c y), y = 0..d)]
--    + [a^2 f''(a d) + b g'(b d) + h(c d)] (x - d)
f:= operator('f);
 

                                                          Type: BasicOperator
                                                   Time: 0.08 (IN) = 0.08 sec
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
h:= operator('h);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
D(f(a*x), x) + g(b*x) + 'integrate(h(c*y), y = 0..x)
 

           ,
   (14)  af (a x) + g(b x) + integrate(h(c y),y= 0,x    )

                                                             Type: OutputForm
                           Time: 0.57 (IN) + 0.05 (EV) + 0.20 (OT) = 0.82 sec
series(%, x = d, 1)
 
   There are 3 exposed and 0 unexposed library operations named series 
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op series
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      series with argument type(s) 
                                 OutputForm
                               Equation Symbol
                               PositiveInteger
      
)clear properties f g h
 
-- Taylor series of nonscalar objects (noncommutative multiplication)
-- => (B A - A B) t^2/2 + O(t^3)   [Stanly Steinberg]
A : SquareMatrix(2, Integer);
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
B : SquareMatrix(2, Integer);
 
                                                                   Type: Void
                                                                  Time: 0 sec
%e**((A + B)*t) - %e**(A*t) * %e**(B*t)
 
 
   A is declared as being in SquareMatrix(2,Integer) but has not been 
      given a value.
)clear properties A B
 
series(%e**((A + B)*t) - %e**(A*t) * %e**(B*t), t = 0, 4)
 

            15
   (17)  O(t  )
                        Type: UnivariatePuiseuxSeries(Expression Integer,t,0)
                           Time: 0.20 (IN) + 0.23 (EV) + 0.28 (OT) = 0.72 sec
-- Laurent series:
-- => sum( Bernoulli[k]/k! x^(k - 2), k = 1..infinity )
--    = 1/x^2 - 1/(2 x) + 1/12 - x^2/720 + x^4/30240 + O(x^6)
--    [Levinson and Redheffer, p. 173]
series(1/(x*(exp(x) - 1)), x = 0)
 

          - 2   1  - 1    1    1   2     1    4      6
   (18)  x    - - x    + -- - --- x  + ----- x  + O(x )
                2        12   720      30240
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                           Time: 0.07 (IN) + 0.05 (EV) + 0.05 (OT) = 0.17 sec
-- Puiseux series (terms with fractional degree):
-- => 1/sqrt(x - 3/2 pi) + (x - 3/2 pi)^(3/2) / 12 + O([x - 3/2 pi]^(7/2))
series(sqrt(sec(x)), x = 3/2*%pi, 2)
 

                     1                3               7
                   - -                -               -
              3%pi   2    1      3%pi 2          3%pi 2
   (19)  (x - ----)    + -- (x - ----)  + O((x - ----) )
                2        12        2               2
                 Type: UnivariatePuiseuxSeries(Expression Integer,x,(3*pi)/2)
               Time: 0.20 (IN) + 0.25 (EV) + 0.11 (OT) + 0.02 (GC) = 0.58 sec
-- Generalized Taylor series => sum( [x log x]^k/k!, k = 0..infinity )
series(x**x, x = 0)
 

   (20)
                         2            3            4            5
                   log(x)   2   log(x)   3   log(x)   4   log(x)   5
     1 + log(x)x + ------- x  + ------- x  + ------- x  + ------- x
                      2            6            24          120
   + 
           6            7
     log(x)   6   log(x)   7      8
     ------- x  + ------- x  + O(x )
       720          5040
                   Type: GeneralUnivariatePowerSeries(Expression Integer,x,0)
               Time: 0.03 (IN) + 0.07 (EV) + 0.07 (OT) + 0.02 (GC) = 0.18 sec
-- Compare the generalized Taylor series of two different formulations of a
-- function => log(z) + log(cosh(w)) + tanh(w) z + O(z^2)
)set streams calculate 1
 
s1:= series(log(sinh(z)) + log(cosh(z + w)), z = 0)
 

                w 2                    w 2
             (%e )  + 1             (%e )  - 1        2
   (21)  log(----------) + log(z) + ---------- z + O(z )
                   w                   w 2
                2%e                 (%e )  + 1
                   Type: GeneralUnivariatePowerSeries(Expression Integer,z,0)
                           Time: 0.08 (IN) + 0.53 (EV) + 0.07 (OT) = 0.68 sec
s2:= series(log(sinh(z) * cosh(z + w)), z = 0)
 

                w 2                    w 2
             (%e )  + 1             (%e )  - 1        2
   (22)  log(----------) + log(z) + ---------- z + O(z )
                   w                   w 2
                2%e                 (%e )  + 1
                   Type: GeneralUnivariatePowerSeries(Expression Integer,z,0)
                                       Time: 0.53 (EV) + 0.07 (OT) = 0.60 sec
s1 - s2
 

            3
   (23)  O(z )
                   Type: GeneralUnivariatePowerSeries(Expression Integer,z,0)
                                       Time: 0.02 (IN) + 0.07 (OT) = 0.08 sec
)clear properties s1 s2
 
)set streams calculate 7
 
-- Look at the generalized Taylor series around x = 1
-- => (x - 1)^a/e^b [1 - (a + 2 b) (x - 1) / 2 + O((x - 1)^2)]
log(x)**a*exp(-b*x)
 

           - b x      a
   (24)  %e     log(x)
                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 0.02 (EV) + 0.02 (OT) = 0.10 sec
series(%, x = 1, 1)
 
 
   >> Error detected within library code:
   No series expansion

initial (25) -> 
real   29.4
user   9.7
sys    0.5

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

Tue Aug 19 07:01:32 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
)set streams calculate 7
 
-- ---------- Series ----------
-- Asymptotic expansions => sqrt(2) x + O(1/x)
series(sqrt(2*x**2 + 1), x = %plusInfinity, 0)
 
   There are 3 exposed and 0 unexposed library operations named series 
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op series
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      series with argument type(s) 
                             Expression Integer
                Equation OrderedCompletion Polynomial Integer
                             NonNegativeInteger
      
-- Wallis' product => 1/sqrt(pi n) + ...   [Knopp, p. 385]
series(1/2**(2*n) * binomial(2*n, n), n = %plusInfinity, 0)
 
   There are 3 exposed and 0 unexposed library operations named series 
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op series
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      series with argument type(s) 
                             Expression Integer
                Equation OrderedCompletion Polynomial Integer
                             NonNegativeInteger
      
-- => 0!/x - 1!/x^2 + 2!/x^3 - 3!/x^4 + O(1/x^5)   [Knopp, p. 544]
exp(x) * 'integrate(exp(-t)/t, t = x..%plusInfinity)
 

          x          exp(- t)
   (1)  %e integrate(--------,t= x,%plusInfinity    )
                         t
                                                             Type: OutputForm
               Time: 0.27 (IN) + 0.12 (EV) + 0.03 (OT) + 0.02 (GC) = 0.43 sec
series(%, x = %plusInfinity, 5)
 
   There are 3 exposed and 0 unexposed library operations named series 
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op series
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      series with argument type(s) 
                                 OutputForm
                Equation OrderedCompletion Polynomial Integer
                               PositiveInteger
      
-- Multivariate Taylor series expansion => 1 - (x^2 + 2 x y + y^2)/2 + O(x^4)
)set streams calculate 2
 
series(cos(x + y), y = 0)
 

                           cos(x)  2      3
   (2)  cos(x) - sin(x)y - ------ y  + O(y )
                              2
                        Type: UnivariatePuiseuxSeries(Expression Integer,y,0)
               Time: 0.32 (IN) + 0.22 (EV) + 0.10 (OT) + 0.10 (GC) = 0.73 sec
series(%, x = 0)
 
   There are 4 exposed and 0 unexposed library operations named series 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op series
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      series with argument type(s) 
                                     Any
                         Equation Polynomial Integer
      
)set streams calculate 7
 
-- Power series (compute the general formula)
log(sin(x)/x)
 

            sin(x)
   (3)  log(------)
               x
                                                     Type: Expression Integer
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
exp(-x)*sin(x)
 

          - x
   (4)  %e   sin(x)
                                                     Type: Expression Integer
                                       Time: 0.03 (IN) + 0.02 (EV) = 0.05 sec
series(%, x = 0)
 

             2   1  3    1  5    1  6    1   7      9
   (5)  x - x  + - x  - -- x  + -- x  - --- x  + O(x )
                 3      30      90      630
                        Type: UnivariatePuiseuxSeries(Expression Integer,x,0)
                           Time: 0.03 (IN) + 0.08 (EV) + 0.05 (OT) = 0.17 sec
-- Derive an explicit Taylor series solution of y as a function of x from the
-- following implicit relation:
-- y = x - 1 + (x - 1)^2/2 + 2/3 (x - 1)^3 + (x - 1)^4 + 17/10 (x - 1)^5 + ...
y:= operator('y);
 

                                                          Type: BasicOperator
                                                   Time: 0.08 (IN) = 0.08 sec
x = sin(y(x)) + cos(y(x))
 

   (7)  x= sin(y(x)) + cos(y(x))
                                            Type: Equation Expression Integer
                           Time: 0.47 (IN) + 0.02 (EV) + 0.14 (OT) = 0.62 sec
seriesSolve(%, y, x = 1, 0)
 
 
   >> Error detected within library code:
   Improper initial value

initial (8) -> 
real   27.3
user   9.0
sys    0.6

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

Tue Aug 19 07:21:02 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
)set streams calculate 7
 
-- ---------- Series ----------
-- Pade (rational function) approximation => (2 - x)/(2 + x)
pade(1, 1, series(exp(-x), x = 0))
 
   Compiling function G82130 with type Integer -> Boolean 

        - x + 2
   (1)  -------
         x + 2
         Type: Union(Fraction UnivariatePolynomial(x,Expression Integer),...)
                Time: 0.69 (IN) + 0.67 (EV) + 0.28 (OT) + 0.37 (GC) = 2.0 sec
-- Fourier series of f(x) of period 2 p over the interval [-p, p]
-- => - (2 p / pi) sum( (-1)^n sin(n pi x / p) / n, n = 1..infinity )
x
 

   (2)  x
                                                             Type: Variable x
                                                                  Time: 0 sec
-- => p / 2
-- - (2 p / pi^2) sum( [1 - (-1)^n] cos(n pi x / p) / n^2, n = 1..infinity )
abs(x)
 

   (3)  abs(x)
                                                     Type: Expression Integer
                           Time: 0.12 (IN) + 0.03 (EV) + 0.02 (OT) = 0.17 sec
-- ---------- Quit ----------
)quit
 

real   7.4
user   2.6
sys    0.3
\end{verbatim}
\section{Transforms}
\begin{verbatim}
 
-- ---------- Transforms ----------
-- Laplace and inverse Laplace transforms
-- => s/[s^2 + (w - 1)^2]   (Re s > |Im(w - 1)|)
--    [Gradshteyn and Ryzhik 17.13(33)]
laplace(cos((w - 1)*t), t, s)
 

                s
   (1)  ----------------
         2         2
        w  - 2w + s  + 1
                                                     Type: Expression Integer
               Time: 0.37 (IN) + 1.22 (EV) + 0.15 (OT) + 0.18 (GC) = 1.92 sec
inverseLaplace(%, s, t)
 

              +-----------+
              | 2
   (2)  cos(t\|w  - 2w + 1 )
                                          Type: Union(Expression Integer,...)
                           Time: 0.02 (IN) + 0.08 (EV) + 0.02 (OT) = 0.12 sec
-- => w/(s^2 - 4 w^2)   (Re s > |Re w|)   [Gradshteyn and Ryzhik 17.13(84)]
laplace(sinh(w*t)*cosh(w*t), t, s)
 

              w
   (3)  - --------
            2    2
          4w  - s
                                                     Type: Expression Integer
                           Time: 0.22 (IN) + 0.07 (EV) + 0.03 (OT) = 0.32 sec
-- e^(-6 sqrt(s))/s   (Re s > 0)   [Gradshteyn and Ryzhik 17.13(102)]
laplace(erf(3/sqrt(t)), t, s)
 
 
   >> Error detected within library code:
   Sorry - cannot handle that integrand yet

initial (4) -> 
real   10.3
user   3.5
sys    0.3

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

Fri Jun 13 03:43:05 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Transforms ----------
-- Solve y'' + y = 4 [H(t - 1) - H(t - 2)], y(0) = 1, y'(0) = 0 where H is the
-- Heaviside (unit step) function (the RHS describes a pulse of magnitude 4 and
-- duration 1).  See David A. Sanchez, Richard C. Allen, Jr. and Walter T.
-- Kyner, _Differential Equations: An Introduction_, Addison-Wesley Publishing
-- Company, 1983, p. 211.  First, take the Laplace transform of the ODE
-- => s^2 Y(s) - s + Y(s) = 4/s [e^(-s) - e^(-2 s)]
-- where Y(s) is the Laplace transform of y(t)
y:= operator('y);
 

                                                          Type: BasicOperator
                           Time: 0.08 (IN) + 0.10 (OT) + 0.02 (GC) = 0.20 sec
heaviside:= operator('heaviside);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
map(e +-> laplace(e, t, s), _
    D(y(t), t, 2) + y(t) = 4*(heaviside(t - 1) - heaviside(t - 2)))
 

   (3)
     2                          ,
   (s  + 1)laplace(y(t),t,s) - y (0) - y(0)s =

     4laplace(heaviside(t - 1),t,s) - 4laplace(heaviside(t - 2),t,s)
                                            Type: Equation Expression Integer
                Time: 1.0 (IN) + 1.17 (EV) + 0.31 (OT) + 0.27 (GC) = 2.75 sec
-- Now, solve for Y(s) and then take the inverse Laplace transform
-- => Y(s) = s/(s^2 + 1) + 4 [1/s - s/(s^2 + 1)] [e^(-s) - e^(-2 s)]
-- => y(t) = cos t + 4 {[1 - cos(t - 1)] H(t - 1) - [1 - cos(t - 2)] H(t - 2)}
-- What is the Laplace transform of an infinite square wave?
-- => 1/s + 2 sum( (-1)^n e^(- s n a)/s, n = 1..infinity )
--    [Sanchez, Allen and Kyner, p. 213]
laplace(1 + 2*limit(sum((-1)**n*heaviside(t - n*a), n = 1..N), _
                    N = %plusInfinity), t, s)
 
   There are 31 exposed and 17 unexposed library operations named * 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op *
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named * 
      with argument type(s) 
                               PositiveInteger
                                   failed
      
laplace(1 + 2*'limit(sum((-1)**n*heaviside(t - n*a), n = 1..N), _
                     N = %plusInfinity), t, s)
 
   There are 1 exposed and 0 unexposed library operations named laplace
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op laplace
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      laplace with argument type(s) 
                                 OutputForm
                                 Variable t
                                 Variable s
      
-- Fourier transforms => sqrt(2 pi) delta(z)   [Gradshteyn and Ryzhik 17.23(1)]
FourierTransform(f, x, z) == _
   [integrate(1/sqrt(2*%pi) * f * %e**(%i*z*x), _
              x = %minusInfinity..%plusInfinity), _
    integrate(1/sqrt(2*%pi) * f * %e**(%i*z*x), _
              x = %minusInfinity..%plusInfinity, "noPole")];
 
                                                                   Type: Void
                                                                  Time: 0 sec
FourierTransform(1, x, z)
 
   Compiling function FourierTransform with type (PositiveInteger,
      Variable x,Variable z) -> List Union(f1: OrderedCompletion 
      Expression Complex Integer,f2: List OrderedCompletion Expression 
      Complex Integer,fail: failed,pole: potentialPole) 

   (5)  ["failed","failed"]
Type: List Union(f1: OrderedCompletion Expression Complex Integer,f2: List OrderedCompletion Expression Complex Integer,fail: failed,pole: potentialPole)
               Time: 2.50 (IN) + 2.65 (EV) + 0.38 (OT) + 0.67 (GC) = 6.20 sec
-- => e^(-z^2/36) / [3 sqrt(2)]   [Gradshteyn and Ryzhik 17.23(13)]
FourierTransform(exp(-9*x**2), x, z)
 
   Compiling function FourierTransform with type (Expression Integer,
      Variable x,Variable z) -> List Union(f1: OrderedCompletion 
      Expression Complex Integer,f2: List OrderedCompletion Expression 
      Complex Integer,fail: failed,pole: potentialPole) 

   (6)  ["failed","failed"]
Type: List Union(f1: OrderedCompletion Expression Complex Integer,f2: List OrderedCompletion Expression Complex Integer,fail: failed,pole: potentialPole)
               Time: 0.37 (IN) + 1.42 (EV) + 0.18 (OT) + 0.02 (GC) = 1.99 sec
-- => sqrt(2 / pi) (9 - z^2)/(9 + z^2)^2   [Gradshteyn and Ryzhik 17.23(11)]
FourierTransform(abs(x)*exp(-3*abs(x)), x, z)
 
 
   >> Error detected within library code:
   Function not supported by Risch d.e.

initial (7) -> 
real   44.4
user   14.3
sys    0.7

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

Fri Jun 13 04:04:37 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Transforms ----------
-- Mellin transforms
-- => pi cot(pi s)   (0 < Re s < 1)   [Gradshteyn and Ryzhik 17.43(5)]
MellinTransform(f, x, s) == _
   [integrate(f * x**(s - 1), x = 0..%plusInfinity), _
    integrate(f * x**(s - 1), x = 0..%plusInfinity, "noPole")];
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
MellinTransform(1/(1 - x), x, s)
 
   Compiling function MellinTransform with type (Fraction Polynomial 
      Integer,Variable x,Variable s) -> List Union(f1: 
      OrderedCompletion Expression Integer,f2: List OrderedCompletion 
      Expression Integer,fail: failed,pole: potentialPole) 

   (2)  [potentialPole,"failed"]
Type: List Union(f1: OrderedCompletion Expression Integer,f2: List OrderedCompletion Expression Integer,fail: failed,pole: potentialPole)
               Time: 1.10 (IN) + 1.95 (EV) + 0.38 (OT) + 0.37 (GC) = 3.80 sec
-- => 2^(s - 4) gamma(s/2)/gamma(4 - s/2)   (0 < Re s < 1)
--    [Gradshteyn and Ryzhik 17.43(16)]
MellinTransform(besselJ(3, x)/x**3, x, s)
 
   Compiling function MellinTransform with type (Expression Integer,
      Variable x,Variable s) -> List Union(f1: OrderedCompletion 
      Expression Integer,f2: List OrderedCompletion Expression Integer,
      fail: failed,pole: potentialPole) 
 
   >> Error detected within library code:
   Function not supported by Risch d.e.

initial (3) -> 
real   14.4
user   4.9
sys    0.4

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

Fri Jun 13 04:06:47 MET DST 1997
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Transforms ----------
-- Z transforms.  See _CRC Standard Mathematical Tables_, Twenty-first Edition,
-- The Chemical Rubber Company, 1973, p. 518.
-- Z[H(t - m T)] => z/[z^m (z - 1)]   (H is the Heaviside (unit step) function)
--heaviside(t - 3)
--heaviside(t - m)
-- ---------- Quit ----------
)quit
 

real   1.1
user   0.7
sys    0.1
\end{verbatim}
\section{Ordinary Difference and Differential Equations}
\begin{verbatim}
 
-- ---------- Ordinary Difference and Differential Equations ----------
-- Second order linear recurrence equation: r(n) = (n - 1)^2 + m n
r:= operator('r);
 

                                                          Type: BasicOperator
                           Time: 0.07 (IN) + 0.05 (OT) + 0.02 (GC) = 0.13 sec
[r(n + 2) - 2 * r(n + 1) + r(n) = 2, r(0) = 1, r(1) = m]
 

   (2)  [r(n + 2) - 2r(n + 1) + r(n)= 2,r(0)= 1,r(1)= m]
                                       Type: List Equation Expression Integer
               Time: 1.17 (IN) + 0.05 (EV) + 0.24 (OT) + 0.07 (GC) = 1.52 sec
-- => r(n) = 3^n - 2^n   [Cohen, p. 67]
[r(n) = 5*r(n - 1) - 6*r(n - 2), r(0) = 0, r(1) = 1]
 

   (3)  [r(n)= 5r(n - 1) - 6r(n - 2),r(0)= 0,r(1)= 1]
                                       Type: List Equation Expression Integer
                                       Time: 0.10 (IN) + 0.05 (OT) = 0.15 sec
-- => r(n) = Fibonacci[n + 1]   [Cohen, p. 83]
[r(n) = r(n - 1) + r(n - 2), r(1) = 1, r(2) = 2]
 

   (4)  [r(n)= r(n - 1) + r(n - 2),r(1)= 1,r(2)= 2]
                                       Type: List Equation Expression Integer
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
-- => [c^(n+1) [c^(n+1) - 2 c - 2] + (n+1) c^2 + 2 c - n] / [(c-1)^3 (c+1)]
--    [Joan Z. Yu and Robert Israel in sci.math.symbolic]
[r(n) = (1 + c - c**(n-1) - c**(n+1))/(1 - c**n)*r(n - 1) _
        - c*(1 - c**(n-2))/(1 - c**(n-1))*r(n - 2) + 1, _
 r(1) = 1, r(2) = (2 + 2*c + c**2)/(1 + c)]
 

   (5)
   [
     r(n) =
                     n - 1             n + 1
           (r(n - 1)c      - r(n - 1))c
         + 
             n - 1              n - 2                   n             n - 1 2
           (c      - c r(n - 2)c      + c r(n - 2) - 1)c  + r(n - 1)(c     )
         + 
                                   n - 1              n - 2
           ((- c - 2)r(n - 1) - 1)c      + c r(n - 2)c      + (c + 1)r(n - 1)
         + 
           - c r(n - 2) + 1
      /
           n - 1      n    n - 1
         (c      - 1)c  - c      + 1
     ,
                    2
                   c  + 2c + 2
    r(1)= 1, r(2)= -----------]
                      c + 1
                                       Type: List Equation Expression Integer
               Time: 0.48 (IN) + 0.13 (EV) + 0.13 (OT) + 0.03 (GC) = 0.78 sec
)clear properties r
 
-- Second order ODE with initial conditions---solve first using Laplace
-- transforms: f(t) = sin(2 t)/8 - t cos(2 t)/4
f:= operator('f);
 

                                                          Type: BasicOperator
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
ode:= D(f(t), t, 2) + 4*f(t) = sin(2*t)
 

         ,,
   (7)  f  (t) + 4f(t)= sin(2t)

                                            Type: Equation Expression Integer
               Time: 0.17 (IN) + 0.15 (EV) + 0.02 (OT) + 0.02 (GC) = 0.35 sec
map(e +-> laplace(e, t, s), %)
 

          2                          ,                2
   (8)  (s  + 4)laplace(f(t),t,s) - f (0) - f(0)s= ------
                                                    2
                                                   s  + 4
                                            Type: Equation Expression Integer
                            Time: 0.92 (EV) + 0.02 (OT) + 0.07 (GC) = 1.0 sec
subst(subst(%, f(0) = 0), subst(D(f(x), x), x = 0) = 0)
 

          2                           2
   (9)  (s  + 4)laplace(f(t),t,s)= ------
                                    2
                                   s  + 4
                                            Type: Equation Expression Integer
                           Time: 0.47 (IN) + 0.02 (EV) + 0.07 (OT) = 0.55 sec
map(e +-> e/(s**2 + 4), %)
 

                                  2
   (10)  laplace(f(t),t,s)= -------------
                             4     2
                            s  + 8s  + 16
                                            Type: Equation Expression Integer
                                       Time: 0.08 (IN) + 0.02 (OT) = 0.10 sec
map(e +-> inverseLaplace(e, s, t), %)
 

                   sin(2t) - 2t cos(2t)
   (11)  "failed"= --------------------
                             8
                            Type: Equation Union(Expression Integer,"failed")
                           Time: 0.02 (IN) + 0.10 (EV) + 0.03 (OT) = 0.15 sec
-- Now, solve the ODE directly
solve(ode, f, t = 0, [0, 0])
 

         sin(2t) - 2t cos(2t)
   (12)  --------------------
                   8
                                          Type: Union(Expression Integer,...)
                           Time: 0.30 (IN) + 0.87 (EV) + 0.07 (OT) = 1.23 sec
)clear properties f ode
 
-- Separable equation => y(x)^2 = 2 log(x + 1) + (4 x + 3)/(x + 1)^2 + 2 A
y:= operator('y);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
D(y(x), x) = x**2/(y(x)*(1 + x)**3)
 

                            2
          ,                x
   (14)  y (x)= -----------------------
                  3     2
                (x  + 3x  + 3x + 1)y(x)
                                            Type: Equation Expression Integer
                           Time: 0.08 (IN) + 0.02 (EV) + 0.07 (OT) = 0.17 sec
solve(%, y, x)
 

              2                         2              2
         (- 2x  - 4x - 2)log(x + 1) + (x  + 2x + 1)y(x)  - 4x - 3
   (15)  --------------------------------------------------------
                                 2
                               2x  + 4x + 2
                                          Type: Union(Expression Integer,...)
               Time: 0.02 (IN) + 0.82 (EV) + 0.02 (OT) + 0.42 (GC) = 1.27 sec
-- Homogeneous equation.  See Emilio O. Roxin, _Ordinary Differential
-- Equations_, Wadsworth Publishing Company, 1972, p. 11
-- => y(x)^2 = 2 x^2 log|A x|
D(y(x), x) = y(x)/x + x/y(x)
 

                    2    2
          ,     y(x)  + x
   (16)  y (x)= ----------
                  x y(x)
                                            Type: Equation Expression Integer
                           Time: 0.17 (IN) + 0.02 (EV) + 0.02 (OT) = 0.20 sec
solve(%, y, x)
 

             2             2
         - 2x log(x) + y(x)
   (17)  -------------------
                   2
                 2x
                                          Type: Union(Expression Integer,...)
                                                   Time: 0.15 (EV) = 0.15 sec
-- First order linear ODE: y(x) = [A - cos(x)]/x^3
y:= operator('y);
 

                                                          Type: BasicOperator
                                                                  Time: 0 sec
x**2 * D(y(x), x) + 3*x*y(x) = sin(x)/x
 

          2 ,               sin(x)
   (19)  x y (x) + 3x y(x)= ------
                               x
                                            Type: Equation Expression Integer
                                                   Time: 0.08 (IN) = 0.08 sec
solve(%, y, x)
 

                        cos(x)          1
   (20)  [particular= - ------,basis= [--]]
                           3            3
                          x            x
Type: Union(Record(particular: Expression Integer,basis: List Expression Integer),...)
                           Time: 0.33 (EV) + 0.02 (OT) + 0.02 (GC) = 0.37 sec
-- Exact equation => x + x^2 sin y(x) + y(x) = A   [Roxin, p. 15]
D(y(x), x) = -(1 + 2*x*sin(y(x)))/(1 + x**2*cos(y(x)))
 

          ,     - 2x sin(y(x)) - 1
   (21)  y (x)= ------------------
                   2
                  x cos(y(x)) + 1
                                            Type: Equation Expression Integer
                                       Time: 0.05 (IN) + 0.05 (OT) = 0.10 sec
solve(%, y, x)
 

          2
   (22)  x sin(y(x)) + y(x) + x
                                          Type: Union(Expression Integer,...)
                                       Time: 0.08 (EV) + 0.02 (OT) = 0.10 sec
-- Nonlinear ODE => y(x)^3/6 + A y(x) = x + B
ode:= D(y(x), x, 2) + y(x)*D(y(x), x)**3 = 0
 

          ,,           ,   3
   (23)  y  (x) + y(x)y (x) = 0

                                            Type: Equation Expression Integer
                                       Time: 0.05 (IN) + 0.03 (EV) = 0.08 sec
solve(%, y, x)
 
 
   >> Error detected within library code:
   getlincoeff: not an appropriate ordinary differential equation

initial (24) -> 
real   20.4
user   9.1
sys    0.6

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

Tue Mar 24 19:56:43 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Ordinary Difference and Differential Equations ----------
y:= operator('y);
 

                                                          Type: BasicOperator
                           Time: 0.05 (IN) + 0.08 (OT) + 0.02 (GC) = 0.15 sec
-- Nonlinear ODE => y(x)^3/6 + A y(x) = x + B
ode:= D(y(x), x, 2) + y(x)*D(y(x), x)**3 = 0
 

         ,,           ,   3
   (2)  y  (x) + y(x)y (x) = 0

                                            Type: Equation Expression Integer
               Time: 0.60 (IN) + 0.22 (EV) + 0.18 (OT) + 0.08 (GC) = 1.08 sec
-- => y(x) = [3 x + sqrt(1 + 9 x^2)]^(1/3) - 1/[3 x + sqrt(1 + 9 x^2)]^(1/3)
--    [Pos96]
solve(ode, y, x = 0, [0, 2])
 
 
   >> Error detected within library code:
   getlincoeff: not an appropriate ordinary differential equation

initial (3) -> 
real   5.1
user   2.3
sys    0.2

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

Tue Mar 24 19:56:49 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Ordinary Difference and Differential Equations ----------
y:= operator('y);
 

                                                          Type: BasicOperator
                           Time: 0.05 (IN) + 0.08 (OT) + 0.02 (GC) = 0.15 sec
-- A simple parametric ODE: y(x, a) = A e^(a x)
D(y(x, a), x) = a*y(x, a)
 

   (2)  y  (x,a)= a y(x,a)
         ,1
                                            Type: Equation Expression Integer
               Time: 0.47 (IN) + 0.15 (EV) + 0.18 (OT) + 0.07 (GC) = 0.86 sec
solve(%, y, x);
 
 
   >> Error detected within library code:
   parseODE: equation has order 0

initial (3) -> 
real   2.2
user   1.6
sys    0.2

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

Tue Mar 24 20:03:01 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
-- ---------- Ordinary Difference and Differential Equations ----------
y:= operator('y);
 

                                                          Type: BasicOperator
                                       Time: 0.05 (IN) + 0.08 (OT) = 0.13 sec
-- ODE with boundary conditions.  This problem has nontrivial solutions
-- y(x) = A sin([pi/2 + n pi] x) for n an arbitrary integer
solve(D(y(x), x, 2) + k**2*y(x) = 0, y, x = 0, [0])
 

   (2)  0
                                          Type: Union(Expression Integer,...)
               Time: 1.15 (IN) + 0.97 (EV) + 0.17 (OT) + 0.17 (GC) = 2.45 sec
--bc(%, x = 0, y = 0, x = 1, D(y(x), x) = 0)
-- => y(x) = Z_v[sqrt(x)] where Z_v is an arbitrary Bessel function of order v
--    [Gradshteyn and Ryzhik 8.491(9)]
D(y(x), x, 2) + 1/x*D(y(x), x) + 1/(4*x)*(1 - v**2/x)*y(x) = 0
 

          2 ,,         ,            2
        4x y  (x) + 4xy (x) + (x - v )y(x)

   (3)  ----------------------------------= 0
                          2
                        4x
                                            Type: Equation Expression Integer
                           Time: 0.35 (IN) + 0.03 (EV) + 0.08 (OT) = 0.47 sec
solve(%, y, x)
 
                                                          2
                                                     2   v
   WARNING (genufact): No known algorithm to factor ?  - --, trying square-free.
                                                          4
   WARNING (genufact): No known algorithm to factor
      3     2       2          2
     ?  - 3?  + (- v  + 3)? + v  - 1, trying square-free.

   (4)  [particular= 0,basis= []]
Type: Union(Record(particular: Expression Integer,basis: List Expression Integer),...)
            Time: 0.02 (IN) + 81.03 (EV) + 0.02 (OT) + 17.42 (GC) = 98.48 sec
-- Delay (or mixed differential-difference) equation.  See Daniel Zwillinger,
-- _Handbook of Differential Equations_, Second Edition, Academic Press, Inc.,
-- 1992, p. 210 => y(t) = y0 sum((-a)^n (t - n + 1)^n/n!, n = 0..floor(t) + 1)
D(y(t), t) + a*y(t - 1) = 0
 

         ,
   (5)  y (t) + a y(t - 1)= 0

                                            Type: Equation Expression Integer
                                       Time: 0.22 (IN) + 0.07 (OT) = 0.28 sec
solve(%, y, t)
 

           t
         ++
   (6)   |   a y(%V - 1)d%V  + y(t)
        ++
                                          Type: Union(Expression Integer,...)
               Time: 0.02 (IN) + 0.30 (EV) + 0.02 (OT) + 0.03 (GC) = 0.37 sec
-- Discontinuous ODE   [Zwillinger, p. 221]
-- => y(t) = cosh t   (0 <= t < T)
--           (sin T cosh T + cos T sinh T) sin t
--           + (cos T cosh T - sin T sinh T) cos t   (T <= t)
sgn(t) == if t < 0 then -1 else 1;
 
                                                                   Type: Void
                                                                  Time: 0 sec
solve(D(y(t), t, 2) + sgn(t - TT)*y(t) = 0, y, t = 0, [1, 0])
 
   Compiling function sgn with type Polynomial Integer -> Integer 

   (8)  cos(t)
                                          Type: Union(Expression Integer,...)
                           Time: 0.15 (IN) + 0.13 (EV) + 0.03 (OT) = 0.32 sec
)clear properties sgn
 
   Compiled code for sgn has been cleared.
solve(D(y(t), t, 2) + sign(t - TT)*y(t) = 0, y, t = 0, [1, 0])
 
   There are 31 exposed and 17 unexposed library operations named * 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op *
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named * 
      with argument type(s) 
                                   failed
                             Expression Integer
      
-- Integro-differential equation.  See A. E. Fitzgerald, David E. Higginbotham
-- and Arvin Grabel, _Basic Electrical Engineering_, Fourth Edition,
-- McGraw-Hill Book Company, 1975, p. 117.
-- => i(t) = 5/13 [-8 e^(-4 t) + e^(-t) (8 cos 2 t + sin 2 t)]
i:= operator('i);
 

                                                          Type: BasicOperator
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
eqn:= D(i(t), t) + 2*i(t) + 5*'integrate(i(tau), tau = 0..t) = 10*%e**(-4*t)
 

          ,                                                   - 4t
   (10)  i (t) + 2i(t) + 5integrate(i(tau),tau= 0,t    )= 10%e

                                                    Type: Equation OutputForm
                           Time: 0.17 (IN) + 0.05 (EV) + 0.03 (OT) = 0.25 sec
solve(eqn, i, t)
 
   There are 6 exposed and 1 unexposed library operations named solve 
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                              )display op solve
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named solve
      with argument type(s) 
                             Equation OutputForm
                                BasicOperator
                                 Variable t
      
map(e +-> laplace(e, t, s), eqn)
 
   There are 1 exposed and 0 unexposed library operations named laplace
      having 3 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                             )display op laplace
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
   Cannot find a definition or applicable library operation named 
      laplace with argument type(s) 
                                 OutputForm
                                 Variable t
                                 Variable s
      
   AXIOM will attempt to step through and interpret the code.
 
   Anonymous user functions created with +-> that are processed in 
      interpret-code mode must have result target information 
      available. This information is not present so AXIOM cannot 
      proceed any further. This may be remedied by declaring the 
      function.
--subst(%, [t = 0, D(i(t), t) = 10])
)clear properties i eqn
 
-- System of two linear, constant coefficient ODEs:
-- x(t) = e^t [A cos(t) - B sin(t)], y(t) = e^t [A sin(t) + B cos(t)]
x:= operator('x);
 

                                                          Type: BasicOperator
                                                                  Time: 0 sec
system:= [D(x(t), t) = x(t) - y(t), D(y(t), t) = x(t) + y(t)]
 

           ,                    ,
   (12)  [x (t)= - y(t) + x(t),y (t)= y(t) + x(t)]

                                       Type: List Equation Expression Integer
                           Time: 0.05 (IN) + 0.03 (EV) + 0.02 (OT) = 0.10 sec
-- Check the answer
ans:= [x(t) = %e^t*(A*cos(t) - B*sin(t)), y(t) = %e^t*(A*sin(t) + B*cos(t))]
 

                      t                   t           t                   t
   (13)  [x(t)= - B %e sin(t) + A cos(t)%e ,y(t)= A %e sin(t) + B cos(t)%e ]
                                       Type: List Equation Expression Integer
                           Time: 0.25 (IN) + 0.07 (EV) + 0.02 (OT) = 0.33 sec
dans:= map(e +-> D(lhs(e), t) = D(rhs(e), t), ans)
 

   (14)
     ,                t                          t
   [x (t)= (- B - A)%e sin(t) + (- B + A)cos(t)%e ,

     ,                t                        t
    y (t)= (- B + A)%e sin(t) + (B + A)cos(t)%e ]

                                       Type: List Equation Expression Integer
                           Time: 0.02 (IN) + 0.07 (EV) + 0.02 (OT) = 0.10 sec
map(e +-> subst(lhs(e), dans) = subst(rhs(e), ans), system)
 

   (15)
   [
                t                          t
     (- B - A)%e sin(t) + (- B + A)cos(t)%e  =
                  t                          t
       (- B - A)%e sin(t) + (- B + A)cos(t)%e
     ,
               t                        t             t                        t
    (- B + A)%e sin(t) + (B + A)cos(t)%e = (- B + A)%e sin(t) + (B + A)cos(t)%e
     ]
                                       Type: List Equation Expression Integer
                           Time: 0.02 (IN) + 0.03 (EV) + 0.03 (OT) = 0.08 sec
)clear properties ans dans
 
-- Triangular system of two ODEs: x(t) = A e^t [sin(t) + 2],
--    y(t) = A e^t [5 - cos(t) + 2 sin(t)]/5 + B e^(-t)
-- See Nicolas Robidoux, ``Does Axiom Solve Systems of O.D.E.'s Like
-- Mathematica?'', LA-UR-93-2235, Los Alamos National Laboratory, Los Alamos,
-- New Mexico.
system:= [D(x(t), t) = x(t) * (1 + cos(t)/(2 + sin(t))), _
          D(y(t), t) = x(t) - y(t)]
 

           ,     x(t)sin(t) + x(t)cos(t) + 2x(t)  ,
   (16)  [x (t)= -------------------------------,y (t)= - y(t) + x(t)]
                            sin(t) + 2
                                       Type: List Equation Expression Integer
                           Time: 0.08 (IN) + 0.03 (EV) + 0.03 (OT) = 0.15 sec
-- Try solving this system one equation at a time
solve(system.1, x, t)
 

                                  t            t
   (17)  [particular= 0,basis= [%e sin(t) + 2%e ]]
Type: Union(Record(particular: Expression Integer,basis: List Expression Integer),...)
                           Time: 0.70 (EV) + 0.02 (OT) + 0.03 (GC) = 0.75 sec
x(t) = C1 * %.basis.1
 

                    t               t
   (18)  x(t)= C1 %e sin(t) + 2C1 %e
                                            Type: Equation Expression Integer
                                       Time: 0.17 (IN) + 0.02 (OT) = 0.18 sec
solve(subst(system.2, %), y, t)
 

   (19)
                      - t   t 2                              - t   t 2
                2C1 %e   (%e ) sin(t) + (- C1 cos(t) + 5C1)%e   (%e )
   [particular= ------------------------------------------------------,
                                           5
              - t
    basis= [%e   ]]
Type: Union(Record(particular: Expression Integer,basis: List Expression Integer),...)
                Time: 0.03 (IN) + 2.0 (EV) + 0.02 (OT) + 0.05 (GC) = 2.10 sec
y(t) = simplify(%.particular) + C2 * %.basis.1
 

                     t                              t         - t
               2C1 %e sin(t) + (- C1 cos(t) + 5C1)%e  + 5C2 %e
   (20)  y(t)= --------------------------------------------------
                                        5
                                            Type: Equation Expression Integer
                           Time: 0.08 (IN) + 0.23 (EV) + 0.03 (OT) = 0.35 sec
)clear properties x y
 
x:= operator('x);
 

                                                          Type: BasicOperator
                                                                  Time: 0 sec
y:= operator('y);
 

                                                          Type: BasicOperator
                                                   Time: 0.02 (IN) = 0.02 sec
z:= operator('z);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
-- 3 x 3 linear system with constant coefficients:
-- (1) real distinct characteristic roots (= 2, 1, 3)   [Roxin, p. 109]
--     => x(t) = A e^(2 t),   y(t) = B e^t + C e^(3 t),
--        z(t) = -A e^(2 t) - C e^(3 t)
system:= [D(x(t), t) =  2*x(t), _
          D(y(t), t) = -2*x(t) + y(t) - 2*z(t), _
          D(z(t), t) =    x(t)        + 3*z(t)]
 

           ,            ,                             ,
   (24)  [x (t)= 2x(t),y (t)= - 2z(t) + y(t) - 2x(t),z (t)= 3z(t) + x(t)]

                                       Type: List Equation Expression Integer
                                       Time: 0.13 (IN) + 0.03 (OT) = 0.17 sec
-- (2) complex characteristic roots (= 0, -1 +- sqrt(2) i)   [Roxin, p. 111]
--     => x(t) = A + e^(-t)/3 [-(B + sqrt(2) C) cos(sqrt(2) t) +
--                              (sqrt(2) B - C) sin(sqrt(2) t)],
--        y(t) = e^(-t) [B cos(sqrt(2) t) + C sin(sqrt(2) t)],
--        z(t) = e^(-t) [(-B + sqrt(2) C) cos(sqrt(2) t)
--                       -(sqrt(2) B + C) sin(sqrt(2) t)]
system:= [D(x(t), t) = y(t), D(y(t), t) = z(t), _
          D(z(t), t) = -3*y(t) - 2*z(t)]
 

           ,           ,           ,
   (25)  [x (t)= y(t),y (t)= z(t),z (t)= - 2z(t) - 3y(t)]

                                       Type: List Equation Expression Integer
                           Time: 0.08 (IN) + 0.02 (EV) + 0.03 (OT) = 0.13 sec
-- (3) multiple characteristic roots (= 2, 2, 2)   [Roxin, p. 113]
--     => x(t) = e^(2 t) [A + C (1 + t)],   y(t) = B e^(2 t),
--        z(t) = e^(2 t) [A + C t]
system:= [D(x(t), t) = 3*x(t) - z(t), D(y(t), t) = 2*y(t), _
          D(z(t), t) = x(t) + z(t)]
 

           ,                     ,            ,
   (26)  [x (t)= - z(t) + 3x(t),y (t)= 2y(t),z (t)= z(t) + x(t)]

                                       Type: List Equation Expression Integer
               Time: 0.57 (IN) + 0.03 (EV) + 0.03 (OT) + 0.47 (GC) = 1.10 sec
-- x(t) = x0 + [4 sin(w t)/w - 3 t] x0'   [Rick Niles]
--        + 6 [w t - sin(w t)] y0 + 2/w [1 - cos(w t)] y0',
-- y(t) = -2/w [1 - cos(w t)] x0' + [4 - 3 cos(w t)] y0 + sin(w t)/w y0'
system:= [D(x(t), t, 2) = 2*w*D(y(t), t), _
          D(y(t), t, 2) = -2*w*D(x(t), t) + 3*w**2*y(t)]
 

           ,,        ,     ,,          ,        2
   (27)  [x  (t)= 2wy (t),y  (t)= - 2wx (t) + 3w y(t)]

                                       Type: List Equation Expression Integer
                           Time: 0.13 (IN) + 0.03 (EV) + 0.02 (OT) = 0.18 sec
)clear properties x y z system
 
-- ---------- Quit ----------
)quit
 

real   267.4
user   92.4
sys    1.8
\end{verbatim}
\section{Partial Differential Equations}
\begin{verbatim}
 
-- ---------- Partial Differential Equations ----------
-- A very simple PDE => g(x) + h(y) for arbitrary functions g and h
f:= operator('f);
 

                                                          Type: BasicOperator
                           Time: 0.07 (IN) + 0.10 (OT) + 0.05 (GC) = 0.22 sec
D(f(x, y), [x, y]) = 0
 

   (2)  f    (x,y)= 0
         ,1,2
                                            Type: Equation Expression Integer
               Time: 0.65 (IN) + 0.27 (EV) + 0.27 (OT) + 0.15 (GC) = 1.33 sec
)clear properties f
 
-- Heat equation: the fundamental solution is 1/sqrt(4 pi t) exp(-x^2/[4 t]).
-- If f(x, t) and a(x, t) are solutions, the most general solution obtainable
-- from f(x, t) by group transformations is of the form u(x, t) = a(x, t)
-- + 1/sqrt(1 + 4 e6 t) exp(e3 - [e5 x + e6 x^2 -  e5^2 t]/[1 + 4 e6 t])
-- f([e^(-e4) (x - 2 e5 t)]/[1 + 4 e6 t] - e1, [e^(-2 e4) t]/[1 + 4 e6 t] - e2)
-- See Peter J. Olver, _Applications of Lie Groups to Differential Equations_,
-- Second Edition, Springer Verlag, 1993, p. 120 (an excellent book).  See also
-- Heat.input
u:= operator('u);
 

                                                          Type: BasicOperator
                                       Time: 0.03 (IN) + 0.02 (OT) = 0.05 sec
D(u(x, t), t) = D(u(x, t), x, 2)
 

   (4)  u  (x,t)= u    (x,t)
         ,2        ,1,1
                                            Type: Equation Expression Integer
                           Time: 0.07 (IN) + 0.05 (EV) + 0.03 (OT) = 0.15 sec
)clear properties u
 
-- Potential equation on a circular disk---a separable PDE
-- => v(r, theta) = a[0] + sum(a[n] r^n cos(n theta), n = 1..infinity)
--                       + sum(b[n] r^n sin(n theta), n = 1..infinity)
v:= operator('v);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
1/r * D(r * D(v(r, theta), r), r) _
        + 1/r**2 * D(v(r, theta), theta, 2) = 0
 

                          2
        v    (r,theta) + r v    (r,theta) + rv  (r,theta)
         ,2,2               ,1,1              ,1
   (6)  -------------------------------------------------= 0
                                 2
                                r
                                            Type: Equation Expression Integer
                           Time: 0.63 (IN) + 0.15 (EV) + 0.10 (OT) = 0.88 sec
)clear properties v
 
-- ---------- Quit ----------
)quit
 

real   9.5
user   3.3
sys    0.3
\end{verbatim}
\section{Operators}
\begin{verbatim}
 
-- ---------- Operators ----------
f(x) == exp(x)
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
g(x) == x**2
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
-- (f + 2 g)(y) => e^y + 2 y^2
(f + 2*g)(y)
 
   There are 31 exposed and 17 unexposed library operations named * 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op *
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named * 
      with argument type(s) 
                               PositiveInteger
                              FunctionCalled g
      
-- (f o g)(y) => e^(y^2)
(f * g)(y)
 
   There are 31 exposed and 17 unexposed library operations named * 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op *
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named * 
      with argument type(s) 
                              FunctionCalled f
                              FunctionCalled g
      
)clear properties f g
 
-- Linear differential operator
DD : LODO(Expression Integer, e +-> D(e, x)) := D()
 

   (3)  D
 Type: LinearOrdinaryDifferentialOperator(Expression Integer,theMap("NIL",1))
               Time: 0.08 (IN) + 0.02 (EV) + 0.15 (OT) + 0.07 (GC) = 0.32 sec
L:= (DD - 1) * (DD + 2)
 

         2
   (4)  D  + D - 2
 Type: LinearOrdinaryDifferentialOperator(Expression Integer,theMap("NIL",1))
                           Time: 0.13 (IN) + 0.10 (EV) + 0.03 (GC) = 0.27 sec
f:= operator('f);
 

                                                          Type: BasicOperator
                                       Time: 0.07 (IN) + 0.02 (OT) = 0.08 sec
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.05 (IN) = 0.05 sec
-- => f'' + f' - 2 f
L(f(x))
 

         ,,       ,
   (7)  f  (x) + f (x) - 2f(x)

                                                     Type: Expression Integer
               Time: 0.53 (IN) + 0.22 (EV) + 0.13 (OT) + 0.07 (GC) = 0.95 sec
-- => g''(y) + g'(y) - 2 g(y)
subst(L(subst(g(y), y = x)), x = y)
 

         ,,       ,
   (8)  g  (y) + g (y) - 2g(y)

                                                     Type: Expression Integer
                           Time: 0.54 (IN) + 0.08 (EV) + 0.10 (OT) = 0.72 sec
-- => 2 A [(1 + z) cos(z^2) - (1 + 2 z^2) sin(z^2)]
subst(L(subst(A * sin(z**2), z = x)), x = z)
 

               2           2                    2
   (9)  (- 4A z  - 2A)sin(z ) + (2A z + 2A)cos(z )
                                                     Type: Expression Integer
               Time: 0.13 (IN) + 0.20 (EV) + 0.07 (OT) + 0.02 (GC) = 0.42 sec
-- Truncated Taylor series operator
T:= (f, xx, a) +-> subst((DD**0)(f(x)), x = a)/factorial(0) * (xx - a)**0 + _
                   subst((DD**1)(f(x)), x = a)/factorial(1) * (xx - a)**1 + _
                   subst((DD**2)(f(x)), x = a)/factorial(2) * (xx - a)**2
 

   (10)
     (f,xx,a)
   +-> 
               0                                 1
       subst(DD (f(x)),x= a)         0   subst(DD (f(x)),x= a)         1
       --------------------- (xx - a)  + --------------------- (xx - a)
            factorial(0)                      factorial(1)
     + 
               2
       subst(DD (f(x)),x= a)         2
       --------------------- (xx - a)
            factorial(2)
                                                      Type: AnonymousFunction
                                                   Time: 0.02 (OT) = 0.02 sec
-- => f(a) + f'(a) (x - a) + f''(a) (x - a)^2/2
T(f, x, a)
 

           2           2  ,,                ,
         (x  - 2a x + a )f  (a) + (2x - 2a)f (a) + 2f(a)

   (11)  -----------------------------------------------
                                2
                                                     Type: Expression Integer
                           Time: 0.50 (IN) + 0.13 (EV) + 0.10 (OT) = 0.73 sec
-- => g(b) + g'(b) (y - b) + g''(b) (y - b)^2/2
T(g, y, b)
 

           2           2  ,,                ,
         (y  - 2b y + b )g  (b) + (2y - 2b)g (b) + 2g(b)

   (12)  -----------------------------------------------
                                2
                                                     Type: Expression Integer
                           Time: 0.18 (IN) + 0.12 (EV) + 0.07 (OT) = 0.37 sec
-- => sin(c) + cos(c) (z - c) - sin(c) (z - c)^2/2
T(sin, z, c)
 

             2           2
         (- z  + 2c z - c  + 2)sin(c) + (2z - 2c)cos(c)
   (13)  ----------------------------------------------
                                2
                                                     Type: Expression Integer
                           Time: 0.18 (IN) + 0.07 (EV) + 0.05 (OT) = 0.30 sec
)clear properties DD L f g T
 
-- Define the binary infix operator ~ so that x ~ y => sqrt(x^2 + y^2)
-- Make it associative: 3 ~ 4 ~ 12 => 13
-- Define the matchfix pair of operators | and | so that | x | => abs(x)
-- ---------- Quit ----------
)quit
 

real   6.8
user   5.8
sys    0.4
\end{verbatim}
\section{Programming and Miscellaneous}
\begin{verbatim}
 
-- ---------- Programming and Miscellaneous ----------
-- How easy is it to substitute x for a + b in the following expression?
-- => (x + c)^2 + (d - x)^2
expr:= (a + b + c)**2 + (d - a - b)**2
 

         2                   2                  2            2
   (1)  d  + (- 2b - 2a)d + c  + (2b + 2a)c + 2b  + 4a b + 2a
                                                     Type: Polynomial Integer
               Time: 0.23 (IN) + 0.02 (EV) + 0.18 (OT) + 0.10 (GC) = 0.53 sec
subst(expr, a + b = x)
 
 
   >> Error detected within library code:
   left hand side must be a single kernel

initial (2) -> 
real   3.2
user   1.8
sys    0.2

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

Mon Jan  5 00:26:00 MET 1998
anne
% axiom
Axiom Computer Algebra System (Release 2.1)
Digital Unix on DEC Alpha

(AXIOM Sockets) The AXIOM server number is undefined.
-----------------------------------------------------------------------------
   Issue )copyright to view copyright notices.
   Issue )summary for a summary of useful system commands.
   Issue )quit to leave AXIOM and return to shell.
-----------------------------------------------------------------------------
 
initial (1) -> -- ----------[ A x i o m ]----------
-- ---------- Initialization ----------
)set messages autoload off
 
)set messages time on
 
)set quit unprotected
 
)set streams calculate 7
 
-- ---------- Programming and Miscellaneous ----------
-- How easy is it to substitute x for a + b in the following expression?
-- => (x + c)^2 + (d - x)^2
expr:= (a + b + c)**2 + (d - a - b)**2
 

         2                   2                  2            2
   (1)  d  + (- 2b - 2a)d + c  + (2b + 2a)c + 2b  + 4a b + 2a
                                                     Type: Polynomial Integer
               Time: 0.25 (IN) + 0.03 (EV) + 0.15 (OT) + 0.07 (GC) = 0.50 sec
subst(expr, b = x - a)
 

          2                   2    2
   (2)  2x  + (- 2d + 2c)x + d  + c
                                                     Type: Expression Integer
               Time: 0.38 (IN) + 0.05 (EV) + 0.17 (OT) + 0.12 (GC) = 0.72 sec
)clear properties expr
 
-- How easy is it to substitute r for sqrt(x^2 + y^2) in the following
-- expression? => x/r
x/sqrt(x**2 + y**2)
 

             x
   (3)  ----------
         +-------+
         | 2    2
        \|y  + x
                                                     Type: Expression Integer
                           Time: 0.30 (IN) + 0.07 (EV) + 0.12 (OT) = 0.48 sec
subst(%, sqrt(x**2 + y**2) = r)
 

        x
   (4)  -
        r
                                                     Type: Expression Integer
                                       Time: 0.15 (IN) + 0.02 (EV) = 0.17 sec
-- Change variables so that the following transcendental expression is
-- converted into a rational expression   [Vernor Vinge]
-- => (r - 1)^4 (u^4 - r u^3 - r^3 u + r u + r^4)/[u^4 (2 r - 1)^2]
q:= (1/r**4 + 1/(r**2 - 2*r*cos(t) + 1)**2 _
           - 2*(r - cos(t))/(r**2 * (r**2 - 2*r*cos(t) + 1)**(3/2))) / _
    (1/r**4 + 1/(r - 1)**4 - 2*(r - 1)/(r**2 * (r**2 - 2*r + 1)**(3/2)))
 

   (5)
              6      5      4      3     2       2
           (4r  - 16r  + 24r  - 16r  + 4r )cos(t)
         + 
                7      6      5      4      3      2                 8     7
           (- 4r  + 16r  - 28r  + 32r  - 28r  + 16r  - 4r)cos(t) + 2r  - 8r
         + 
              6      5      4      3     2
           14r  - 16r  + 15r  - 12r  + 8r  - 4r + 1
      *
          +-----------+ +--------------------+
          | 2           |               2
         \|r  - 2r + 1 \|- 2r cos(t) + r  + 1
     + 
                7      6      5      4     3       2
           (- 4r  + 16r  - 24r  + 16r  - 4r )cos(t)
         + 
              8      7      6      5      4     3     2            9     8
           (6r  - 24r  + 38r  - 32r  + 18r  - 8r  + 2r )cos(t) - 2r  + 8r
         + 
                7      6      5     4     3
           - 14r  + 16r  - 14r  + 8r  - 2r
      *
          +-----------+
          | 2
         \|r  - 2r + 1
  /
                6      5      4      3     2       2
             (8r  - 16r  + 24r  - 16r  + 4r )cos(t)
           + 
                  7      6      5      4      3      2                 8     7
             (- 8r  + 16r  - 32r  + 32r  - 28r  + 16r  - 4r)cos(t) + 2r  - 4r
           + 
                6      5      4      3     2
             10r  - 12r  + 15r  - 12r  + 8r  - 4r + 1
        *
            +-----------+
            | 2
           \|r  - 2r + 1
       + 
              7      6      5     4       2
         (- 8r  + 24r  - 24r  + 8r )cos(t)
       + 
            8      7      6      5      4     3            9     8      7      6
         (8r  - 24r  + 32r  - 32r  + 24r  - 8r )cos(t) - 2r  + 6r  - 10r  + 14r
       + 
              5      4     3     2
         - 14r  + 10r  - 6r  + 2r
    *
        +--------------------+
        |               2
       \|- 2r cos(t) + r  + 1
                                                     Type: Expression Integer
               Time: 0.61 (IN) + 0.28 (EV) + 0.28 (OT) + 0.07 (GC) = 1.25 sec
subst(q, cos(t) = (r**2 - u**2 + 1)/(2*r))
 

   (6)
                                                                   +-----------+
            4     3     2           4    8     7     6     5    4  | 2
         ((r  - 4r  + 6r  - 4r + 1)u  + r  - 4r  + 6r  - 4r  + r )\|r  - 2r + 1
      *
          +--+
          | 2
         \|u
     + 
              5     4     3     2      4       7     6     5     3     2      2
         ((- r  + 4r  - 6r  + 4r  - r)u  + (- r  + 4r  - 5r  + 5r  - 4r  + r)u )
      *
          +-----------+
          | 2
         \|r  - 2r + 1
  /
                                        +-----------+
              4     3     2           4 | 2
           (2r  - 4r  + 6r  - 4r + 1)u \|r  - 2r + 1
         + 
                5     4     3     2  4
           (- 2r  + 6r  - 6r  + 2r )u
    *
        +--+
        | 2
       \|u
                                                     Type: Expression Integer
                           Time: 0.15 (IN) + 0.17 (EV) + 0.12 (OT) = 0.43 sec
(rule sqrt(x**2) == x)(%)
 

   (7)
           4     3     2           4       5     4     3     2      3
         (r  - 4r  + 6r  - 4r + 1)u  + (- r  + 4r  - 6r  + 4r  - r)u
       + 
             7     6     5     3     2          8     7     6     5    4
         (- r  + 4r  - 5r  + 5r  - 4r  + r)u + r  - 4r  + 6r  - 4r  + r
    *
        +-----------+
        | 2
       \|r  - 2r + 1
  /
                                  +-----------+
        4     3     2           4 | 2                  5     4     3     2  4
     (2r  - 4r  + 6r  - 4r + 1)u \|r  - 2r + 1  + (- 2r  + 6r  - 6r  + 2r )u
                                                     Type: Expression Integer
                           Time: 0.07 (IN) + 0.93 (EV) + 0.12 (OT) = 1.12 sec
(rule sqrt(r**2 - 2*r + 1) == r - 1)(%)
 

   (8)
         4     3     2           4       5     4     3     2      3
       (r  - 4r  + 6r  - 4r + 1)u  + (- r  + 4r  - 6r  + 4r  - r)u
     + 
           7     6     5     3     2          8     7     6     5    4
       (- r  + 4r  - 5r  + 5r  - 4r  + r)u + r  - 4r  + 6r  - 4r  + r
  /
        2           4
     (4r  - 4r + 1)u
                                                     Type: Expression Integer
                           Time: 0.03 (IN) + 0.47 (EV) + 0.07 (OT) = 0.57 sec
map(factor, % :: Fraction Polynomial Integer)
 

               4  4      3       3          4
        (r - 1) (u  - r u  + (- r  + r)u + r )
   (9)  --------------------------------------
                              2 4
                      (2r - 1) u
                                   Type: Fraction Factored Polynomial Integer
               Time: 0.17 (IN) + 0.25 (EV) + 0.03 (OT) + 0.02 (GC) = 0.47 sec
-- Establish a rule to symmetrize a differential operator:   [Stanly Steinberg]
-- f g'' + f' g' -> (f g')'
f:= operator('f);
 

                                                          Type: BasicOperator
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
g:= operator('g);
 

                                                          Type: BasicOperator
                                                   Time: 0.03 (IN) = 0.03 sec
symmetrize:= rule _
   f(x)*D(g(x), x, 2) + D(f(x), x)*D(g(x), x) == D(f(x)*D(g(x), x), x)
 

              ,,       ,    ,
   (12)  f(x)g  (x) + f (x)g (x) + %B == 'D('f(x)'D('g(x),x),x) + %B

                        Type: RewriteRule(Integer,Integer,Expression Integer)
                           Time: 0.62 (IN) + 0.05 (EV) + 0.07 (OT) = 0.73 sec
q:= f(x)*D(g(x), x, 2) + D(f(x), x)*D(g(x), x)
 

              ,,       ,    ,
   (13)  f(x)g  (x) + f (x)g (x)

                                                     Type: Expression Integer
                           Time: 0.03 (IN) + 0.03 (EV) + 0.05 (OT) = 0.12 sec
symmetrize q
 
   There are no library operations named %diff 
      Use HyperDoc Browse or issue
                               )what op %diff
      to learn if there is any operation containing " %diff " in its 
      name.
 
   Cannot find a definition or applicable library operation named %diff
      with argument type(s) 
                             Expression Integer
                                Variable %%01
                                 Variable x
      
-- => 2 (f g')' + f g
symmetrize 2*q + f(x)*g(x)
 

               ,,        ,    ,
   (14)  2f(x)g  (x) + 2f (x)g (x) + f(x)g(x)

                                                     Type: Expression Integer
                                       Time: 0.05 (IN) + 0.02 (OT) = 0.07 sec
)clear properties f g q
 
-- Infinite lists: [1 2 3 4 5 ...] * [1 3 5 7 9 ...]
-- => [1 6 15 28 45 66 91 ...]
l1:= [i for i in 1..];
 

                                                 Type: Stream PositiveInteger
                                       Time: 0.02 (IN) + 0.03 (OT) = 0.05 sec
l2:= [2*i-1 for i in 1..];
 

                                                         Type: Stream Integer
                                       Time: 0.03 (IN) + 0.02 (EV) = 0.05 sec
[l1.i*l2.i for i in 1..]
 

   (17)  [1,6,15,28,45,66,91,...]
                                                         Type: Stream Integer
                                       Time: 0.02 (IN) + 0.02 (OT) = 0.03 sec
)clear properties l1 l2
 
-- Write a simple program to compute Legendre polynomials
p(n, x) == 1/(2**n*factorial(n)) * D((x**2 - 1)**n, x, n)
 
                                                                   Type: Void
                                                                  Time: 0 sec
-- p[0](x) = 1,   p[1](x) = x,   p[2](x) = (3 x^2 - 1)/2,
-- p[3](x) = (5 x^3 - 3 x)/2,   p[4](x) = (35 x^4 - 30 x^2 + 3)/8
for i in 0..4 repeat _
  (output(""); _
   output(concat(["p(", string(i), ", x) = "])); _
   output(p(i, x)) )
 
   Compiling function p with type (NonNegativeInteger,Variable x) -> 
      Polynomial Fraction Integer 

   p(0, x) =
   1

   p(1, x) =
   x

   p(2, x) =
   3  2   1
   - x  - -
   2      2

   p(3, x) =
   5  3   3
   - x  - - x
   2      2

   p(4, x) =
   35  4   15  2   3
   -- x  - -- x  + -
    8       4      8
                                                                   Type: Void
                           Time: 0.20 (IN) + 0.08 (EV) + 0.12 (OT) = 0.40 sec
-- p[4](1) = 1
eval(p(4, x), x = 1)
 
   Compiling function p with type (PositiveInteger,Variable x) -> 
      Polynomial Fraction Integer 

   (20)  1
                                            Type: Polynomial Fraction Integer
                           Time: 0.63 (IN) + 0.02 (EV) + 0.12 (OT) = 0.77 sec
-- Now, perform the same computation using a recursive definition
pp(0, x) == 1
 
                                                                   Type: Void
                                                   Time: 0.02 (OT) = 0.02 sec
pp(1, x) == x
 
                                                                   Type: Void
                                                                  Time: 0 sec
pp(n, x) == ((2*n - 1)*x*pp(n - 1, x) - (n - 1)*pp(n - 2, x))/n
 
                                                                   Type: Void
                                                                  Time: 0 sec
for i in 0..4 repeat _
  (output(""); _
   output(concat(["pp(", string(i), ", x) = "])); _
   output(pp(i, x)) )
 
   Compiling function pp with type (Integer,Variable x) -> Polynomial 
      Fraction Integer 

   pp(0, x) =
   1

   pp(1, x) =
   x

   pp(2, x) =
   3  2   1
   - x  - -
   2      2

   pp(3, x) =
   5  3   3
   - x  - - x
   2      2

   pp(4, x) =
   35  4   15  2   3
   -- x  - -- x  + -
    8       4      8
                                                                   Type: Void
                           Time: 0.33 (IN) + 0.03 (EV) + 0.05 (OT) = 0.42 sec
pp(4, 1)
 
   Compiling function pp with type (Integer,Integer) -> Fraction 
      Integer 

+++ |*2;pp;1;initial| redefined

   (25)  1
                                                       Type: Fraction Integer
                                       Time: 0.08 (IN) + 0.05 (OT) = 0.13 sec
)clear properties p pp
 
   Compiled code for p has been cleared.
   Compiled code for pp has been cleared.
-- Iterative computation of Fibonacci numbers
myfib(n) == ( _
            local i, j, k, f; _
            if n < 0 then _
               error("undefined") _
            else if n < 2 then _
               n _
            else _
              (j:= 0,   k:= 1, _
               for i in 2..n repeat _
                 (f:= j + k,   j:= k,   k:= f), _
               return(f)));
 
                                                                   Type: Void
                                                   Time: 0.02 (IN) = 0.02 sec
-- Convert the function into FORTRAN syntax
outputAsFortran(myfib)
 
   There are 4 exposed and 0 unexposed library operations named 
      outputAsFortran having 1 argument(s) but none was determined to 
      be applicable. Use HyperDoc Browse, or issue
                         )display op outputAsFortran
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
 
   Cannot find a definition or applicable library operation named 
      outputAsFortran with argument type(s) 
                            FunctionCalled myfib
      
-- Create a list of the first 11 values of the function.
[myfib(i) for i in 0..10]
 
   Compiling function myfib with type NonNegativeInteger -> Any 

   (27)  [0,1,1,2,3,5,8,13,21,34,55]
                                                               Type: List Any
                                       Time: 0.22 (IN) + 0.07 (OT) = 0.28 sec
)clear properties myfib
 
   Compiled code for myfib has been cleared.
-- Define the function p(x) = x^2 - 4 x + 7 such that p(lambda) = 0 for
-- lambda = 2 +- i sqrt(3) and p(A) = [[0 0], [0 0]] for A = [[1 -2], [2 3]]
-- (the lambda are the eigenvalues and p(x) is the characteristic polynomial of
-- A)   [Johnson and Reiss, p. 184]
p(x) == x**2 - 4*x + 7
 
                                                                   Type: Void
                                                                  Time: 0 sec
p(2 + %i*sqrt(3))
 
   Compiling function p with type Expression Complex Integer -> 
      Expression Complex Integer 

   (29)  0
                                             Type: Expression Complex Integer
               Time: 0.43 (IN) + 0.08 (EV) + 0.12 (OT) + 0.03 (GC) = 0.67 sec
p(matrix([[1, -2], [2, 3]]))
 
   There are 11 exposed and 5 unexposed library operations named + 
      having 2 argument(s) but none was determined to be applicable. 
      Use HyperDoc Browse, or issue
                                )display op +
      to learn more about the available operations. Perhaps 
      package-calling the operation or using coercions on the arguments
      will allow you to apply the operation.
   Cannot find a definition or applicable library operation named + 
      with argument type(s) 
                               Matrix Integer
                               PositiveInteger
      
   AXIOM will attempt to step through and interpret the code.

         +0  0+
   (30)  |    |
         +0  0+
                                                Type: SquareMatrix(2,Integer)
               Time: 0.22 (IN) + 0.03 (EV) + 0.03 (OT) + 0.05 (GC) = 0.33 sec
)clear properties p
 
   Compiled code for p has been cleared.
-- Define a function to be the result of a calculation
-log(x**2 - 2**(1/3)*x + 2**(2/3))/(6 * 2**(2/3)) _
   + atan((2*x - 2**(1/3))/(2**(1/3) * sqrt(3))) / (2**(2/3) * sqrt(3)) _
   + log(x + 2**(1/3))/(3 * 2**(2/3))
 

   (31)
                                                                 3+-+2      +-+
      +-+    3+-+2    3+-+    2      +-+    3+-+              (x \|2   - 1)\|3
   - \|3 log(\|2   - x\|2  + x ) + 2\|3 log(\|2  + x) + 6atan(-----------------)
                                                                      3
   -----------------------------------------------------------------------------
                                      3+-+2 +-+
                                     6\|2  \|3
                                                     Type: Expression Integer
                           Time: 0.65 (IN) + 0.55 (EV) + 0.13 (OT) = 1.33 sec
function(%, f, x)
 

   (32)  f
                                                                 Type: Symbol
                                       Time: 0.08 (IN) + 0.03 (EV) = 0.12 sec
expr:= f(y)
 
   Compiling function f with type Variable y -> Expression Integer 

   (33)
                                                                 3+-+2      +-+
      +-+    3+-+2    3+-+    2      +-+    3+-+              (y \|2   - 1)\|3
   - \|3 log(\|2   - y\|2  + y ) + 2\|3 log(\|2  + y) + 6atan(-----------------)
                                                                      3
   -----------------------------------------------------------------------------
                                      3+-+2 +-+
                                     6\|2  \|3
                                                     Type: Expression Integer
                           Time: 0.23 (IN) + 0.22 (EV) + 0.17 (OT) = 0.62 sec
-- Display the top-level structure of a nasty expression, hiding the
-- lower-level details.
name(mainKernel(expr))
 

   (34)  log
                                                                 Type: Symbol
                                                                  Time: 0 sec
)clear properties expr f
 
   Compiled code for f has been cleared.
-- Convert the following expression into TeX or LaTeX
y = sqrt((exp(x**2) + exp(-x**2))/(sqrt(3)*x - sqrt(2)))
 

             +-------------+
             |   2        2
             |  x      - x
             |%e   + %e
   (35)  y=  |-------------
             |   +-+    +-+
            \| x\|3  - \|2
                                            Type: Equation Expression Integer
                           Time: 0.20 (IN) + 0.07 (EV) + 0.05 (OT) = 0.32 sec
outputAsTex(%)
 
$$
y={\sqrt {{{{e \sp {x \sp 2}}+{e \sp {\left( -{x \sp 2} 
\right)}}}
\over {{x \  {\sqrt {3}}} -{\sqrt {2}}}}}} 
\leqno(36)
$$

                                                                   Type: Void
                                       Time: 0.07 (IN) + 0.03 (EV) = 0.10 sec
-- ---------- Quit ----------
)quit
 

real   29.9
user   14.9
sys    0.7
\end{verbatim}
\section{Makefile}
<<*>>=
TANGLE=/usr/local/bin/NOTANGLE
WEAVE=/usr/local/bin/NOWEAVE
LATEX=/usr/bin/latex
LISP=/sei/lisp
MAKEINDEX=/usr/bin/makeindex

all: code doc run

code: wester.pamphlet
	${TANGLE} -Rcode wester.pamphlet >wester.lisp

doc:
	${WEAVE} -t8 -delay wester.pamphlet >wester.tex
	${LATEX} wester.tex 2>/dev/null 1>/dev/null
	@{MAKEINDEX} wester.idx
	${LATEX} wester.tex 2>/dev/null 1>/dev/null

run:


remake:
	${TANGLE} -t8 wester.pamphlet >Makefile.wester

@
\eject
\begin{thebibliography}{99}
\bibitem{1} Wester, Michael J. (ed) "Computer Algebra Systems"
Wiley 1999 ISBN 0-471-98353-5
\end{thebibliography}
\printindex
\end{document}

\start
Date: Wed, 7 Dec 2005 15:27:04 -0500
From: Bill Page
To: Martin Rubey
Subject: RE: Lisp Packages and Axiom

Martin,

ON Wednesday, December 07, 2005 1:47 PM you wrote:
>
> I'd just would like to drop a note that in any case the
> Algebra should stay/become as disconnected from Lisp as
> possible (and sensible).

I agree. The proper language for Algebra code is Aldor and
Spad.

The support for Lisp and Boot on MathAction is focused on
Axiom developers (the people who maintain and extended the
interpreter and the compilers) - not those people who I call
Axiom library programmers (who *use* the interpreter and
the compilers). For them MathAction already has {axiom}
{spad} and {aldor}.

>... Introducing more Lisp at the Algebra level would
> definitively be counterproductive to this goal [of
> moving to Aldor].

So far as I know there is no Algebra code as such at the
Lisp or even Boot levels in Axiom. In some cases the Spad
code does make some assumptions about the underlying
representation of the data and by so doing it can take
advantage of functions already implemented in Lisp (or
some external library accessible to Lisp).

Both Lisp and Boot however are used to implement Spad
itself.

>
> The issue might be different for the interpreter,
> although I doubt it.

Similarly Lisp and Boot are used to implement the
interpreter itself, but this is at a different functional
level than the algebra.

> ...
> A very different point is to write functionality enabling
> the use of existing lisp / c / python / whatever code as
> packages in Axiom, just as I did for polymake.
>

Doing some careful interface programming at the Lisp level
would make it possible to directly use packages and external
libraries like polymake instead of having to communicate
through files and sessions. Depending on the particular
application and the data to be passed, such an high
performanc interface might be critical.

For example, we have available to Axiom the complete Lisp
code for exact real arithmetic from the package author.
One approach to providing exact reals in Axiom would be
to incorporate and interface to these routines. This
interface would be encapsulated as an Axiom domain, and
mostly written in Spad and callable from both Spad and
the Axiom interpreter. Because for practical purposes we
may be very concerned about performance, using the Lisp
interface for this might be preferable to re-writing
the algorithms using Spad/Aldor. The situation is very
similar to the way that gcl depends on the gmp math
library for infinite precision integer arithmetic. And
of course it is also desirable to assimilate rather than
re-write because of limited resources.

\start
Date: Wed, 7 Dec 2005 16:07:50 -0500
From: Bill Page
To: Tim Daly
Subject: RE: Lisp Packages and Axiom

On Wednesday, December 07, 2005 3:46 PM Tim Daly (root) wrote:

> ...
> the lisp package level is the wrong place to segment the algebra.

I agree.

>
> bill and I (long ago) had an ongoing discussion of the problem
> of organizing the algebra but it's hard on so many levels.
>

My current philosophy is that the best way to organize Axiom's
algebra is to let it organize itself. To do this we have to think
about the best ways to "navigate" quickly and easily through such
a large complex structures as the Axiom algebra library. Once that
is done, it will be possible for many people to gain experience
and an appreciation for this structure.

I think the we already have pretty good tools to do that on our
desktops - your web browser. What we have to do is make more and
more of Axiom's algebra code accessible and hyperlinked. Although
Axiom's library is pretty big, it is really *not so big* by the
standards of the web. And a lot of people are gaining a lot of
experience with what information is available and how it is
structured over the web.

Maybe some kind of graphical visualization tools might help
(such the TouchGraph interface on the Axiom Portal), but I think
that just like in the case of the web, such graphics, while they
are pretty and grab our attention, in the end they are not all
that helpful.

I now think organizing Axiom's library should not be a constraining
kind of "classification" exercise, but rather one that facilitates
it's free and open development by increasing (by several orders of
magnitude, if possible) the accessibiliy of the material.

\start
Date: 07 Dec 2005 22:28:01 +0100
From: Martin Rubey
To: Cliff Yapp
Subject: Re: Autocomplete?

Cliff Yapp writes:

> Has anyone looked at incorporating autocomplete into Axiom, 

start axiom on the console, type mat and hit tab a few times...

(unfortunately, not present in shell mode under emacs)

\start
Date: Wed, 7 Dec 2005 17:23:11 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: Autocomplete?

clef does autocompletion and it should work.
there is probably a missing file.

\start
Date: 07 Dec 2005 22:34:07 +0100
From: Martin Rubey
To: Bill Page
Subject: re: Lisp Packages and Axiom

Bill Page writes:

> My current philosophy is that the best way to organize Axiom's
> algebra is to let it organize itself. 

Yes!

> To do this we have to think about the best ways to "navigate" quickly and
> easily through such a large complex structures as the Axiom algebra
> library. 

HyperDoc does this very well. Unfortunately, HyperDoc <> MathAction <>
ALLPROSE. But it should be. 

* the pages should be generated by ALLPROSE
* the rendering should be done by a webbrowser
* the result should incorporate the features of HyperDoc

> Maybe some kind of graphical visualization tools might help (such the
> TouchGraph interface on the Axiom Portal), but I think that just like in the
> case of the web, such graphics, while they are pretty and grab our attention,
> in the end they are not all that helpful.

Exactly.

\start
Date: 07 Dec 2005 22:54:21 +0100
From: Martin Rubey
To: list
Subject: userinfo variable

Dear Tim, *

incidently, two unrelated persons uttered the same wish today, and I was also
thinking about it quite a bit:

in mupad, there is a variable "userinfo" that can be set to some integer,
depending on which mupad spits out more or less info on what it is doing. For
example, it would say something like

"trying to match pattern xyz"

when doing integration, or

"trying series expansion"

when doing a limit calculation. Of course, this is similar but different to
)set me bo on.

How do you think it would be possible to incorporate such a feature? Of course,
the text that Axiom is supposed to print during the calculations needs to be
constructed in the packages themselves. But I do not know how to test an
environment variable from Algebra code. Furthermore, one would have to be
careful that under normal operation, i.e., userinfo switched off, not too much
cpu-time gets eaten...

\start
Date: Wed, 7 Dec 2005 14:18:04 -0800 (PST)
From: Cliff Yapp
To: Tim Daly, Martin Rubey
Subject: Re: Autocomplete?

--- Tim Daly wrote:

> clef does autocompletion and it should work.
> there is probably a missing file.

My bad.  I didn't have an axiom system handy and I guess I was thinking
about readline and GPL issues.  <twenty lashes with wet noodle for
sillyness>

\start
Date: Wed, 7 Dec 2005 18:08:10 -0500
From: Tim Daly
To: list
Subject: hyperlinked algebra

i've hacked src/doc/endpaper.pamphlet to add hyperlinks.
most of the links go to catdef.spad.dvi because they are
categories that live there. i don't know how to implement 
#tags in latex yet.

not everything goes to catdef. ffield goes to ffcat.spad.dvi
and the data structures tend to go to aggcat but others can be
found (e.g. matcat).

i tried to use URLs to the wiki but xdvi can't handle them.
to use this try:

1) (clip the latex to a file called endpaper.pamphlet)
   since this is really just a latex file we don't need to weave it...
2) latex endpaper.pamphet
3) latex endpaper.pamphet
4) cp endpaper.dvi mnt/linux/doc/src/algebra
5) cd endpaper.dvi mnt/linux/doc/src/algebra
6) xdvi endpaper.dvi
7) click on a link...

now if some ambitious soul could start doing that for the rest
of the algebra it would win big.


===============================================================
\documentclass{book}
%\usepackage{../../src/scripts/tex/axiom}
\usepackage{hyperref}
\usepackage{pstricks}
\usepackage{pst-node}
\begin{document}
\title{endpapers}
\author{Timothy Daly}
\maketitle
\tableofcontents
\vfill
\eject
\section{Basic Algebra Hierarchy Diagram}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 1 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.
{\hbox{\hskip 4.0cm}}
% SETCAT SetCategory
{\psframebox{{\rnode{setcat}{\href{catdef.spad.dvi}{setcat}}}}}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\hbox{\hskip 1.0cm}}
{\vbox{\vskip 1.0cm}}
% ABELSG AbelianSemiGroup
{\psframebox{{\rnode{abelsg}{\href{catdef.spad.dvi}{abelsg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{abelsg}
{\hbox{\hskip 0.1cm}}
% SGROUP SemiGroup
{\psframebox{{\rnode{sgroup}{\href{catdef.spad.dvi}{sgroup}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{sgroup}
{\hbox{\hskip 0.2cm}}
% ORDSET OrderedSet
{\psframebox{{\rnode{ordset}{\href{catdef.spad.dvi}{ordset}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{ordset}
{\hbox{\hskip 4.0cm}}
% FINITE Finite
{\psframebox{{\rnode{finite}{\href{catdef.spad.dvi}{finite}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{finite}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.0cm}}
% ABELMON AbelianMonoid
{\psframebox{{\rnode{abelmon}{\href{catdef.spad.dvi}{abelmon}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelsg}{abelmon}
% MONOID Monoid
{\psframebox{{\rnode{monoid}{\href{catdef.spad.dvi}{monoid}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{sgroup}{monoid}
{\hbox{\hskip 1.5cm}}
% ORDFIN OrderedFinite
{\psframebox{{\rnode{ordfin}{\href{catdef.spad.dvi}{ordfin}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ordset}{ordfin}
\ncLine[nodesep=3pt,linestyle=solid]{finite}{ordfin}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.0cm}}
% CABMON CancellationAbelianMonoid
{\psframebox{{\rnode{cabmon}{\href{catdef.spad.dvi}{cabmon}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelmon}{cabmon}
{\hbox{\hskip 2.0cm}}
% OASGP OrderedAbelianSemiGroup
{\psframebox{{\rnode{oasgp}{\href{catdef.spad.dvi}{oasgp}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelmon}{oasgp}
\ncLine[nodesep=3pt,linestyle=solid]{ordset}{oasgp}
{\hbox{\hskip 0.2cm}}
% GROUP Group
{\hbox{\hskip 0.1cm}}
{\psframebox{{\rnode{group}{\href{catdef.spad.dvi}{group}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{monoid}{group}
{\hbox{\hskip 0.55cm}}
% ORDMON OrderedMonoid
{\psframebox{{\rnode{ordmon}{\href{catdef.spad.dvi}{ordmon}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ordset}{ordmon}
\ncLine[nodesep=3pt,linestyle=solid]{monoid}{ordmon}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.6cm}}
{\hbox{\hskip 3.6cm}}
% OAMON OrderedAbelianMonoid
{\psframebox{{\rnode{oamon}{\href{catdef.spad.dvi}{oamon}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{oasgp}{oamon}
\ncLine[nodesep=3pt,linestyle=solid]{abelmon}{oamon}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 6
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.5cm}}
% OCAMON OrderedCancellationAbelianMonoid
{\psframebox{{\rnode{ocamon}{\href{catdef.spad.dvi}{ocamon}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{oamon}{ocamon}
\ncLine[nodesep=3pt,linestyle=solid]{cabmon}{ocamon}
{\hbox{\hskip 2.2cm}}
% ABELGRP AbelianGroup
{\psframebox{{\rnode{abelgrp}{\href{catdef.spad.dvi}{abelgrp}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{cabmon}{abelgrp}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 7
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.875cm}}
% OAMONS OrderedAbelianMonoidSup
{\psframebox{{\rnode{oamons}{\href{catdef.spad.dvi}{oamons}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ocamon}{oamons}
{\hbox{\hskip 0.9cm}}
% RNG Rng
{\psframebox{{\rnode{rng}{\href{catdef.spad.dvi}{rng}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelgrp}{rng}
\ncLine[nodesep=3pt,linestyle=solid]{sgroup}{rng}
{\hbox{\hskip 0.1cm}}
% LMODULE LeftModule
{\psframebox{{\rnode{lmodule}{\href{catdef.spad.dvi}{lmodule}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelgrp}{lmodule}
% RMODULE RightModule
{\psframebox{{\rnode{rmodule}{\href{catdef.spad.dvi}{rmodule}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelgrp}{rmodule}
{\hbox{\hskip 1.7cm}}
% OAGROUP OrderedAbelianGroup
{\psframebox{{\rnode{oagroup}{\href{catdef.spad.dvi}{oagroup}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{abelgrp}{oagroup}
\ncLine[nodesep=3pt,linestyle=solid]{ocamon}{oagroup}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 8
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.0cm}}
{\hbox{\hskip 0.7cm}}
% RING Ring
{\psframebox{{\rnode{ring}{\href{catdef.spad.dvi}{ring}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{lmodule}{ring}
\ncLine[nodesep=3pt,linestyle=solid]{rng}{ring}
\ncLine[nodesep=3pt,linestyle=solid]{monoid}{ring}
{\hbox{\hskip 4.2cm}}
% BMODULE BiModule
{\psframebox{{\rnode{bmodule}{\href{catdef.spad.dvi}{bmodule}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{lmodule}{bmodule}
\ncLine[nodesep=3pt,linestyle=solid]{rmodule}{bmodule}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.2cm}}
{\hbox{\hskip 4.5cm}}
% LINEXP LinearlyExplicitRingOver
{\psframebox{{\rnode{linexp}{\href{catdef.spad.dvi}{linexp}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{linexp}
{\hbox{\hskip 1.3cm}}
% MODULE Module
{\psframebox{{\rnode{module}{\href{catdef.spad.dvi}{module}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bmodule}{module}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 10
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\hbox{\hskip 5.0cm}}
% FLINEXP FullyLinearlyExplicitRingOver
{\psframebox{{\rnode{flinexp}{\href{catdef.spad.dvi}{flinexp}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{linexp}{flinexp}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 11
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\hbox{\hskip 7.7cm}}
% VSPACE VectorSpace
{\psframebox{{\rnode{vspace}{\href{catdef.spad.dvi}{vspace}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{module}{vspace}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 12
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.2cm}}
{\hbox{\hskip 0.7cm}}
% DIFRING DifferentialRing
{\psframebox{{\rnode{difring}{\href{catdef.spad.dvi}{difring}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{difring}
{\hbox{\hskip 0.4cm}}
% CHARNZ CharacteristicNonZero
{\psframebox{{\rnode{charnz}{\href{catdef.spad.dvi}{charnz}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{charnz}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 13
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PDRING PartialDifferentialRing
{\psframebox{{\rnode{pdring}{\href{catdef.spad.dvi}{pdring}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{pdring}
{\hbox{\hskip 0.6cm}}
% CHARZ CharacteristicZero
{\psframebox{{\rnode{charz}{\href{catdef.spad.dvi}{charz}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{charz}
{\hbox{\hskip 1.0cm}}
% ALGEBRA Algebra
{\psframebox{{\rnode{algebra}{\href{catdef.spad.dvi}{algebra}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{algebra}
\ncLine[nodesep=3pt,linestyle=solid]{module}{algebra}
\ncLine[nodesep=3pt,linestyle=solid]{charnz}{algebra}
% ENTIRER EntireRing
{\psframebox{{\rnode{entirer}{\href{catdef.spad.dvi}{entirer}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bmodule}{entirer}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{entirer}
% COMRING CommutativeRing
{\psframebox{{\rnode{comring}{\href{catdef.spad.dvi}{comring}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bmodule}{comring}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{comring}
% ORDRING OrderedRing
{\psframebox{{\rnode{ordring}{\href{catdef.spad.dvi}{ordring}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ring}{ordring}
\ncLine[nodesep=3pt,linestyle=solid]{oagroup}{ordring}
\ncLine[nodesep=3pt,linestyle=solid]{ordmon}{ordring}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 14
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.8cm}}
{\hbox{\hskip 2.1cm}}
% DIFEXT DifferentialExtension
{\psframebox{{\rnode{difext}{\href{catdef.spad.dvi}{difext}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{pdring}{difext}
\ncLine[nodesep=3pt,linestyle=solid]{difring}{difext}
\ncLine[nodesep=3pt,linestyle=solid]{charz}{difext}
\ncLine[nodesep=3pt,linestyle=solid]{charnz}{difext}
{\hbox{\hskip 2.0cm}}
% DIVRING DivisionRing
{\psframebox{{\rnode{divring}{\href{catdef.spad.dvi}{divring}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{algebra}{divring}
\ncLine[nodesep=3pt,linestyle=solid]{entirer}{divring}
% INTDOM IntegralDomain
{\psframebox{{\rnode{intdom}{\href{catdef.spad.dvi}{intdom}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{algebra}{intdom}
\ncLine[nodesep=3pt,linestyle=solid]{comring}{intdom}
\ncLine[nodesep=3pt,linestyle=solid]{entirer}{intdom}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 15
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.2cm}}
{\hbox{\hskip 7.3cm}}
% GCDDOM GcdDomain
{\psframebox{{\rnode{gcddom}{\href{catdef.spad.dvi}{gcddom}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{intdom}{gcddom}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 16
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.2cm}}
{\hbox{\hskip 5.4cm}}
% UFD UniqueFactorizationDomain
{\psframebox{{\rnode{ufd}{\href{catdef.spad.dvi}{ufd}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{gcddom}{ufd}
{\hbox{\hskip 2.5cm}}
% PID PrincipalIdealDomain
{\psframebox{{\rnode{pid}{\href{catdef.spad.dvi}{pid}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{gcddom}{pid}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 17
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.2cm}}
{\hbox{\hskip 5.0cm}}
% PFECAT PolynomialFactorizationExplicit
{\psframebox{{\rnode{pfecat}{\href{catdef.spad.dvi}{pfecat}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ufd}{pfecat}
{\hbox{\hskip 2.0cm}}
% EUCDOM EuclideanDomain
{\psframebox{{\rnode{eucdom}{\href{catdef.spad.dvi}{eucdom}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{pid}{eucdom}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.2cm}}
{\hbox{\hskip 7.0cm}}
% FIELD Field
{\psframebox{{\rnode{field}{\href{catdef.spad.dvi}{field}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ufd}{field}
\ncLine[nodesep=3pt,linestyle=solid]{eucdom}{field}
\ncLine[nodesep=3pt,linestyle=solid]{divring}{field}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\hbox{\hskip 5.0cm}}
% FPC FieldOfPrimeCharacteristic
{\psframebox{{\rnode{fpc}{\href{ffcat.spad.dvi}{fpc}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{field}{fpc}
\ncLine[nodesep=3pt,linestyle=solid]{charnz}{fpc}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\hbox{\hskip 9.7cm}}
% FFIELDC FiniteFieldCategory
{\psframebox{{\rnode{ffieldc}{\href{ffcat.spad.dvi}{ffieldc}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{fpc}{ffieldc}
\ncLine[nodesep=3pt,linestyle=solid]{finite}{ffieldc}
\vfill
\eject
\section{Basic Algebra Hierarchy}
\subsection{SETCAT SetCategory}
\subsection{ABELSG AbelianSemiGroup}
\subsection{SGROUP SemiGroup}
\subsection{ORDSET OrderedSet}
\subsection{FINITE Finite}
\subsection{ABELMON AbelianMonoid}
\subsection{MONOID Monoid}
\subsection{ORDFIN OrderedFinite}
\subsection{CABMON CancellationAbelianMonoid}
\subsection{OASGP OrderedAbelianSemiGroup}
\subsection{GROUP Group}
\subsection{ORDMON OrderedMonoid}
\subsection{OAMON OrderedAbelianMonoid}
\subsection{OCAMON OrderedCancellationAbelianMonoid}
\subsection{ABELGRP AbelianGroup}
\subsection{OAMONS OrderedAbelianMonoidSup}
\subsection{RNG Rng}
\subsection{LMODULE LeftModule}
\subsection{RMODULE RightModule}
\subsection{OAGROUP OrderedAbelianGroup}
\subsection{RING Ring}
\subsection{BMODULE BiModule}
\subsection{LINEXP LinearlyExplicitRingOver}
\subsection{MODULE Module}
\subsection{FLINEXP FullyLinearlyExplicitRingOver}
\subsection{VSPACE VectorSpace}
\subsection{DIFRING DifferentialRing}
\subsection{CHARNZ CharacteristicNonZero}
\subsection{PDRING PartialDifferentialRing}
\subsection{CHARZ CharacteristicZero}
\subsection{ALGEBRA Algebra}
\subsection{ENTIRER EntireRing}
\subsection{COMRING CommutativeRing}
\subsection{ORDRING OrderedRing}
\subsection{DIFEXT DifferentialExtension}
\subsection{DIVRING DivisionRing}
\subsection{INTDOM IntegralDomain}
\subsection{GCDDOM GcdDomain}
\subsection{UFD UniqueFactorizationDomain}
\subsection{PID PrincipalIdealDomain}
\subsection{PFECAT PolynomialFactorizationExplicit}
\subsection{EUCDOM EuclideanDomain}
\subsection{FIELD Field}
\subsection{FPC FieldOfPrimeCharacteristic}
\subsection{FFIELDC FiniteFieldCategory}
\vfill
\eject
\section{Data Structure Hierarchy Diagram}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 1 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.
{\hbox{\hskip 2.8cm}}
% SETCAT SetCategory
{\psframebox{{\rnode{setcat}{\href{catdef.spad.dvi}{setcat}}}}}
{\hbox{\hskip 1.0cm}}
% AGG Aggregate
{\psframebox{{\rnode{agg}{\href{catdef.spad.dvi}{agg}}}}}
{\hbox{\hskip 0.5cm}}
% ELTAGG EltableAggregate
{\psframebox{{\rnode{eltagg}{\href{catdef.spad.dvi}{eltagg}}}}}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\hbox{\hskip 4.2cm}}
% HOAGG HomogeneousAggregate
{\psframebox{{\rnode{hoagg}{\href{catdef.spad.dvi}{hoagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{hoagg}
\ncLine[nodesep=3pt,linestyle=solid]{agg}{hoagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.0cm}}
% ARR2CAT TwoDimensionalArrayCategory
{\psframebox{{\rnode{arr2cat}{\href{array2.spad.dvi}{arr2cat}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{hoagg}{arr2cat}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.3cm}}
% MATCAT MatrixCategory
{\psframebox{{\rnode{matcat}{\href{matcat.spad.dvi}{matcat}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{arr2cat}{matcat}
% BGAGG BagAggregate
{\psframebox{{\rnode{bgagg}{\href{aggcat.spad.dvi}{bgagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{hoagg}{bgagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.8cm}}
% SKAGG StackAggregate
{\psframebox{{\rnode{skagg}{\href{aggcat.spad.dvi}{skagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bgagg}{skagg}
{\hbox{\hskip 0.75cm}}
% QUAGG QueueAggregate
{\psframebox{{\rnode{quagg}{\href{aggcat.spad.dvi}{quagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bgagg}{quagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 6
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.5cm}}
% DQAGG DequeueAggregate
{\psframebox{{\rnode{dqagg}{\href{aggcat.spad.dvi}{dqagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{skagg}{dqagg}
\ncLine[nodesep=3pt,linestyle=solid]{quagg}{dqagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 7
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.5cm}}
{\hbox{\hskip 3.4cm}}
% CLAGG Collection
{\psframebox{{\rnode{clagg}{\href{aggcat.spad.dvi}{clagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{hoagg}{clagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 8
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.2cm}}
% DIOPS DictionaryOperations
{\psframebox{{\rnode{diops}{\href{aggcat.spad.dvi}{diops}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bgagg}{diops}
\ncLine[nodesep=3pt,linestyle=solid]{clagg}{diops}
% PRQAGG PriorityQueueAggregate
{\psframebox{{\rnode{prqagg}{\href{aggcat.spad.dvi}{prqagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bgagg}{prqagg}
% FINITE Finite
{\psframebox{{\rnode{finite}{\href{catdef.spad.dvi}{finite}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{finite}
{\hbox{\hskip 1.7cm}}
% SETAGG SetAggregate
{\psframebox{{\rnode{setagg}{\href{aggcat.spad.dvi}{setagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{clagg}{setagg}
% RCAGG RecursiveAggregate
{\psframebox{{\rnode{rcagg}{\href{aggcat.spad.dvi}{rcagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{hoagg}{rcagg}
% IXAGG IndexedAggregate
{\psframebox{{\rnode{ixagg}{\href{aggcat.spad.dvi}{ixagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{hoagg}{ixagg}
\ncLine[nodesep=3pt,linestyle=solid]{eltagg}{ixagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.5cm}}
{\hbox{\hskip 6.0cm}}
% DLAGG DoublyLinkedAggregate
{\psframebox{{\rnode{dlagg}{\href{aggcat.spad.dvi}{dlagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{rcagg}{dlagg}
{\hbox{\hskip 1.3cm}}
% DIRPCAT DirectProductCategory
{\psframebox{{\rnode{dirpcat}{\href{vector.spad.dvi}{dirpcat}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ixagg}{dirpcat}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 10
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 3.1cm}}
{\hbox{\hskip 6.3cm}}
% LNAGG LinearAggregate
{\psframebox{{\rnode{lnagg}{\href{aggcat.spad.dvi}{lnagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{clagg}{lnagg}
\ncLine[nodesep=3pt,linestyle=solid]{ixagg}{lnagg}
% URAGG UnaryRecursiveAggregate
{\psframebox{{\rnode{uragg}{\href{aggcat.spad.dvi}{uragg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{rcagg}{uragg}
% BRAGG BinaryRecursiveAggregate
{\psframebox{{\rnode{bragg}{\href{aggcat.spad.dvi}{bragg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{rcagg}{bragg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 11
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 0.5cm}}
{\hbox{\hskip 9.0cm}}
% BTCAT BinaryTreeCategory
{\psframebox{{\rnode{btcat}{\href{tree.spad.dvi}{btcat}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{bragg}{btcat}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 12
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.0cm}}
% DIAGG Dictionary
{\psframebox{{\rnode{diagg}{\href{aggcat.spad.dvi}{diagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{diops}{diagg}
{\hbox{\hskip 3.1cm}}
% MDAGG MultiDictionary
{\psframebox{{\rnode{mdagg}{\href{aggcat.spad.dvi}{mdagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{diops}{mdagg}
% ORDSET OrderedSet
{\psframebox{{\rnode{ordset}{\href{catdef.spad.dvi}{ordset}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{setcat}{ordset}
% ELAGG ExtensibleLinearAggregate
{\psframebox{{\rnode{elagg}{\href{aggcat.spad.dvi}{elagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{lnagg}{elagg}
% STAGG StreamAggregate
{\psframebox{{\rnode{stagg}{\href{aggcat.spad.dvi}{stagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{lnagg}{stagg}
\ncLine[nodesep=3pt,linestyle=solid]{uragg}{stagg}
% FLAGG FiniteLinearAggregate
{\psframebox{{\rnode{flagg}{\href{aggcat.spad.dvi}{flagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{lnagg}{flagg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 13
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.5cm}}
% KDAGG KeyedDictionary
{\psframebox{{\rnode{kdagg}{\href{aggcat.spad.dvi}{kdagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{diagg}{kdagg}
{\hbox{\hskip 1.0cm}}
% FSAGG FiniteSetAggregate
{\psframebox{{\rnode{fsagg}{\href{aggcat.spad.dvi}{fsagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{diagg}{fsagg}
\ncLine[nodesep=3pt,linestyle=solid]{finite}{fsagg}
\ncLine[nodesep=3pt,linestyle=solid]{clagg}{fsagg}
% MSETAGG MultisetAggregate
{\psframebox{{\rnode{msetagg}{\href{aggcat.spad.dvi}{msetagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{mdagg}{msetagg}
\ncLine[nodesep=3pt,linestyle=solid]{clagg}{msetagg}
{\hbox{\hskip 1.4cm}}
% LZSTAGG LazyStreamAggregate
{\psframebox{{\rnode{lzstagg}{\href{stream.spad.dvi}{lzstagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{stagg}{lzstagg}
% LSAGG ListAggregate
{\psframebox{{\rnode{lsagg}{\href{aggcat.spad.dvi}{lsagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{elagg}{lsagg}
\ncLine[nodesep=3pt,linestyle=solid]{stagg}{lsagg}
\ncLine[nodesep=3pt,linestyle=solid]{flagg}{lsagg}
{\hbox{\hskip 0.3cm}}
% A1AGG OneDimensionalArrayAggregate
{\psframebox{{\rnode{a1agg}{\href{aggcat.spad.dvi}{a1agg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{flagg}{a1agg}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% level 14
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{\vbox{\vskip 1.0cm}}
% TBAGG TableAggregate
{\psframebox{{\rnode{tbagg}{\href{aggcat.spad.dvi}{tbagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{kdagg}{tbagg}
\ncLine[nodesep=3pt,linestyle=solid]{ixagg}{tbagg}
% OMSAGG OrderedMultiSetAggregate
{\psframebox{{\rnode{omsagg}{\href{aggcat.spad.dvi}{omsagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{prqagg}{omsagg}
\ncLine[nodesep=3pt,linestyle=solid]{msetagg}{omsagg}
{\hbox{\hskip 3.1cm}}
% BTAGG BitAggregate
{\psframebox{{\rnode{btagg}{\href{aggcat.spad.dvi}{btagg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{ordset}{btagg}
\ncLine[nodesep=3pt,linestyle=solid]{a1agg}{btagg}
{\hbox{\hskip 1.0cm}}
% SRAGG StringAggregate
{\psframebox{{\rnode{sragg}{\href{aggcat.spad.dvi}{sragg}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{a1agg}{sragg}
% VECTCAT VectorCategory
{\psframebox{{\rnode{vectcat}{\href{vector.spad.dvi}{vectcat}}}}}
\ncLine[nodesep=3pt,linestyle=solid]{a1agg}{vectcat}
\vfill
\eject
\section{Data Structure Hierarchy Diagram}
\subsection{SETCAT SetCategory}
\subsection{AGG Aggregate}
\subsection{ELTAGG EltableAggregate}
\subsection{HOAGG HomogeneousAggregate}
\subsection{ARR2CAT TwoDimensionalArrayCategory}
\subsection{MATCAT MatrixCategory}
\subsection{BGAGG BagAggregate}
\subsection{SKAGG StackAggregate}
\subsection{QUAGG QueueAggregate}
\subsection{DQAGG DequeueAggregate}
\subsection{CLAGG Collection}
\subsection{DIOPS DictionaryOperations}
\subsection{PRQAGG PriorityQueueAggregate}
\subsection{FINITE Finite}
\subsection{SETAGG SetAggregate}
\subsection{RCAGG RecursiveAggregate}
\subsection{IXAGG IndexedAggregate}
\subsection{DLAGG DoublyLinkedAggregate}
\subsection{DIRPCAT DirectProductCategory}
\subsection{LNAGG LinearAggregate}
\subsection{URAGG UnaryRecursiveAggregate}
\subsection{BRAGG BinaryRecursiveAggregate}
\subsection{BTCAT BinaryTreeCategory}
\subsection{DIAGG Dictionary}
\subsection{MDAGG MultiDictionary}
\subsection{ORDSET OrderedSet}
\subsection{ELAGG ExtensibleLinearAggregate}
\subsection{STAGG StreamAggregate}
\subsection{FLAGG FiniteLinearAggregate}
\subsection{KDAGG KeyedDictionary}
\subsection{FSAGG FiniteSetAggregate}
\subsection{MSETAGG MultisetAggregate}
\subsection{LZSTAGG LazyStreamAggregate}
\subsection{LSAGG ListAggregate}
\subsection{A1AGG OneDimensionalArrayAggregate}
\subsection{TBAGG TableAggregate}
\subsection{OMSAGG OrderedMultiSetAggregate}
\subsection{BTAGG BitAggregate}
\subsection{SRAGG StringAggregate}
\subsection{VECTCAT VectorCategory}
\vfill
\eject
\begin{thebibliography}{99}
\bibitem{1} Jenks, Richard D., Sutor, Robert S.,
{\sl AXIOM The Scientific Computation System},
Springer-Verlag, NY 1992, 
ISBN 0-387-97855-0
\bibitem{2} The Axiom Team,
{\sl AXIOM The 30 Year Horizon},
Tim Daly (Ed), 2004,
{\bf http://savannah.nongnu.org/projects/axiom}
\bibitem{3} The Axiom Team,
{\sl AXIOM Volume 1 Tutorial},
Tim Daly (Ed), 2004,
{\bf http://savannah.nongnu.org/projects/axiom}
\bibitem{4} The Axiom Team,
{\sl AXIOM Volume 2 Programming},
Tim Daly (Ed), 2004,
{\bf http://savannah.nongnu.org/projects/axiom}
\bibitem{5} The Axiom Team,
{\sl AXIOM Volume 3 Reference},
Tim Daly (Ed), 2004,
{\bf http://savannah.nongnu.org/projects/axiom}
\bibitem{6} The Axiom Team,
{\sl AXIOM Volume 4 Developers},
Tim Daly (Ed), 2004,
{\bf http://savannah.nongnu.org/projects/axiom}
\end{thebibliography}
\end{document}

\start
Date: Wed, 7 Dec 2005 18:09:58 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: userinfo variable

this is the only information i've gathered so far.

axiom doesn't work by pattern matching or searching so the 
mechanism isn't the same as other systems.

t


===================================================================
FAQ 15: How can I see what the interpreter is trying to do?
===================================================================

)set message bottomup on

will tell you the signatures that the interpreter is trying to use.

Another method is to do

)lisp (setq |$monitorNewWorld| t)

and you can view database calls with

)lisp (setq *miss* t)

\start
Date: 07 Dec 2005 23:31:07 +0100
From: Martin Rubey
To: Tim Daly
Subject: Re: userinfo variable

Dear Tim,

Tim Daly writes:

> axiom doesn't work by pattern matching or searching so the mechanism isn't
> the same as other systems.

You misread my mail. What I suggested was that, for example, the routine
mathli0 in intpm.spad:

-- matches the integral to a result of the form d * li(a) + int(v)
-- where k = log(a)
-- returns [a,d,v] or []
           matchli0(f, k, x) ==

would have as first line something like

             if userinfo > 0 then 
               output(hconcat("Trying to match integral ", f::OutputForm, _
                              " to a result of the form d*li(a)+int(v) " _ 
                              " with log(a)=", k::OutputForm))$OutputPackage


and userinfo would be a variable defaulting to 0 and being set with

)set userinfo 1

\start
Date: Wed, 7 Dec 2005 18:30:44 -0500
From: Tim Daly
To: list
Subject: xemacs

it is now possible to do windowing WITHIN xemacs.... check it out:

www.xwem.org

\start
Date: Wed, 7 Dec 2005 18:38:30 -0500
From: Tim Daly
To: list
Subject: xemacs

it is now possible to do windowing WITHIN xemacs.... check it out:

www.xwem.org

you can run mozilla embedded in xemacs:

www.xwem.org/xwem-mozilla.png

and if we figure out how to open a window to do axiom graphics,
modify the hyperdoc to use html, tell xemacs how to process
pamphlets with notangle/noweave and poof.... axiom++

\start
Date: 07 Dec 2005 18:57:05 -0500
From: Camm Maguire
To: Bill Page
Subject: Re: Axiom on MACOSX... gettext issue

Greetings!  Bill is right -- please let me know if problems persist.

Take care,

Bill Page writes:

> Tim,
> 
> On Tuesday, December 06, 2005 11:42 PM you wrote:
> > 
> > I'm getting the message:
> > 
> > enable_machine=
> > Exactly one loader option must be chosen: dlopen=no 
> > statsysbfd=yes dynsysbfd=no locbfd=yes custreloc=no
> > 
> > on the macosx 10.4 build. suggestions?
> > 
> 
> I am not sure if this will help, but I think you need the
> following gcl ./configure options
> 
> --disable-statsysbfd --enable-locbfd
> 
> Ref:
> 
> http://www.cs.utexas.edu/users/moore/acl2/v2-9/installation.html
> 
> Or maybe
> 
> --disable-statsysbfd --disable-locbfd --enable-custreloc
> 
> Ref:
> 
> http://gcl.darwinports.com
> 

\start
Date: Wed, 7 Dec 2005 19:59:36 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Axiom on MACOSX... gettext issue

actually either one gets past that error.

now it fails with

/usr/include/unistd.h:531: error: conflicting types for 'my_sbrk'
../h/config.h:42: previous declaration of 'my_sbrk' was here

line 531 reads:

void *sbrk(int);

it appears that line 42ish reads:

#define sbrk my_sbrk
extern char *my_sbrk(int incr);

\start
Date: Wed, 07 Dec 2005 19:17:13 -0600
From: Jay Belanger
To: Tim Daly
Subject: Re: xemacs

Tim Daly writes:

> it is now possible to do windowing WITHIN xemacs.... check it out:
>
> www.xwem.org

Yeah; xwem is way cool.  I'm sorry it's an XEmacs only thing.

> you can run mozilla embedded in xemacs:

I don't think mozilla is embedded in xemacs, at least not in the sense
I usually think of.  I believe that XEmacs simply controls mozilla as an
external process.

> and if we figure out how to open a window to do axiom graphics,
> modify the hyperdoc to use html, tell xemacs how to process
> pamphlets with notangle/noweave and poof.... axiom++

Couldn't this be done with other programmable window managers?

\start
Date: Wed, 7 Dec 2005 17:42:56 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: Re: hyperlinked algebra

--- Tim Daly wrote:

> i've hacked src/doc/endpaper.pamphlet to add hyperlinks.
> most of the links go to catdef.spad.dvi because they are
> categories that live there. i don't know how to implement 
> #tags in latex yet.

What do you mean by tags?  Is that a way to refer to specific points in
a document?

I'll try to build this file - I wasn't aware pstricks could do
hyperlinked diagrams.  Can a hyperlinked pdf be created?  I know there
is a pst-pdf package for pstricks but I don't know how good it is.

If pstricks can indeed do all that we want with fancy linking and
diagrams it might be a better target than XYpic - there exist some
fairly sophisticated graphing routines for pstricks, and it would be
fun to teach Axiom to output (say) pst-3dplot TeX instead of an image
for plotting.  (Although I'm not sure how well it could render some
things - experimentation would be required).

I had intended to explore this possibility with XYpic, but initially at
least it should be either XYpic or pstricks instead of both.  If there
is the desire for the other later it can always be added.

\start
Date: 07 Dec 2005 21:18:39 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Axiom on MACOSX... gettext issue

Greetings!

Tim Daly writes:

> actually either one gets past that error.
> 
> now it fails with
> 
> /usr/include/unistd.h:531: error: conflicting types for 'my_sbrk'
> ../h/config.h:42: previous declaration of 'my_sbrk' was here
> 
> line 531 reads:
> 
> void *sbrk(int);
> 
> it appears that line 42ish reads:
> 
> #define sbrk my_sbrk
> extern char *my_sbrk(int incr);
> 

Yes, GCL currently pertains to the setup under a somwhat older
macosx.  We will #ifdef this on the os version shortly -- for now you
can just replace the char in the last of the above with void.

Please let me know if problems persist.

\start
Date: Wed, 7 Dec 2005 22:23:28 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: Axiom on MACOSX... gettext issue

actually, changing it in h/config.h doesn't work because
that file seems to be regnerated although i couldn't 
figure out the process.

i clued into the fact that it gcl-2.6.6 was the version
that last built on the macosx. so i'm trying that.

\start
Date: Wed, 7 Dec 2005 22:20:00 -0500
From: Bill Page
To: Martin Rubey
Subject: navigating Axiom's library

On December 7, 2005 4:34 PM Martin Rubey wrote:
> 
> Bill Page writes:
> 
> ... we have to think about the best ways to "navigate"
> quickly and easily through such a large complex structures
> as the Axiom algebra library. 
> 
> HyperDoc does this very well. Unfortunately, HyperDoc <>
> MathAction <> ALLPROSE. But it should be.
> ...

I have mentioned before that I do not find HyperDoc particularly
useful. Every time I sit down to use it I get a bad case of
"browser shock". Also it seems to me to be too unstable (i.e.
crashes too often) to let me gain much confidence in it's user
interface. So I do badly want to see HyperDoc's features
re-packaged with a standard web browser interface.

The idea of being able to navigate through the Axiom database
(daase files) easily is a very good one. In principle this
could be implemented quite easily on MathAction by loading
the contents of the daase files into a Zope data structure and
then writing some methods to query and browse this online.

Or this could be through another auxiliary server interface
in the manner of AxiomUI. In this case writing a Lisp-based
web application is certainly possible.

In either case, what we need is for some new developer to
come along who wants to tackle this - maybe this is a good
candidate for a bounty award?

\start
Date: Wed, 7 Dec 2005 23:23:39 -0500
From: Tim Daly
To: Bill Page
Subject: Re: navigating Axiom's library

> The idea of being able to navigate through the Axiom database
> (daase files) easily is a very good one. In principle this
> could be implemented quite easily on MathAction by loading
> the contents of the daase files into a Zope data structure and
> then writing some methods to query and browse this online.

asq is a function in the $AXIOM/bin directory that answers
all possible questions from the axiom databases.

\start
Date: Wed, 7 Dec 2005 23:43:37 -0500
From: Tim Daly
To: Tim Daly
Subject: Axiom on MACOSX... number_sin
Cc: Camm Maguire, list, gcl-devel@gnu.org

i backed off to the gcl-2.6.6 which is what gcl.darwinports.com claims to use

i figured out the file which is used to generate h/config.h 
and fixed the sbrk issue.

in h/powerpc-macosx.h

s/extern char *my_sbrk(int incr);/extern void *sbrk(int);/

now the build fails with

num_sfun.c: In function 'number_exp':
num_sfun.c:67 error: invalid storage class for function 'number_sin'

that line reads:

static object number_sin(object x)

object appears to mean (from h/object.h line 89):
  union lispunion *
which itself is a union of structs (in a twisty little maze, all alike).

still, nojoy..

\start
Date: Wed, 7 Dec 2005 23:23:54 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

On December 7, 2005 6:08 PM Tim Daly (root) wrote:

> 
> I've hacked src/doc/endpaper.pamphlet to add hyperlinks.
> most of the links go to catdef.spad.dvi because they are
> categories that live there. I don't know how to implement 
> #tags in latex yet.

This is possible if you generate a PDF or HTML. But whether
it will work with dvi files or not is likely to be highly
dependent on your particular dvi viewer software.

> 
> not everything goes to catdef. ffield goes to ffcat.spad.dvi
> and the data structures tend to go to aggcat but others can
> be found (e.g. matcat).

This raises the question again of whether it is really such a
good idea to aggregate Axiom categorys and domains into larger
groupings. Already this caused some problems with navigation to
source files in Hyperdoc and from the Axiom interpreter when
you went from about 1,300 individual spad files into about 350
pamphlet files. Currently you seem to be planning to take this
even further and aggregate the 350 into maybe 20 or so "volumes".
Doing this means that you can no longer take advantage of the
file system and you have to start building additional features
to access pieces of these files etc. Maybe we need to think more
about this and discuss it some more.

Often in web application design one is faced with a similar issue
of choosing the right level of "granularity" for the HTML pages.
If they are too big, then navigation degenerates into more or
less linear browsing and network performance suffers. If they
are too small, then it becomes hard for a reader to quickly get
the "big picture" and everything seems more complex unless
the navigation links are carefully designed and other access
methods like online searching is available.

I think the choice of granularity is also strongly influenced
by what tools one is using. One thing that drives you toward
a smaller number of larger "volumes" is the use of noweb-style
literate programming (i.e. pamphlets). Cliff reminded me recently
about "Leo" - a fairly new literate programming environment that
we discussed a while time ago.

See: http://webpages.charter.net/edreamleo/front.html

Leo is:

# A general **data management** environment.
  Leo shows user-created relationships among any kind data:
  computer programs, web sites, etc.
# An outlining editor for programmers.
  Leo embeds the **noweb** and CWEB markup languages in an
  outline context.
# A flexible **browser** for projects, programs, classes or
  any other data.
# A project manager.
  Leo provides **multiple views** of a project within a single
  outline.
  Leo naturally represents tasks that remain up-to-date.
# Portable. Leo runs on Windows, Linux and MacOS X.

etc. There is a lot of good documentation available about Leo
and it is a very active project with a large number of
registered developers.

I still think that using a literate programming tool like Leo
would be a big advantage over the "pamphlet" approach. And because
it is specifically designed as a "data management environment" in
addition to a programming environment, it goes a long way towards
solving the granularity issue because Leo's outline structure
allows you to organize smaller pieces into a coherent whole.

Of course, we are still in the same situation now as we were
when we last talked about this: Using Leo for Axiom would be a
big step and would involve a significant learning curve... and
here we are still with insufficient resources. :( But if there
are any Axiom developers who might find this sort of project
interesting, then I would be very happy to help setup an
experiment to try Leo with the Axiom source distribution.

> 
> I tried to use URLs to the wiki but xdvi can't handle them.

If you mean URLs of HTML pages on the wiki, then no of course
your dvi viewer can't handle that. But depending on the version
of the dvi viewer, it might pass such reference off to a real
web browser. If you use the href to point directly to the dvi
file using the url contents of the 'dvi' link on each pamphlet
thumbnail page, then I think that should work. If these dvi
files in turn included there own hyperref links than this
process could continue.

Or do you mean that the version of xdvi that you are using does
not understand urls (Internet links) of any kind? The href links
that you show below are not urls, but rather direct references
to local files.

> ...
> {\hbox{\hskip 4.0cm}}
> % SETCAT SetCategory
> {\psframebox{{\rnode{setcat}{\href{catdef.spad.dvi}{setcat}}}}}\\
> ...

\start
Date: Thu, 8 Dec 2005 00:18:34 -0500
From: Tim Daly
To: Bill Page
Subject: Re: hyperlinked algebra

> you went from about 1,300 individual spad files into about 350
> pamphlet files.

this is the original axiom design. i didn't change it.

\start
Date: Wed, 7 Dec 2005 23:32:24 -0500
From: Bill Page
To: Tim Daly
Subject: RE: navigating Axiom's library

On December 7, 2005 11:24 PM Tim Daly (root) wrote:
> 
> > The idea of being able to navigate through the Axiom database
> > (daase files) easily is a very good one. In principle this
> > could be implemented quite easily on MathAction by loading
> > the contents of the daase files into a Zope data structure and
> > then writing some methods to query and browse this online.
> 
> asq is a function in the $AXIOM/bin directory that answers
> all possible questions from the axiom databases.
> 

Yes, that is a good point. I do use 'asq' - especially with the
Windows version of Axiom. It is a simple C program that could
probably be quite easily adapted produce HTML output and to be
called as a cgi program from a web server such Apache on
axiom-developer.org.

But I think there is at least one important database query that
HyperDoc does but which I do not know how to do with the current
'asq' program. On HyperDoc I can ask for all the "children" of
a domain but with 'asq' I only get to see the "ancestors", i.e.
I can only navigate in one direction in the lattice. Or am I
missing something obvious?

\start
Date: Wed, 7 Dec 2005 23:57:43 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

On December 8, 2005 12:19 AM Tim Daly (root) wrote:
> 
> > you went from about 1,300 individual spad files into about
> > 350 pamphlet files.
> 
> this is the original axiom design. i didn't change it.
> 

??? I don't understand.

Original axiom did not use pamphlet files.

Original axiom had only the 1,300 spad files.

Original axiom as well as the current version of axiom
refers to these spad files individually as in when you
issue the command:

(1) -> )show Integer
 Integer  is a domain constructor
 Abbreviation for Integer is INT
 This constructor is exposed in this frame.
 Issue )edit c:/Program Files/axiom/mnt/windows/../../src/algebra/INT.spad
 to see algebra source code for INT

But there is no longer any such file 'INT.spad' because someone
(you I thought?) decided to group the 'INT.spad' file along with
NNI.spad, PI.spad and ROMAN.spad as chunks in the pamphlet file
'integer.spad.pamphlet' 

Because of this new grouping it is sometimes hard to find the
code for a particular domain, that is which pamphlet file now
contains that code. This is Issue Tracker #144 "Domain abbreviation
is no longer associated with filename" originally reported by
William Sit. He wrote: "The NAG version is correct, so something
in the OpenSource version is responsible for the change."

\start
Date: Thu, 8 Dec 2005 01:00:06 -0500
From: Tim Daly
To: Bill Page
Subject: Re: hyperlinked algebra

the original axiom algebra files were grouped exactly as you see them.

what i broke was the code that created the NRLIB to source file map.
i'm certain i can fix that (since i wrote it in the first place).
i'll put it on the queue.

\start
Date: Thu, 8 Dec 2005 00:27:50 -0500
From: Bill Page
To: Cliff Yapp
Subject: RE: hyperlinked algebra

On December 7, 2005 8:43 PM Cliff wrote:
> 
> --- Tim Daly (root) wrote:
> > i've hacked src/doc/endpaper.pamphlet to add hyperlinks.
> > most of the links go to catdef.spad.dvi because they are
> > categories that live there. i don't know how to implement 
> > #tags in latex yet.
> 
> What do you mean by tags?  Is that a way to refer to specific 
> points in a document?

Yes. Works in HTML and PDF (Acrobat). Maybe some dvi?

> 
> I'll try to build this file - I wasn't aware pstricks could
> do hyperlinked diagrams.  Can a hyperlinked pdf be created?
> I know there is a pst-pdf package for pstricks but I don't
> know how good it is.
>

Yes, apparently you can create hyperlinked pdf files this way.
See:

http://wiki.axiom-developer.org/book--main--1/Endpaper2

This is Tim's revised endpaper file with some additional options
specified for the hyperref package that allow it to generate
hyperlinks using dvipdfm.

\usepackage[dvipdfm,final,colorlinks=true,pdfstartview=FitH]{hyperref}
 
> If pstricks can indeed do all that we want with fancy linking
> and diagrams it might be a better target than XYpic - there
> exist some fairly sophisticated graphing routines for pstricks,

I am not sure why, but I do not see any lines connecting the
nodes in the diagram. Is something still missing from the file?

\start
Date: Thu, 8 Dec 2005 00:43:06 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

On December 8, 2005 1:00 AM Tim Daly (root) wrote:
> 
> the original axiom algebra files were grouped exactly as you see
> them.

Hmmm. Here is my apology for speaking without sufficient knowledge.
I just checked on the only commercial version of Axiom that I have
(the old Windows demo version) and I see that you are right. The
same domains are grouped into a single .spad file - without the
pamphlet structure.

> 
> what i broke was the code that created the NRLIB to source file
> map.
> 

So I presume that originally these 345 *.spad files where all
compiled one at a time as part of the Axiom build, right? Each
call to the compiler would then compile 2 or 3 domains.

But the reason this is done differently now in the open source
Axiom build must be because of the bootstrap. I mean now the
order in which things are compiled matters because we are
not building from an existing running Axiom system. So I guess
you were forced to break these files up into pamphlet chunks
in order to extract and compile them separately.

But as a result the source file map gets built based on the
individual domains rather than the original groups.

I think I see.

> i'm certain i can fix that (since i wrote it in the first
> place). i'll put it on the queue.

If you have any ideas you would like to share about how to
fix this, then perhaps I could help?

\start
Date: Thu, 8 Dec 2005 01:37:22 -0500
From: Tim Daly
To: Bill Page
Subject: Re: hyperlinked algebra

> I am not sure why, but I do not see any lines connecting the
> nodes in the diagram. Is something still missing from the file?

the lines show up with both endpaper.dvi and endpaper2.dvi in xdvi.
the lines do not show up in endpaper.pdf and endpaper2.pdf in acroread.

\start
Date: Thu, 8 Dec 2005 00:56:29 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

Tim wrote:
> 
> the lines show up with both endpaper.dvi and endpaper2.dvi in
> xdvi. the lines do not show up in endpaper.pdf and endpaper2.pdf
> in acroread.
> 

The lines do not show up viewing either endpaper.dvi or endpaper2.dvi
using MikTeX Yap dvi viewer on windows. But I think Yap is a rather
deficient viewer anyway. :(

The pdf file is built from the dvi file using 'dvipdfm'. I wonder
if there are some "pstricks" options that need to be set to make
sure that the postscript dvi extras get properly converted to pdf
by the 'dvipdfm' program? I know that it is necessary to include
the 'dvipdfm' option on the hyperref package to get hyperlinks in
pdf files generated this way to work.

\start
Date: Thu, 8 Dec 2005 01:54:43 -0500
From: Tim Daly
To: Bill Page
Subject: Re: hyperlinked algebra

> But the reason this is done differently now in the open source
> Axiom build must be because of the bootstrap. I mean now the
> order in which things are compiled matters because we are
> not building from an existing running Axiom system. So I guess
> you were forced to break these files up into pamphlet chunks
> in order to extract and compile them separately.
> 
> But as a result the source file map gets built based on the
> individual domains rather than the original groups.

bingo. exactly right. without a running axiom the original files could
not be compiled. so i had to re-engineer the world to build in the
correct dependent order at the individual domain level.

breaking up the files into 1100 individual domains breaks the )compile
command in the running interpreter so i'm forced to either keep the
current organization or rewrite the algebra.  but i couldn't compile
the current organization. a real circular design issue for the build
system that i had to solve.

the sourcefile fix is to carry the sourcefile information along in the
algebra NRLIB/code.lsp files and write code to update both the
databases and the running interpreter. it involves both compiler,
interpreter, and database hacking. it is a conceptually easy fix but
to do it right you have to touch a lot of code. likely it is several
days of code-reading followed by a 10 byte change somewhere :-)

if you look at the compiler you can figure out how it happens (and
document it). if you look at the database you can figure out how it is
currently (wrongly) stored (and document that).  then you have to
ponder how it currently works and design a fix. my current thinking is
to introduce a )sourcefile directive in each domain since there is no
axiom machinery available at pamphlet-extraction time. the compiler
needs to be changed to recognize, respect, and record the )sourcefile
directive in the databases.

documenting how the compiler/interpreter/database does it now
is the key to understanding the necessary changes.

\start
Date: Thu, 8 Dec 2005 02:31:03 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

Tim,

On December 8, 2005 1:55 AM you wrote:
> ... 
> bingo. exactly right. without a running axiom the original files
> could not be compiled. so i had to re-engineer the world to build
> in the correct dependent order at the individual domain level.
> 

Well, here's a thought: We know that we should be building the
Axiom system at least twice anyway in order to optimize the
function calls and to propagate any other optimization changes
related to the bootstrap fixed-point. So, why don't we just build
the system a 2nd time using the 345 aggregated spad files instead
of the individual domain chunks? Wouldn't that have the effect of
correcting the source file names?

\start
Date: 08 Dec 2005 09:10:55 +0100
From: Martin Rubey
To: Bill Page, Ralf Hemmecke, Kai Kaminski
Subject: Re: navigating Axiom's library

Dear Ralf, *

I was just pondering the various approaches to the documentation issue:

As far as I understand, you are proposing a system where several (literate)
source files are compiled into one big dvi/ps/pdf/html/mathml ... file.

As you know, I think that it is necessary that we go from three documentation
formats (namely: pamphlet, hypertex, structured text) to one, namely yours.

As far as dvi/pdf/ps, i.e., printed matter is concerned, I think there is not
much left to do. The one bit missing is to enable ALLPROSE to produce different
files for the various user groups. For example a file which contains only the
usage info (as in aldordoc) and the examples for endusers.

However, for the web based documentation, there seems to be more to do - apart
from being able to produce it using tex4ht and jsmath and these matters:

> > ... we have to think about the best ways to "navigate" quickly and easily
> > through such a large complex structures as the Axiom algebra library.

> > HyperDoc does this very well. Unfortunately, HyperDoc <> MathAction <>
> > ALLPROSE. But it should be.

> I have mentioned before that I do not find HyperDoc particularly
> useful. Every time I sit down to use it I get a bad case of "browser
> shock". ... So I do badly want to see HyperDoc's features re-packaged with a
> standard web browser interface.

> The idea of being able to navigate through the Axiom database (daase files)
> easily is a very good one.

Of course, with ALLPROSE you can point at a line in the dvi viewer and jump to
the corresponding line of source code, but this is a very different matter.

Somehow we need a facility that interacts with ALLPROSE and uses the
databases. I wonder whether Aldor has similar ones... Do you know? If yes, we
have to agree on one format, so that everything works together as it should.

The net result would be a webbrowser-script, that displays the documentation
produced by ALLPROSE and adds some buttons on the bottom depending on what is
displayed currently, just as HyperDoc does it now...

Of course, there is a discrepancy between the ALLPROSE approach and the way
hyperdoc works currently:

HyperDoc uses mostly the text in the in the databases, which axiom extracts
into the appropriate database from the +++ comments when compiling the
algebra. Apart from that, one can write additional HyperTex files, which get
displayed as examples or the like.

I do not understand how hyperdoc knows whether there are example files around
or not. Is this information also in the databases?

It seems to me that we would need to modify the generation of the databases
such that the +++ comments are transformed into html or mathml with a call to
tex4ht. Or we could write a program that takes a database generated by axiom
and transforms the text it contains into html, no idea what would be easier.

Alternatively, let the databases only contain a pointer to the right file. For
example, it could contain simply the filename where the text is stored. In
fact, this looks a lot better to me. This way, the compiler would only supply
the dependencies of the operations, not their documentation. Is it a problem to
have a few thousand files in a directory?

Kai, do you think you could help?

\start
Date: Thu, 8 Dec 2005 06:35:33 -0800 (PST)
From: Cliff Yapp
To: Bill Page
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> On December 7, 2005 8:43 PM Cliff wrote:
> > 
> > --- Tim Daly (root) wrote:
> > > i've hacked src/doc/endpaper.pamphlet to add hyperlinks.
> > > most of the links go to catdef.spad.dvi because they are
> > > categories that live there. i don't know how to implement 
> > > #tags in latex yet.
> > 
> > What do you mean by tags?  Is that a way to refer to 
> > specific points in a document?
> 
> Yes. Works in HTML and PDF (Acrobat). Maybe some dvi?

Well, my units tex file has a way to create hyperref targets within a
document.  I'm not sure how to open a DIFFERENT file and go to a target
in that file, or even if acroread/xdvi support that, but it might be
doable - I'll take a look.

> > I'll try to build this file - I wasn't aware pstricks could
> > do hyperlinked diagrams.  Can a hyperlinked pdf be created?
> > I know there is a pst-pdf package for pstricks but I don't
> > know how good it is.
> 
> Yes, apparently you can create hyperlinked pdf files this way.
> See:
> 
> http://wiki.axiom-developer.org/book--main--1/Endpaper2
> 
> This is Tim's revised endpaper file with some additional
> options specified for the hyperref package that allow it to
> generate hyperlinks using dvipdfm.
> 
>
\usepackage[dvipdfm,final,colorlinks=true,pdfstartview=FitH]{hyperref}

We're going to run into trouble here, I think.  So far, if I supply pdf
specific options to hyperref in tetex 3.0+, it's going to perforce
compile with pdfetex instead of latex.  This is intended behavior
apparently, since according to what I have read pdfetex can usually
generate better pdf documents than a ps->pdf or dvi->pdf conversion
can.

However, it seems that postscript specific packages like pstricks are
going to cause us some trouble here.  I tried to install pst-pdf and
build endpaper.pamphlet (the one in the email) with pdflatex, and it
was a disaster.  I'm not sure whether it was because my setup was wrong
or what (being off the net slows the debugging process).

If dvipdfm is really a direct dvi->pdf converter, maybe there is some
way to generate dvi diagrams of pstrick figures and use it to convert
them to pdf for insertion by pdflatex, but that sounds frighteningly
hackish to me.   
  
> > If pstricks can indeed do all that we want with fancy linking
> > and diagrams it might be a better target than XYpic - there
> > exist some fairly sophisticated graphing routines for 
> > pstricks,
> 
> I am not sure why, but I do not see any lines connecting the
> nodes in the diagram. Is something still missing from the file?

Confirmed - I see the same thing.  I would say there is a fairly high
order of probability that the conversion routines are not up to
producing the lines in pdf.

If we are going to pursue this route, I would recommend two things. 
The first one is to contact the folks involved with LaTeX, TeTeX, and
other TeX distribution builders and find out what the future holds for
standard TeX tools - in particular whether we should be targeting
pdfetex or using dvipdfm.  The second is to talk to the pdfetex,
pstrick/pst-pdf, and XYpic authors and see what can be done to improve
the output we are getting.  Even XYpic, which successfully created a
with-lines diagram in pdf using pdfetex, renders that diagram very
slowly in Acroread so I have a feeling we are either up against a
limitation of pdf or (more likely) there is something suboptimal going
on with the pdf translation.  This can't be a very common usage of
LaTeX so we may be in uncharted (or at least unoptimized) waters here. 
If the authors of the latex packages are interested in working with us
we might be able to break new ground both for Axiom and for TeX.

Of course I'm not TeX expert, but if this course seems wise I'm willing
to try and locate the appropriate contacts and see if progress can be
made.

\start
Date: 08 Dec 2005 09:54:20 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: Axiom on MACOSX... gettext issue

Greetings!

It just needs to be changed in h/powerpc-macosx.h and o/unexmacosx.c,
then rerun configure and make. (against 2.6.8pre).

My cvs access is down at the moment -- will commit equivalent when it
is restored.

Tim Daly writes:

> actually, changing it in h/config.h doesn't work because
> that file seems to be regnerated although i couldn't 
> figure out the process.
> 
> i clued into the fact that it gcl-2.6.6 was the version
> that last built on the macosx. so i'm trying that.

\start
Date: Thu, 8 Dec 2005 10:05:04 -0500
From: Bill Page
To: Cliff Yapp
Subject: RE: hyperlinked algebra

On December 8, 2005 9:36 AM C Y wrote:
> > > 
> > > What do you mean by tags?  Is that a way to refer to 
> > > specific points in a document?
> > 
> > Yes. Works in HTML and PDF (Acrobat). Maybe some dvi?
> 
> Well, my units tex file has a way to create hyperref targets
> within a document.  I'm not sure how to open a DIFFERENT
> file and go to a target in that file, or even if acroread/xdvi
> support that, but it might be doable - I'll take a look.

All web browsers (with HTML documents) and Acrobat (Adobe
version) support this.

> > 
> > Yes, apparently you can create hyperlinked pdf files this way.
> > See:
> > 
> > http://wiki.axiom-developer.org/book--main--1/Endpaper2
> > 
> > This is Tim's revised endpaper file with some additional
> > options specified for the hyperref package that allow it to
> > generate hyperlinks using dvipdfm.
> > 
> >
> \usepackage[dvipdfm,final,colorlinks=true,pdfstartview=FitH]{hyperref}
> 
> We're going to run into trouble here, I think.  So far, if I 
> supply pdf specific options to hyperref in tetex 3.0+, it's
> going to perforce compile with pdfetex instead of latex.

No this does not happen to me. MathAction uses pdfeTeX
3.141592-1.21a-2.2 to generate the dvi for the file above.
Then it used dvipdfm to create the pdf file. This is done
internally for each pamphlet file on the Axiom wiki.

> This is intended behavior apparently, since according to
> what I have read pdfetex can usually generate better pdf
> documents than a ps->pdf or dvi->pdf conversion can.

So far that is not my experience.

> ... 
> If dvipdfm is really a direct dvi->pdf converter, maybe
> there is some way to generate dvi diagrams of pstrick
> figures and use it to convert them to pdf for insertion
> by pdflatex, but that sounds frighteningly hackish to me.
> ...

pstricks inserts postscript "extras" into the dvi file.
'dvipdfm' converts dvi format to pdf format.

http://gaspra.kettering.edu/dvipdfm/

Since pdf is closely related to postscript, one might hope
that dvipdfm would also convert the postscript extras into
pdf as well. But at the above web site I read:

"Version 0.12 provides native MetaPost output support and
some native PostScript support (no, PSTricks doesn't work).
Version 0.12 allows transparent PS/EPS file inclusion with
help from an auxiliary program such as GhostScript. Version
0.12 enhances DVI compatibility by implementing various
standard specials for color, papersize, etc. Some simple
embedded PostScript code (ps: specials) can also be processed."

:(

At the pstricks website:

http://www.tug.org/PSTricks/main.cgi?file=pdf/pdfoutput

"The PSTricks macros cannot be used with pdf(La)TeX, because
PSTricks uses PostScript arithmetic, which isn't part of
PDF. There are several more or less good possibilities to
get a PDF output from PostScript."

They seem to recommend using:

dvips <file>.dvi
ps2pdf <file>.ps

instead of 'dvipdfm'. We can do this.

\start
Date: Thu, 8 Dec 2005 07:11:47 -0800 (PST)
From: Cliff Yapp
To: Bill Page, Tim Daly
Subject: Leo, dvi, web (was RE:  hyperlinked algebra)

--- Bill Page wrote:

> On December 7, 2005 6:08 PM Tim Daly (root) wrote:
> 
> > 
> > I've hacked src/doc/endpaper.pamphlet to add hyperlinks.
> > most of the links go to catdef.spad.dvi because they are
> > categories that live there. I don't know how to implement 
> > #tags in latex yet.
> 
> This is possible if you generate a PDF or HTML. But whether
> it will work with dvi files or not is likely to be highly
> dependent on your particular dvi viewer software.

I'm not really convinced dvi is a viable format except as an
intermediate, when it comes to distribution over the web.  dvi
basically assumes a working TeX distribution, in my experience - there
might be standalone viewers out there but I've never seen dvi used as a
distribution medium for an end product.  postscript files are bad
enough - most Windows computers will not have a viewer that can handle
postscript.  Basically this has led to pdf and html being the targeted
presentation formats for distributing TeX documents, and I believe is
the reason for pdfetex being so quick to run in tetex 3.0 and up.  

Actually, Axiom's website might be a good way to test this assumption. 
Bill, if we were to track file downloads for the pamphlet files on the
wiki, how does pdf fair compared to dvi, postscript, and any other
formats we have available?  Can those stats be collected with the
current setup?

A way around this lack of dvi use might be to try and convince the
Mozilla developers to include dvi rendering capabilities in the default
browser install, but I have no idea how difficult that would be.

> I think the choice of granularity is also strongly influenced
> by what tools one is using. One thing that drives you toward
> a smaller number of larger "volumes" is the use of noweb-style
> literate programming (i.e. pamphlets). Cliff reminded me 
> recently about "Leo" - a fairly new literate programming 
> environment that we discussed a while time ago.
> 
> See: http://webpages.charter.net/edreamleo/front.html
[snip]
> I still think that using a literate programming tool like Leo
> would be a big advantage over the "pamphlet" approach. And 
> because it is specifically designed as a "data management 
> environment" in addition to a programming environment, it goes
> a long way towards solving the granularity issue because Leo's
> outline structure allows you to organize smaller pieces into a
> coherent whole.

I'll take another run at understanding Leo and see if I can get it to
"click" this time.  I think Leo is an EXCELLENT candidate for some
voice-over movies showing its abilities - indeed if it does wind up
getting used for Axiom those movies will probably be essential.
 
> Of course, we are still in the same situation now as we were
> when we last talked about this: Using Leo for Axiom would be a
> big step and would involve a significant learning curve... and
> here we are still with insufficient resources. :( But if there
> are any Axiom developers who might find this sort of project
> interesting, then I would be very happy to help setup an
> experiment to try Leo with the Axiom source distribution.

Well, Leo is on my list of things to look at for utility for Axiom.  I
would at least like to get the TeX part of the units and dimensions
package in shape first before I dive into Leo, but I have a feeling Leo
has some really good ideas and Axiom is all about putting good ideas to
work :-).

Perhaps a useful first step Bill would be to kind of outline how Axiom
and Leo might go together - i.e. what could be accomplished in Axiom
using Leo?  I'm thinking something like whatever the Axiom equalivent
would be of the early examples of dtrace Bryan Cantrill put up on
usenet that generated so much buzz - clearly useful stuff that couldn't
be done by any known tool.  If it would take too much work don't worry
about it, but sometimes the right demonstration can go a long way
towards convincing folks :-).
http://groups.google.com/group/comp.unix.solaris/browse_frm/thread/b1d13b7e56e809ab/73d6407711b38014?lnk=st&q=dtrace&rnum=5&hl=en#73d6407711b38014

\start
Date: Thu, 8 Dec 2005 07:21:18 -0800 (PST)
From: Cliff Yapp
To: Bill Page
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> All web browsers (with HTML documents) and Acrobat (Adobe
> version) support this.

OK, I'll look at the hyperref docs for the proper incantations, if
they're in there.

> > We're going to run into trouble here, I think.  So far, if I 
> > supply pdf specific options to hyperref in tetex 3.0+, it's
> > going to perforce compile with pdfetex instead of latex.
> 
> No this does not happen to me. MathAction uses pdfeTeX
> 3.141592-1.21a-2.2 to generate the dvi for the file above.

OK.  What TeX distribution are you using?  tetex?  I'll have to check
my version of pdfeTeX at home.

> Then it used dvipdfm to create the pdf file. This is done
> internally for each pamphlet file on the Axiom wiki.
> 
> > This is intended behavior apparently, since according to
> > what I have read pdfetex can usually generate better pdf
> > documents than a ps->pdf or dvi->pdf conversion can.
> 
> So far that is not my experience.

Maybe it's a tetex/gentoo specific thing...  Other gentoo folk have had
this happen.  Maybe those specific options don't trigger it - I'd have
to try and see.

> "Version 0.12 provides native MetaPost output support and
> some native PostScript support (no, PSTricks doesn't work).
> Version 0.12 allows transparent PS/EPS file inclusion with
> help from an auxiliary program such as GhostScript. Version
> 0.12 enhances DVI compatibility by implementing various
> standard specials for color, papersize, etc. Some simple
> embedded PostScript code (ps: specials) can also be processed."
> 
> :(

Darn it.

> At the pstricks website:
> 
> http://www.tug.org/PSTricks/main.cgi?file=pdf/pdfoutput
> 
> "The PSTricks macros cannot be used with pdf(La)TeX, because
> PSTricks uses PostScript arithmetic, which isn't part of
> PDF. There are several more or less good possibilities to
> get a PDF output from PostScript."

Darn it.

> They seem to recommend using:
> 
> dvips <file>.dvi
> ps2pdf <file>.ps
> 
> instead of 'dvipdfm'. We can do this.

I thought dvips either messed up hyperlinking or resulted in those
horrible boxes around linked text - has this changed now?  Postscript,
as far as I know, does not support hyperlinking - that is (or was
anyway) one of the advantages of using pdflatex in the first place.

<idle thought> I wonder how much of the functionality of PStricks could
be implemented on top of xypic?

\start
Date: Thu, 8 Dec 2005 11:21:11 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: navigating Axiom's library
Cc: Kai Kaminski, list

the database files aren't derived from the +++ comments

when the spad compiler runs it creates an NRLIB directory,
one per domain/category/package in the file.

Among the files in the NRLIB directory there is an index.KAF file

KAF files are random access files. The first item in the file
is a number that is the number of bytes into the file you need
to seek to find the association list (alist) which is a list of
all of the "keys" in the file (all the things you can look up).

you can simulate this in emacs. 
  1) open an index.KAF file. 
  2) find the integer (say 2345)
  3) type control-u 2345 control-f
this will position you at the first character of the alist (a parenthesis)

the alist contains a set of key-value pairs. 
to find the abbreviation for the domain, for instance,
you use assoc to find the "abbreviation" entry
and the last thing in the value list is again a number
this number is an index into the file
if you seek to that location you'll find the abbreviation.

the DAASE files have the same structure except that there is a
bit of compression applied (since the DAASE files had to fit on
a single diskette (ah, history, don't you love it?))

the DAASE files are collections of the compiler information
kept in the NRLIB/index.KAF files.

\start
Date: 08 Dec 2005 17:00:24 +0100
From: Martin Rubey
To: Tim Daly
Subject: Re: navigating Axiom's library
Cc: Kai Kaminski, list

Tim Daly writes:

> the database files aren't derived from the +++ comments

Well, I was a bit short here. The ++ comments go (among other things) into
index.KAF, which is then in turn split up into the various databases. The
comments go into browse.daase, for example. The text in the ++ comments is
*exactly* the text appearing in browse.daase.

\start
Date: Thu, 8 Dec 2005 08:47:05 -0800 (PST)
From: Cliff Yapp
To: list
Subject: TeTeX and pdf

I found an email on the tetex list which discusses the change as of
3.0:

http://article.gmane.org/gmane.comp.tex.tetex.general/990

Apparently the modern way to handle pdf vs dvi output is to use the
ifpdf package:

http://www.ctan.org/tex-archive/help/Catalogue/entries/ifpdf.html

So that may help with some of these issues, although I don't know if it
extends to the pstricks and pst-pdf stuff.  Certainly I can remove my
own hack for pdf output :-).

\start
Date: Thu, 8 Dec 2005 08:55:17 -0800 (PST)
From: Cliff Yapp
To: Bill Page
Subject: RE: hyperlinked algebra

Hmm, upon reading more of the pstricks site I see that either the
pst-pdf package or the pdftricks package should be good solutions.  I
guess the thing for me to do is download all the most recent pstricks
stuff and upgrade my tetex distro, then try again.

\start
Date: Thu, 8 Dec 2005 09:21:56 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Is email arriving slowly?

Is it me or is email to the list not being delivered very quickly? 

\start
Date: Thu, 8 Dec 2005 23:42:32 -0500
From: Bill Page
To: Cliff Yapp
Subject: RE: hyperlinked algebra

On December 8, 2005 10:21 AM C Y wrote:

> > At the pstricks website:
> > 
> > http://www.tug.org/PSTricks/main.cgi?file=pdf/pdfoutput
> > 
> > ... 
> > They seem to recommend using:
> > 
> > dvips <file>.dvi
> > ps2pdf <file>.ps
> > 
> > instead of 'dvipdfm'. We can do this.
> 
> I thought dvips either messed up hyperlinking or resulted in
> those horrible boxes around linked text - has this changed now?
> ... 

At

http://www.tug.org/applications/hyperref/manual.html

it says we need to specify the 'dvips' option on the hyperref
package, so I edited my version

http://wiki.axiom-developer.org/book--main--1/Endpaper2

of Tim's endpaper.pamphlet with hyperlinks to include:

\usepackage[dvips,final,colorlinks=true,pdfstartview=FitH]{hyperref}

and clicked 'Save' to create a new 'dvi' file.

At

http://arxiv.org/hypertex

it says that we have to use the -z option on dvips. BTW, it
also says which dvi viewers support hyperref. So then directly
on the axiom-developer.org server I used the following command:

  % dvips -z -o endpaper2.ps endpaper2.dvi

to produce an intermediate postscript file and the command:

  % ps2pdf endpaper2.ps

to produce a new 'pdf' file.

Now the 'pdf' link on the above mentioned Axiom Wiki page

http://wiki.axiom-developer.org/images/book--main--1/endpaper2.pdf

displays the file with both lines between the boxes and
active hyperlinks!

I also changed the href in the top node to point to the url
for catdef.spad.pdf on the wiki and sure enough clicking
the link opens that file! If we include links like this in
the file, it seems that as a minimum we will have to provide
*both* .pdf and .dvi links.

The table of contents hyperlinks all work and no ugly boxes
around hyperlinks ... I think that's actually controlled by
the hyperref option 'colorlinks=true'.

Could you please also check whether the lines and hyperlinks
still appear properly on this revised 'dvi' file:

http://wiki.axiom-developer.org/images/book--main--1/endpaper2.dvi

and let me know how it looks? Thanks.

If everything still works I think I will change the pamphlet
processing sequence as follows:

weave (tex) --> latex (dvi) --> dvips (ps) --> ps2pdf (pdf)
                                           --> gzip (gz)

and then provide the links on the pamphlet thumbnail page:

  Download: pdf dvi ps gz src tex log

Is compressed (gzipped) postscript still sufficiently popular?

\start
Date: Thu, 08 Dec 2005 23:28:58 -0600
From: MathAction (Bjørn)
To: MathAction
Subject: [AxiomOutputFormatting] (new) 

One of the most frustrating things as a novice axiom user is to try to figure out how to get axiom output to appear in the desired form.  For instance:

\begin{axiom}
(a + b)/2
\end{axiom}
but if one wanted it formatted as a single fraction
\begin{axiom}
(a + b)/2 :: FRAC POLY INT
\end{axiom}

However, this doesn't always work:
\begin{axiom}
1/2 - exp(-t)
\end{axiom}

but if one wanted the output to appear as:
\begin{equation}
\frac{1}{2} + e^{(-t)}
\end{equation}
 
\begin{axiom}
1/2 - exp(-t) :: POLY FRAC Integer
\end{axiom}

this doesn't work.  So how does one deal with output formatting for Expression Integers?

\start
Date: Fri, 09 Dec 2005 06:09:29 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [AxiomOutputFormatting] 

You have to say
\begin{axiom}
1/2 - exp(-t) :: EXPR FRAC INT
\end{axiom}

since you have an expression here, not a polynomial.

In general, to modify the way Axiom outputs your expressions, you have to write a wrapper domain that replaces 'coerce: % -> OutputForm' with your own code. This is not difficult, I have done this to convince Axiom to "output expressions in distributed form":SandBoxDistributedExpression.

\start
Date: Fri, 09 Dec 2005 06:40:44 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [#237 fails to display proper TeX] (new) 

My TeX does not complain (and displays it correctly)

\begin{axiom}
solve([x^2 + y^2 - 2*(ax*x + ay*y) = l1, x^2 + y^2 - 2*(cx*x + cy*y) = l2],[x,y])
\end{axiom}

\start
Date: Fri, 09 Dec 2005 14:16:53 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: hyperlinked algebra

root wrote:
 > i've hacked src/doc/endpaper.pamphlet to add hyperlinks.
 > most of the links go to catdef.spad.dvi because they are
 > categories that live there. i don't know how to implement
 > #tags in latex yet.

I just had a quick look at your file. It's cool that hyperref can also 
refer to dvi files by just saying something like

\href{catdef.spad.dvi}{abelsg}

I was always looking for something like that. I've never tried it out 
though. Thanks for showing that to me.



HOWEVER, I would not have written the links in endpaper.pamphlet as you 
have done. OK, I understand that endpaper.pamphlet is just a quick hack.

I would have proposed just to write \adtype{AbelianSemiGroup} (sorry 
that I borrowed the \adtype tag from ALLPROSE, but it is just a tag 
after all). In the definition of \adtype one would have to take care 
about the file in which AbelianSemiGroup is defined. That frees you from 
changing anything in endpaper.pamphlet (or any other file that refers to 
AbelianSemiGroup) if someone ever thinks of moving that definition to 
some other file. One just had to redefine \adtype (and even that could 
be done automatically).

Next, don't use the abbreviation in the \href command. That could be 
automatically extracted from AbelianSemiGroup, if you really want to see 
the abbreviation. (I would rather be happy with the full name.)

Furthermore, if you put ".dvi" into the link you basically restrict 
yourself to dvi output (unless you redefine \href to swallow the 
extension ".dvi"). Why not having everything, dvi, ps, pdf, html, ...?
With ALLPROSE I now can produce the first 4 reasonably well.

Every information is already in "AbelianSemiGroup" some scripts should 
be responsible for making the links correct. I am very much against 
hardcoding references to files if you actually mean a reference to a 
domain/category.

\start
Date: Fri, 09 Dec 2005 14:40:13 +0100
From: Ralf Hemmecke
To: Cliff Yapp
Subject: Re: hyperlinked algebra

C Y wrote:
> If pstricks can indeed do all that we want with fancy linking and
> diagrams it might be a better target than XYpic - there exist some
> fairly sophisticated graphing routines for pstricks, and it would be
> fun to teach Axiom to output (say) pst-3dplot TeX instead of an image
> for plotting.  (Although I'm not sure how well it could render some
> things - experimentation would be required).
> 
> I had intended to explore this possibility with XYpic, but initially at
> least it should be either XYpic or pstricks instead of both.  If there
> is the desire for the other later it can always be added.

I am not completely sure, but I fear that pstricks (as the name 
suggests) does some trick in PostScript. I don't think that it would be 
wise to rely on that package if our goal would be to create different 
forms of output (dvi, ps, pdf, html, ...).

Can someone convince me that one can convert from ps to other formats 
easily?

\start
Date: Fri, 9 Dec 2005 06:10:41 -0800 (PST)
From: Cliff Yapp
To: Bill Page
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> At
> 
> http://www.tug.org/applications/hyperref/manual.html
> 
> it says we need to specify the 'dvips' option on the hyperref
> package, so I edited my version
> 
> http://wiki.axiom-developer.org/book--main--1/Endpaper2
> 
> of Tim's endpaper.pamphlet with hyperlinks to include:
> 
> \usepackage[dvips,final,colorlinks=true,pdfstartview=FitH]{hyperref}
> 
> and clicked 'Save' to create a new 'dvi' file.

Huh.  That's good to know - I guess I've always focused on the pdflatex
side of hyperref.  I'd better stop assuming things.

[snip]
 
> Now the 'pdf' link on the above mentioned Axiom Wiki page
> 
> http://wiki.axiom-developer.org/images/book--main--1/endpaper2.pdf
> 
> displays the file with both lines between the boxes and
> active hyperlinks!

WOW!  Very impressive!  You have a good instinct for this Bill - I'd
probably have fussed with pdflatex stuff for another week.

> I also changed the href in the top node to point to the url
> for catdef.spad.pdf on the wiki and sure enough clicking
> the link opens that file! If we include links like this in
> the file, it seems that as a minimum we will have to provide
> *both* .pdf and .dvi links.

Hmm.  Or better still, we need to provide a conditional somewhere that
will link to the dvi in dvi files and the pdf in pdf files.  There is
probably some way to do this, althought it will probably involve
"conditional latex" - IIRC for the graphics command I used in
maximabook it could be intelligent about including pdf/png vs.
postscript based on output.

> The table of contents hyperlinks all work and no ugly boxes
> around hyperlinks ... I think that's actually controlled by
> the hyperref option 'colorlinks=true'.

Huh!  Well, live and learn.  I wonder why I never found that when I was
working with that cteq manual...

> Could you please also check whether the lines and hyperlinks
> still appear properly on this revised 'dvi' file:
> 
> http://wiki.axiom-developer.org/images/book--main--1/endpaper2.dvi
> 
> and let me know how it looks? Thanks.

I'll have to check at home - my work machine has no dvi viewer.

> If everything still works I think I will change the pamphlet
> processing sequence as follows:
> 
> weave (tex) --> latex (dvi) --> dvips (ps) --> ps2pdf (pdf)
>                                            --> gzip (gz)
> 
> and then provide the links on the pamphlet thumbnail page:
> 
>   Download: pdf dvi ps gz src tex log
> 
> Is compressed (gzipped) postscript still sufficiently popular?

I expect for slow internet connections it might be.  VERY impressive
result Bill!

\start
Date: Fri, 9 Dec 2005 06:43:35 -0800 (PST)
From: Cliff Yapp
To: Ralf Hemmecke
Subject: Re: hyperlinked algebra

--- Ralf Hemmecke wrote:

> C Y wrote:
> > If pstricks can indeed do all that we want with fancy
> > linking and diagrams it might be a better target than 
> > XYpic - there exist some fairly sophisticated graphing
> > routines for pstricks, and it would be fun to teach Axiom 
> > to output (say) pst-3dplot TeX instead of an image
> > for plotting.  (Although I'm not sure how well it could
> > render some things - experimentation would be required).
> > 
> > I had intended to explore this possibility with XYpic, but
> > initially at least it should be either XYpic or pstricks 
> > instead of both.  If there is the desire for the other later
> > it can always be added.
> 
> I am not completely sure, but I fear that pstricks (as the 
> name  suggests) does some trick in PostScript. I don't think
> that it would be wise to rely on that package if our goal 
> would be to create different forms of output (dvi, ps, pdf,
> html, ...).

I don't propose to rely on it, just to have it as an output option for
Axiom's TeX routines.

The only think we might actually rely on either of these for is for
hyperlinked diagrams.  So far we have (please correct me if I've missed
something Bill):

XYPic:  Can create hyperlinked diagrams without requiring postscript
specific logic, but result renders slowly in Acroread.  Command syntax
is complex to say the least.  Does not have many packages written using
it.

PSTricks:  Can create hyperlinked diagrams.  Requires postscript logic
as an intermediate step, but result appears to render much faster in
Acroread than XYPic's output.  Somewhat less intimidating than XYpic in
the syntax department, and has a great deal of convenient plotting and
other packages which may also be useful to Axiom.  There are a variety
of options which can be used to create pdf output to be explored, some
of which also permit the use of pdflatex for final steps.

Neither way has yet demonstrated the ability to reproduce these
diagrams in HTML, and I am not at all sure how we would even want to
proceed there.  Images of the diagrams with image maps defined?  Some
sort of fixed text positioning?

Even though viable options exist for dvi and pdf for display, no one
has yet come up with a convincing way to generate a human usable
diagramming of the entire system.  A way must be found, and then the
logic to generate the required TeX automatically will need to be
created, probably as part of the Axiom build process.

> Can someone convince me that one can convert from ps to other 
> formats easily?

It's seldom effortless, but as Bill has demonstrated with the proper
options the dvi->ps->pdf path can produce good results.  I have a
feeling html will be the kicker, but then I'm not really sure HTML is
up to what we want to do in any case.

Seeing Bill's result I am much more comfortable with pstricks than I
was.  I have a feeling there are some really neat possibilities for
generating Axiom plotting output as pstricks LaTeX.  This is not
anything we will depend on, since Axiom can already produce graphics we
can include (witness the Axiom book) but it might be a spiffy feature
to offer the Axiom+LaTeX document writing crowd (hopefully there will
be a lot of them in the future ;-)

Cheers,
CY

P.S.  Incidently, I tried looking at the Leo tutorials last night and
my initial inclination is to stick with Emacs for now because of it's
AucTeX environment and other available goodies.  Leo's outlining is
interesting but for the moment I am more drawn to Emacs's document
editing features.  Also, it wasn't clear to me how to use leo to
produce both:

pamphlet->legal LaTeX document with source code in correct environment
pamphlet->source code that can be compiled 

The latter is obvious, but the former wasn't clear to me from what I
read.

Interesting Leo vs. Emacs remarks (maybe a bit dated now):
http://groups.google.com/group/comp.emacs/browse_frm/thread/dea941c6ba7c3440/9df6397eeb5244f4?lnk=st&q=Leo+emacs&rnum=1#9df6397eeb5244f4

Maybe worth a look:
http://www.jurta.org/emacs/ee/

\start
Date: Fri, 09 Dec 2005 16:10:23 +0100
From: Ralf Hemmecke
To: Cliff Yapp
Subject: Re: hyperlinked algebra

C Y wrote:
> --- Ralf Hemmecke wrote:

> XYPic:  Can create hyperlinked diagrams without requiring postscript
> specific logic, but result renders slowly in Acroread.  Command syntax
> is complex to say the least.  Does not have many packages written using
> it.

My from the point of being independent from PostScript, I would rather 
choose that package over pstricks. But as you say, it's quite a burden 
to learn it. And if the output renders slowly with acroread, that's 
another point against it.

> Neither way has yet demonstrated the ability to reproduce these
> diagrams in HTML, and I am not at all sure how we would even want to
> proceed there.  Images of the diagrams with image maps defined?  Some
> sort of fixed text positioning?

You are somewhat right. As for the web I would rather like to see 
something more interactive, like, for example, zooming in and out, 
selecting certain branches I want to see, etc. In fact, I am not sure 
whether I would want to see the graph printed.

When I started to look a bit more into the Algebra library shipped with 
Aldor, I took some time to produce a .fig of the categories, domains, 
and packages.

Click the "Graph" at http://www.hemmecke.de/aldor/

There are in fact two problems.
1) Get the graph right, ie, reflect the actual dom/cat/pgk in the
    library.
2) Show it in some form for humans.

The first point can certainly be done automatically some day. There 
should just be someone who would think of a nice format (SVG?) and 
writes a script which does this.

The second point is nearly impossible for a program. TouchGraph is not 
so bad, but I have the feeling that I don't easily get an _overview_ of 
the packages etc.

So getting a good Graph of the Algebra is not easy no matter whether we 
use pstricks or xypic.

Is there someone who is interested in (1)?

\start
Date: Fri, 9 Dec 2005 11:49:55 -0500
From: Tim Daly
To: Cliff Yapp
Subject: [Alan Eliasen: Re: [Frink] unit suggestion]

CY,

I'm on the Frink mailing list. Did you see this note?
In particular, are you aware of the http reference?


------- Start of forwarded message -------
To: frink@yahoogroups.com
Date: Fri, 09 Dec 2005 02:52:11 -0700
Subject: Re: [Frink] unit suggestion

.....<snip>.....

   By the way, you shouldn't have to do *any* modification of many files
containing normal mathematical notation to turn it into Frink notation.
 Frink is designed, more than any other language I know, to parse normal
mathematical notation and units correctly without any modification.  If
you follow, say, the SI (the International System of units, the modern
"metric" system) rules and style conventions (
http://physics.nist.gov/cuu/Units/rules.html ), Frink will usually parse
your equations without ambiguity or error.  Except where's there's
ambiguity in standard mathematical notation.

.....<snip>.....

   For a really interesting look into ambiguities in standard
mathematical notation, here's a really interesting talk by Stephen
Wolfram, the main person behind Mathematica:

http://www.stephenwolfram.com/publications/talks/mathml/index.html

   Especially read the section called "Computers" to read about
precedence, ambiguity in normal mathematical notation, and different
attempts to get around it.  No, really, read the whole thing.  It's a
really great article.  Mathematica and Frink take different tactics for
underlying representation, but the problem of ambiguity in normal
mathematical notation is the same.  Mathematica breaks normal SI
orthography, forcing you to write "Meter" instead of "m" or "meter",
etc, so Frink's a bit more natural.

.....<snip>..... 
------- End of forwarded message -------

\start
Date: Fri, 9 Dec 2005 08:23:13 -0800 (PST)
From: Cliff Yapp
To: Ralf Hemmecke
Subject: Re: hyperlinked algebra

--- Ralf Hemmecke wrote:

> C Y wrote:
> > --- Ralf Hemmecke wrote:
> 
> > XYPic:  Can create hyperlinked diagrams without requiring
> > postscript specific logic, but result renders slowly in 
> > Acroread.  Command syntax is complex to say the least.  
> > Does not have many packages written using it.
> 
> My from the point of being independent from PostScript, I 
> would rather choose that package over pstricks. But as you
> say, it's quite a burden to learn it. And if the output 
> renders slowly with acroread, that's another point against it.

What I'm hoping will someday be the case is that we will have an
automated way to generate the TeX for all these diagrams when Axiom is
built.  At that point, we can implement output in whatever TeX style we
want, and I see no reason not to have multiple options available if
someone writes the code for them ;-).  For a "standard" way I think
pstricks has won the day, but XYpic can certainly be an option later if
there is interest, if we get to the point of autogenerating these
suckers.  (Which we really, really need to get to somehow.)

> > Neither way has yet demonstrated the ability to reproduce
> > these diagrams in HTML, and I am not at all sure how we 
> > would even want to proceed there.  Images of the diagrams 
> > with image maps defined?  Some sort of fixed text 
> > positioning?
> 
> You are somewhat right. As for the web I would rather like to
> see something more interactive, like, for example, zooming in
> and out, selecting certain branches I want to see, etc. In 
> fact, I am not sure whether I would want to see the graph 
> printed.

For the "Axiom volumes" we definitely want to print them.  That is in
fact one of the things that makes the layout problem so challenging. 
For the web however, we might not be as constrained.
 
> When I started to look a bit more into the Algebra library 
> shipped with Aldor, I took some time to produce a .fig of the
> categories, domains, and packages.
> 
> Click the "Graph" at http://www.hemmecke.de/aldor/

Unfortunately I don't have a fig viewer handy, but I'll try to check it
out later.

> There are in fact two problems.
> 1) Get the graph right, ie, reflect the actual dom/cat/pgk 
> in the library.
> 2) Show it in some form for humans.
> 
> The first point can certainly be done automatically some day.
> There should just be someone who would think of a nice format 
> (SVG?) and writes a script which does this.

Probably a little more involved, but I doubt too much - I would like to
see a lisp level solution that maps everything at compile time, but I
don't know if that's optimal either.

> The second point is nearly impossible for a program. 
> TouchGraph is not so bad, but I have the feeling that 
> I don't easily get an _overview_ of the packages etc.

I tend to agree.  Sometimes the inherent complexity of the problem
defies simple visualization.

> So getting a good Graph of the Algebra is not easy no matter
> whether we use pstricks or xypic.

Agreed.

> Is there someone who is interested in (1)?

Eventually :-).  It will need to wait for a while if I'm to do it, I
fear.

\start
Date: Fri, 9 Dec 2005 12:29:26 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: hyperlinked algebra

whew.... 

hey, it's open source. change it any way you'd like.
you have nothing to fear but the feedback :-)

>  > i've hacked src/doc/endpaper.pamphlet to add hyperlinks.
>  > most of the links go to catdef.spad.dvi because they are
>  > categories that live there. i don't know how to implement
>  > #tags in latex yet.
> 
> I just had a quick look at your file. It's cool that hyperref can also 
> refer to dvi files by just saying something like
> 
> \href{catdef.spad.dvi}{abelsg}
> 
> I was always looking for something like that. I've never tried it out 
> though. Thanks for showing that to me.
> 

glad to be of service.

> HOWEVER, I would not have written the links in endpaper.pamphlet as you 
> have done. OK, I understand that endpaper.pamphlet is just a quick hack.

we could take the endpaper example, make it dynamic, and put it on the wiki.

this is much less of a quick hack but much more useful.

> I would have proposed just to write \adtype{AbelianSemiGroup} (sorry 
> that I borrowed the \adtype tag from ALLPROSE, but it is just a tag 
> after all). In the definition of \adtype one would have to take care 
> about the file in which AbelianSemiGroup is defined. That frees you from 
> changing anything in endpaper.pamphlet (or any other file that refers to 
> AbelianSemiGroup) if someone ever thinks of moving that definition to 
> some other file. One just had to redefine \adtype (and even that could 
> be done automatically).

\adtype? since this appears to by your macro i can't comment.


> Next, don't use the abbreviation in the \href command. That could be 
> automatically extracted from AbelianSemiGroup, if you really want to see 
> the abbreviation. (I would rather be happy with the full name.)

the original end papers on the inside cover of the jenks book used
full domain names. however they had the luxury of 2 pages of space.
my attempt at reproducing the information ran into the edges. to
save space and still keep the information i was forced to use 
abbreviations. full names wouldn't fit.

> Furthermore, if you put ".dvi" into the link you basically restrict 
> yourself to dvi output (unless you redefine \href to swallow the 
> extension ".dvi"). Why not having everything, dvi, ps, pdf, html, ...?
> With ALLPROSE I now can produce the first 4 reasonably well.

well i tried http urls to the wiki but those failed (at least in xdvi)
so i played around more and found i could get to local .dvi files.
since i was only trying to illustrate an idea i was advocating the
local files were sufficient. bill has already taken it a step further.

> Every information is already in "AbelianSemiGroup" some scripts should 
> be responsible for making the links correct. I am very much against 
> hardcoding references to files if you actually mean a reference to a 
> domain/category.

the endpaper.pamphlet was an example to show what i was talking about.
you're welcome to modify it any way you'd like.

actually the latest "grand scheme" is related to Bill's question about
parents/children. we could certainly hack up a routine in lisp or
aldor that, given a domain, could spit out the parent/siblings/children 
and then dynamically create the file containing the graph. thus a user 
could point at a domain and ask for the graph.

the layout is a challenge though. laying out endpaper took about 4 days.

\start
Date: Fri, 9 Dec 2005 12:46:00 -0500
From: Tim Daly
To: list
Subject: Re: hyperlinked algebra

> actually the latest "grand scheme" is related to Bill's question about
> parents/children. we could certainly hack up a routine in lisp or
> aldor that, given a domain, could spit out the parent/siblings/children 
> and then dynamically create the file containing the graph. thus a user 
> could point at a domain and ask for the graph.

oh, and the dynamic scheme can do much more than the static scheme
since the family graph of 
   POLY(FRAC(INT))
is wildly different from
   POLY(COMPLEX(FLOAT))

\start
Date: Fri, 09 Dec 2005 17:59:49 +0100
From: Ralf Hemmecke
To: Cliff Yapp
Subject: Re: hyperlinked algebra

>> Click the "Graph" at http://www.hemmecke.de/aldor/
> 
> Unfortunately I don't have a fig viewer handy, but I'll try to check it
> out later.

Well, click on "poster" then. It's a 8 pages postscript that you could 
glue together.

\start
Date: Fri, 9 Dec 2005 12:53:38 -0500
From: Tim Daly
To: list
Subject: Re: hyperlinked algebra

> > actually the latest "grand scheme" is related to Bill's question about
> > parents/children. we could certainly hack up a routine in lisp or
> > aldor that, given a domain, could spit out the parent/siblings/children 
> > and then dynamically create the file containing the graph. thus a user 
> > could point at a domain and ask for the graph.
> 
> oh, and the dynamic scheme can do much more than the static scheme
> since the family graph of 
>    POLY(FRAC(INT))
> is wildly different from
>    POLY(COMPLEX(FLOAT))
> 

and the first step of that is to design a package Family
which takes a fully developed domain and returns the family
tree. Along with functions 

  parents()   -> List(Type)
  siblings()  -> List(Type)
  childred()  -> List(Type)
  geneology() -> Graph(Type)
  layout()    -> List(List(GraphNode))

then we can test it.

\start
Date: Fri, 9 Dec 2005 09:06:04 -0800 (PST)
From: Cliff Yapp
To: Ralf Hemmecke
Subject: Re: hyperlinked algebra

--- Ralf Hemmecke wrote:

> >> Click the "Graph" at http://www.hemmecke.de/aldor/
> > 
> > Unfortunately I don't have a fig viewer handy, but I'll try
> > to check it out later.
> 
> Well, click on "poster" then. It's a 8 pages postscript that
> you could glue together.

Same problem :-(.  All I can view at work is PDF and html - I have no
tex tools on this machine at all :-/.

\start
Date: Fri, 9 Dec 2005 09:04:12 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: Re: [Alan Eliasen: Re: [Frink] unit suggestion]

--- Tim Daly wrote:

> CY,
> 
> I'm on the Frink mailing list. Did you see this note?
> In particular, are you aware of the http reference?
> 
> .....<snip>.....
> 
>  By the way, you shouldn't have to do *any* modification of 
> many files containing normal mathematical notation to turn it
> into Frink notation. Frink is designed, more than any other
> language I know, to parse normal mathematical notation and 
> units correctly without any modification.  If you follow, say,
> the SI (the International System of units, the modern
> "metric" system) rules and style conventions (
> http://physics.nist.gov/cuu/Units/rules.html ), Frink will 
> usually parse your equations without ambiguity or error.  
> Except where's there's ambiguity in standard mathematical 
> notation.
> 
> .....<snip>.....

I'm not on the Frink list, but I'm familiar with the nist site - it's
actually the primary resource for units information for those who
haven't bought the actual ISO standard or one of the other major
compilations of conversion factors out there.

As to formatting issues, there is actually a TeX package out there
called SIstyle which works off of these standards to properly format
units - I intend to utilize it as part of Axiom's TeX output
capabilities.

>    For a really interesting look into ambiguities in standard
> mathematical notation, here's a really interesting talk by 
> Stephen Wolfram, the main person behind Mathematica:
> http://www.stephenwolfram.com/publications/talks/mathml/index.html
> 
> Especially read the section called "Computers" to read about
> precedence, ambiguity in normal mathematical notation, and 
> different attempts to get around it.  No, really, read the 
> whole thing.  It's a really great article.  Mathematica and 
> Frink take different tactics for underlying representation, 
> but the problem of ambiguity in normal mathematical notation 
> is the same.  Mathematica breaks normal SI orthography, 
> forcing you to write "Meter" instead of "m" or "meter",
> etc, so Frink's a bit more natural.

There's a problem there, since a computer algebra environment has to
deal with so many possible inputs.  I'll take a look at the article,
but I'm already convinced of the ambiguity inherent in many notations. 
We might be able to eventually allow something like 5[m] as input for
units but that is yet to be seen.  Output is a different matter - Axiom
has some really interesting abilities there, as the available test unit
code already demonstrates.  I don't know about terminal/ASCII output
formatting, but in TeX and similar environments we should be able to do
quite well at providing SI formatting, ambiguity and all :-).  Input,
of course, cannot be ambiguous so the user will just have to come to
terms with it :-/.

One idea, which I'll just throw out, is to have input contexts.  There
are many cases where the same notation is used to mean different things
in different contexts.  So perhaps we could come up with a way for a
user to specify, for a given input, what context they were using. 
E.g., a Unit context would know that 5*m is actually
setUnit(<storagevariable>,meters,Length,5) or something like that. 
Then the only problems that arise would be when one actually has
conflicting syntax conventions in the same expression, but that's a
problem no matter how you shuffle things.

Just an idea.  It might be too cumbersome to actually implement, but if
one wants to do a great deal of work in (say) one scientific field and
not worry about the syntax in other fields, it could be a considerable
help.  And if you had to put it in a different context, well there's
always the underlying translation made before sending it to the CAS
itself, which by definition has to be a unique notation.

Heh - I smell another paper:  Variable Mathematical Syntatical Input
and Output Rules in a Computer Algebra System based on Context
Environments.  I'll have to see if someone has written it already ;-). 
Sounds like the B-sharp idea might be related in some way.

\start
Date: Fri, 09 Dec 2005 18:38:50 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: hyperlinked algebra

Have you ever tried

ar x libaxiom.al
aldor -fasy algcat.ao

You'll get a file algcat.asy which looks rather lispish to me. I wonder 
if some of you (LISP programmers) could do a nice output from that.
In there is the whole source of the program as a syntax tree (and if 
there were any ++ comments, they should also be there).

To write a browser on these asy files would be great. I would actually 
already be happy if I could get the categorial part in some nice way (I 
mean as something like

with {
   a: Foo -> Bar;
   foo: ...
}

together with the ++ comments and aldordoc that could lead to a 
hyperlinked webpage (or .dvi or .pdf).

Is there any hope to get this done quickly?

Ralf

root wrote:
>> actually the latest "grand scheme" is related to Bill's question about
>> parents/children. we could certainly hack up a routine in lisp or
>> aldor that, given a domain, could spit out the parent/siblings/children 
>> and then dynamically create the file containing the graph. thus a user 
>> could point at a domain and ask for the graph.
> 
> oh, and the dynamic scheme can do much more than the static scheme
> since the family graph of 
>    POLY(FRAC(INT))
> is wildly different from
>    POLY(COMPLEX(FLOAT))

\start
Date: Fri, 9 Dec 2005 13:37:51 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: hyperlinked algebra

the .asy files are intended to be used in the axiom interpreter.
the code to understand them is in the src/interp directory.

\start
Date: Fri, 09 Dec 2005 19:07:33 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: hyperlinked algebra

>> I would have proposed just to write \adtype{AbelianSemiGroup} (sorry 
>> that I borrowed the \adtype tag from ALLPROSE, but it is just a tag 
>> after all). In the definition of \adtype one would have to take care 
>> about the file in which AbelianSemiGroup is defined. That frees you from 
>> changing anything in endpaper.pamphlet (or any other file that refers to 
>> AbelianSemiGroup) if someone ever thinks of moving that definition to 
>> some other file. One just had to redefine \adtype (and even that could 
>> be done automatically).
> 
> \adtype? since this appears to by your macro i can't comment.

Well, it is just a name. I just used it since I use it in ALLPROSE to 
tag types. What one can do with a tagged thing is completely up to the 
style. And whether you use my definitions in aldordoc.sty or something 
more fancy, it's up to you.

I just wanted to make the point that there should be a very simple 
interface for the people who are actually using the tags. If a 
documentation writer always has to remember in which file what is 
defined that is too much burden. And that burden could be taken away by 
a good design and some scripts that collect and add all the information 
that is apperently not completely visible in the .tex/.pamphlet file.

>> Next, don't use the abbreviation in the \href command. That could be 
>> automatically extracted from AbelianSemiGroup, if you really want to see 
>> the abbreviation. (I would rather be happy with the full name.)

> the original end papers on the inside cover of the jenks book used
> full domain names. however they had the luxury of 2 pages of space.
> my attempt at reproducing the information ran into the edges. to
> save space and still keep the information i was forced to use 
> abbreviations. full names wouldn't fit.

I think if you want to convey information "size" is a bad excuse.

>> Furthermore, if you put ".dvi" into the link you basically restrict 
>> yourself to dvi output (unless you redefine \href to swallow the 
>> extension ".dvi"). Why not having everything, dvi, ps, pdf, html, ...?
>> With ALLPROSE I now can produce the first 4 reasonably well.

> well i tried http urls to the wiki but those failed (at least in xdvi)
> so i played around more and found i could get to local .dvi files.

Well, as Bill already said. Xdvi can be configured to open a web browser 
with the url you click on in the .dvi file. Say "make dvi" in ALLPROSE 
and click at the URL on the first page. If no webbrowser opens in your 
case you should just re-configure you xdvi. I use xdvik from 
http://xdvi.sourceforge.net/, by the way.

Go to
  Options>Preferences>Helper Applications
and say under "Other"
  firefox -raise -remote 'openURL(%s,new-tab)'
or
  firefox -raise -remote 'openURL(%s,new-window)'

That works for me.

> actually the latest "grand scheme" is related to Bill's question about
> parents/children. we could certainly hack up a routine in lisp or
> aldor that, given a domain, could spit out the parent/siblings/children 
> and then dynamically create the file containing the graph. thus a user 
> could point at a domain and ask for the graph.

Well if I could easily get access to parents/siblings/children from the 
.asy file in a some more attractive way for me, that would make me happy 
and would probably be the dead of current hyperdoc, since then
hyperdoc(-similar) pages could be created in the following way

.pamphlet (with aldordoc-like +++ descriptions) -->
.ao file                                        -->
libaxiom.al

Having libaxiom.al then extract the .ao again   -->
.asy  (with +++ comments)                       -->
.tex (with the +++ comments like in ALLPROSE)   -->
latex/pdflatex/htlatex that .tex files to get an API
descriptions in dvi/pdf/html form.

That would be great.

\start
Date: Fri, 09 Dec 2005 19:10:48 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: hyperlinked algebra

A very helpful hint. ;-)
I don't think I start browsing through 196 files.

Ralf

root wrote:
> the .asy files are intended to be used in the axiom interpreter.
> the code to understand them is in the src/interp directory.

\start
Date: Fri, 9 Dec 2005 14:51:12 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

On December 9, 2005 12:29 PM Tim Daly (root) wrote:

> ... 
> actually the latest "grand scheme" is related to Bill's question
> about parents/children. we could certainly hack up a routine in
> lisp or aldor that, given a domain, could spit out the 
> parent/siblings/children and then dynamically create the file
> containing the graph. thus a user could point at a domain and ask
> for the graph.

Yes! I am very interested in this. It could become a graphical
viewer/navigator for the Axiom database. I would be great to have
this work through a web browser and available on the Axiom wiki.

> 
> the layout is a challenge though. laying out endpaper took 
> about 4 days.
> 

For layout I think we should depend on automatic graph layout
software such as GraphViz

http://www.graphviz.org

I works surprizing well.

We already have GraphViz on MathAction

http://wiki.axiom-developer.org/GraphViz

and there is an extension for LaTeX that processes GraphViz
commands. There are apparently several ways to add hyperref-like
links to these graphics in LaTeX but I have not had time yet to
try any of these.

I have just been waiting for the little extra time I would
need to key in the GraphViz specification for the graphs in
the endpaper.pamphlet file to see what kind of layout it will
produce automatically. GraphViz is very simple to use for
simple graphs and has more sophisticated options for more
sophisticated graphs.

For graphs that are displayed in an HTML page, GraphViz has
the ability to automatically create image maps that make the
graph clickable with hyperlinks in both nodes and edges.

\start
Date: Fri, 9 Dec 2005 15:03:16 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: hyperlinked algebra

On December 9, 2005 10:10 AM Ralf Hemmecke wrote:
> ... 
> There are in fact two problems.
> 1) Get the graph right, ie, reflect the actual dom/cat/pgk in
>    the library.
> 2) Show it in some form for humans.
> 
> The first point can certainly be done automatically some day.
> There should just be someone who would think of a nice format
> (SVG?) and writes a script which does this.

I think SVG is too general. We should use a graph description
language such as the GraphViz dot format.

> 
> The second point is nearly impossible for a program. 
> TouchGraph is not so bad, but I have the feeling that I don't
> easily get an  _overview_ of the packages etc.

I think programs that include more sophisticated graph layout
algorithms combined with manual graph manipulation might make
this possible. In Axiom the shear scale of the algebra graph
with 1,300 nodes and about 20,000 edges is just too much for
currently available software. But with a little intellegent help
from a human designer - picking an pruning the graph in a relevant
manner - I think that it should be doable.

> 
> So getting a good Graph of the Algebra is not easy no matter 
> whether we use pstricks or xypic.
>

I think we should look at automatic graph layout tools like
GraphViz.

http://www.graphviz.org

I works surprizing well.

We already have GraphViz on MathAction

http://wiki.axiom-developer.org/GraphViz
 
> Is there someone who is interested in (1)?
> 

Yes, I am very interested in (1). One source of information
like this in Axiom is the Axiom database (daase files).

\start
Date: Fri, 9 Dec 2005 12:45:03 -0800 (PST)
From: Cliff Yapp
To: Bill Page,	Ralf Hemmecke
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> I think SVG is too general. We should use a graph description
> language such as the GraphViz dot format.

I agree SVG is not the way to go, but I have reservations about
depending on graphviz.

> > The second point is nearly impossible for a program. 
> > TouchGraph is not so bad, but I have the feeling that I don't
> > easily get an  _overview_ of the packages etc.
> 
> I think programs that include more sophisticated graph layout
> algorithms combined with manual graph manipulation might make
> this possible. In Axiom the shear scale of the algebra graph
> with 1,300 nodes and about 20,000 edges is just too much for
> currently available software. But with a little intellegent 
> help from a human designer - picking an pruning the graph in a
> relevant manner - I think that it should be doable.

I always thought the idea of levels might make sense here - each "part"
of Axiom being a single graph node which links to further graph trees. 
Clearly Axiom is far too complex to be usably visualized in any one
graph.

> > So getting a good Graph of the Algebra is not easy no matter 
> > whether we use pstricks or xypic.
> 
> I think we should look at automatic graph layout tools like
> GraphViz.
> 
> http://www.graphviz.org
> 
> I works surprizing well.

For static graphs I agree, but I don't think it can do hyperlinking to
source files.  I think what we want is something that generates a
layout using the algorithms of graphviz and then applies that to
generate the xypic or pstricks TeX needed for display.

Remember, one of the goals is to eventually publish the entire Axiom
system via lulu in book form, so to some extent we must always keep
that in mind.  And I have a hunch hyperlinked pdfs are probably going
to be a favorite for web distribution ;-).

\start
Date: Fri, 9 Dec 2005 16:52:42 -0500
From: Tim Daly
To: Bill Page
Subject: Re: hyperlinked algebra

> I think programs that include more sophisticated graph layout
> algorithms combined with manual graph manipulation might make
> this possible. In Axiom the shear scale of the algebra graph
> with 1,300 nodes and about 20,000 edges is just too much for
> currently available software. But with a little intellegent help
> from a human designer - picking an pruning the graph in a relevant
> manner - I think that it should be doable.
> 

which is why I think that the Family package I mentioned earlier
might be a better way to go. Think of it as an asq-like function
that outputs endpaper pamphlet-like graphs.

\start
Date: Fri, 9 Dec 2005 13:06:28 -0800 (PST)
From: Cliff Yapp
To: Bill Page, Tim Daly
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> We already have GraphViz on MathAction
> 
> http://wiki.axiom-developer.org/GraphViz
> 
> and there is an extension for LaTeX that processes GraphViz
> commands. There are apparently several ways to add hyperref-
> like links to these graphics in LaTeX but I have not had time
> yet to try any of these.

Incredible how much LaTeX functionality is out there if one digs.  I
can't believe how much my initial search missed.  I'm assuming
graphviz.tex and some combination of hyperref and the "URL" attribute
are the target technology?

One drawback here is that, AFAIK, dvi isn't a support output format so
hyperlinked dvis might be out.  Of course, given how much I've already
missed... arrgh.

> I have just been waiting for the little extra time I would
> need to key in the GraphViz specification for the graphs in
> the endpaper.pamphlet file to see what kind of layout it will
> produce automatically. 

Drool...

> GraphViz is very simple to use for simple graphs and has more
> sophisticated options for more sophisticated graphs.
> For graphs that are displayed in an HTML page, GraphViz has
> the ability to automatically create image maps that make the
> graph clickable with hyperlinks in both nodes and edges.

Sweet.  Can it work within size constraints?

\start
Date: 09 Dec 2005 16:43:44 -0500
From: Camm Maguire
To: Juho Snellman
Subject: Re: [Gcl-devel] Re: unexec and fedora core 4
Cc: Matt Kaufmann, Sandip Ray

Greetings!

OK, here is what I believe now to be the case -- the SELinux option
allow_execmem, which is 'active' on the bad box, is causing the
problem.  All is well if one takes the drastic action of 

sudo /bin/sh -c "/usr/sbin/setenforce 0"

but will probably allso work if one changes

/etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem false;

to

/etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem true;

and 

sudo /bin/sh -c "cd /etc/selinux/strict/src/policy && make load"

though I have not confirmed this not wanting to hose the machine in
question. 

The security people appear to persist in their (IMHO quite erroneous)
assumption that there is no legitimate need for an executable heap.
Tim Daly likely has further thoughts on this, but I saw the comment
again here:

http://copilotconsulting.com/mail-archives/selinux.2005/msg02006.html

Take care,

Camm Maguire writes:

> Juho Snellman writes:
> 
> > Camm Maguire wrote:
> > > Greetings!  I am a developer of GCL, which shares unexec with emacs.
> > > I have noticed on certain recent Fedora Core 4 machines, binaries
> > > produced with unexec cannot mprotect memory (allocated with brk)
> > > PROT_EXEC (returning EACCESS, i.e. permission denied), whereas
> > > binaries output by ld can do so just fine.  This does not vary with
> > > exec-shield or randomize_va_space settings, and appears quite machine
> > > specific.  The same binary which functions perfectly normally on one
> > > fc4 machine shows this failure only on another machine.  I have as yet
> > > been unable to correlate this with dynamic library placement, or other
> > > settings in /proc/sys.
> > 
> > Just a guess, but this might be related to SELinux. Do the machines
> > have differences in /etc/selinux/config?
> > 
> 
> Bingo! (I think)  The config files are identical, but the problem
> machine has a 'strict' subdirectory with a host of files and options.
> Any idea of what I should look for herein, and what this could have to
> do with unexec vs ld?

\start
Date: Fri, 9 Dec 2005 17:49:50 -0500
From: Tim Daly
To: Emil Volcheck
Subject: [Camm Maguire: Re: [Gcl-devel] Re: unexec and fedora core 4]
Cc: Matt Kaufmann, Sandip Ray

Emil,

If you can find the SELinux people please tell them to start using
GCL as a test case for their ideas. Apparently they seem to believe
that there is no reason for self-modifying code, executable heap
objects, stack execution, dynamic load/store/link, etc.

We in the lisp community are finding SELinux to be less than useful
and, as you can see, the general solution is to "turn it off".

While I agree with SELinux in principle it seems that every new
release adds yet another mindless breakage. 

The least they could do is issue an advisory bulletin on how to
make lisp work with their new restrictions each month. It would
save us a lot of debugging.

A frustrated maintainer,
Tim

------- Start of forwarded message -------

Greetings!

OK, here is what I believe now to be the case -- the SELinux option
allow_execmem, which is 'active' on the bad box, is causing the
problem.  All is well if one takes the drastic action of 

sudo /bin/sh -c "/usr/sbin/setenforce 0"

but will probably allso work if one changes

/etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem false;

to

/etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem true;

and 

sudo /bin/sh -c "cd /etc/selinux/strict/src/policy && make load"

though I have not confirmed this not wanting to hose the machine in
question. 

The security people appear to persist in their (IMHO quite erroneous)
assumption that there is no legitimate need for an executable heap.
Tim Daly likely has further thoughts on this, but I saw the comment
again here:

http://copilotconsulting.com/mail-archives/selinux.2005/msg02006.html

Take care,

Camm Maguire writes:

> Juho Snellman writes:
> 
> > Camm Maguire wrote:
> > > Greetings!  I am a developer of GCL, which shares unexec with emacs.
> > > I have noticed on certain recent Fedora Core 4 machines, binaries
> > > produced with unexec cannot mprotect memory (allocated with brk)
> > > PROT_EXEC (returning EACCESS, i.e. permission denied), whereas
> > > binaries output by ld can do so just fine.  This does not vary with
> > > exec-shield or randomize_va_space settings, and appears quite machine
> > > specific.  The same binary which functions perfectly normally on one
> > > fc4 machine shows this failure only on another machine.  I have as yet
> > > been unable to correlate this with dynamic library placement, or other
> > > settings in /proc/sys.
> > 
> > Just a guess, but this might be related to SELinux. Do the machines
> > have differences in /etc/selinux/config?
> > 
> 
> Bingo! (I think)  The config files are identical, but the problem
> machine has a 'strict' subdirectory with a host of files and options.
> Any idea of what I should look for herein, and what this could have to
> do with unexec vs ld?
> 
> Thank you so much!

\start
Date: 09 Dec 2005 23:59:30 +0100
From: Martin Rubey
To: Tim Daly
Subject: Re: hyperlinked algebra

> Well if I could easily get access to parents/siblings/children from the .asy
> file in a some more attractive way for me, that would make me happy and would
> probably be the dead of current hyperdoc, since then hyperdoc(-similar) pages
> could be created in the following way
> 
> .pamphlet (with aldordoc-like +++ descriptions) -->
> .ao file                                        -->
> libaxiom.al
> 
> Having libaxiom.al then extract the .ao again   -->
> .asy  (with +++ comments)                       -->
> .tex (with the +++ comments like in ALLPROSE)   -->
> latex/pdflatex/htlatex that .tex files to get an API
> descriptions in dvi/pdf/html form.

For the Spad files, this is rather easy and was described by Tim in a recent
email. Would this be good enough for you? In fact, asq does most of it already:
Try 

asq -doc PI

However, to replace hyperdoc, you would have to have one dvi file for each
operation and each constructor, which would probably be a burden for the
harddisk. I think that the proper format for the hyperdoc replacement is a
database of html chunks. 

Still, for a proof of concept, it might make a lot of sense to do it first via
the few thousend dvi files.

\start
Date: Fri, 09 Dec 2005 21:19:45 -0600
From: MathAction (billpage)
To: MathAction
Subject: [PolyMake] (new) 

http://www.math.tu-berlin.de/polymake

Polymake is a (more and more versatile) tool for the algorithmic
treatment of convex polyhedra and finite simplicial complexes.

As one of its many new features polymake now also deals with
tight spans: This is the bounded subcomplex of a certain
unbounded polyhedron associated to a finite metric space. See
below for a "polyhedral map" of Jamaica.

The system offers access to a wide variety of algorithms and
packages within a common framework. polymake is flexible and
continuously expanding. The software supplies C++ and perl
interfaces which make it highly adaptable to individual needs.

\start
Date: Sat, 10 Dec 2005 01:10:25 -0500
From: Bill Page
To: Cliff Yapp, Tim Daly
Subject: RE: hyperlinked algebra

On December 9, 2005 4:06 PM C Y wrote:
> 
> --- Bill Page wrote:
> 
> > I have just been waiting for the little extra time I would
> > need to key in the GraphViz specification for the graphs in
> > the endpaper.pamphlet file to see what kind of layout it will
> > produce automatically. 
> 
> Drool...
> 

Here is an example of the Axiom "EndPaper" graphic produced by
GraphViz:

http://wiki.axiom-developer.org/SandBoxEndPaper

You should also take a look at the actual coding of this page
at

http://wiki.axiom-developer.org/SandBoxEndPaper/editform

You will see that it consists of only a list of the nodes and
edges of the graph like this:

{AbelianSemiGroup, SemiGroup, OrderedSet, Finite} -> SetCategory;
AbelianMonoid -> AbelianSemiGroup;
Rng -> {AbelianGroup, SemiGroup};
Monoid -> SemiGroup;
OrderedAbelianSemiGroup -> {OrderedSet, AbelianMonoid};
...

GraphViz does all the work of laying out the graph in a reasonable
form for the reader. The result is not so different from the actual
graphic in the Axiom book.

At the present time GraphViz on MathAction is rendered as postscript
and processed by LaTeX as a figure. This allows GraphViz output to
appear in pamphlet files. But I think that as a result of the
rescaling done by LaTeX and the conversion to png, the quality of
the image may not be as good as it could be. This also makes it
impossible at present to include hyperlinks in the graph.

There are probably a few more tweaks that I could make to the
specification of the graph to improve the readability of the node
labels. But it seems to me that this is about as large a graph as
might be possible to display on a web page.

GraphViz can also be used to produce a png file directly. This
should produce a better quality image and would permit the use
of an image map for clickable hyperlinks on nodes and edges. To
do this will require another extension of MathAction to allow a
new pseudo-enviroment something like this:

\begin{graphviz}
  GraphViz commands including hyperlinks
\end{graphviz}

When clicking 'Save' this would be processed directly by GraphViz
to a png graphic with an associated image map for display on the
web page.

I said earlier that I wanted to stop doing web application
development and work more on Axiom, but if there is some interest
in using GraphViz this way on MathAction, I would be willing
to add this functionality.

\start
Date: 10 Dec 2005 09:04:46 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: hyperlinked algebra

Bill Page writes:
 
> Here is an example of the Axiom "EndPaper" graphic produced by
> GraphViz:
> 
> http://wiki.axiom-developer.org/SandBoxEndPaper

Although I question the usefulness of such graphs, yours is very
beautiful. Still: what can you do with such a graph?

My workflow is regularly as follows:

* state the problem and collect keywords

* )wh th keyword 
  or 
  grep -i keyword /source/algebra/*

* see whether there is anything which might be useful

* browse the operations, constructors with HyperDoc and possibly look at
  relatives using "ancestors", "children", "domains", etc.

One missing feature of such graphs is that they are not indexed, although this
is certainly possible with hyperlinks. The second missing feature is the list
of domains, again, this can be implemented using hyperlinks, I
suppose. Clicking on the node could give you a list of domains...

However, I fail to see any advantage over clicking on "domains", "children",
"ancestors", etc. in hyperdoc.

Still, it looks very nice and could be used for advertising purposes. In no
circumstance I would layout such a graph by hand. 

\start
Date: Sat, 10 Dec 2005 11:20:31 +0200
From: Eli Zaretskii
To: Camm Maguire
Subject: Re: [Gcl-devel] Re: unexec and fedora core 4
Cc: Matt Kaufmann, Juho Snellman, Sandip Ray

> From: Camm Maguire
> Date: 09 Dec 2005 16:43:44 -0500
> Cc: gcl-devel@gnu.org, emacs-devel@gnu.org, Tim Daly,
> 	Matt Kaufmann,
> 	list, Sandip Ray
> 
> OK, here is what I believe now to be the case -- the SELinux option
> allow_execmem, which is 'active' on the bad box, is causing the
> problem.  All is well if one takes the drastic action of 
> 
> sudo /bin/sh -c "/usr/sbin/setenforce 0"
> 
> but will probably allso work if one changes
> 
> /etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem false;
> 
> to
> 
> /etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem true;
> 
> and 
> 
> sudo /bin/sh -c "cd /etc/selinux/strict/src/policy && make load"
> 
> though I have not confirmed this not wanting to hose the machine in
> question. 

Should we add something along these lines to etc/PROBLEMS?

\start
Date: Sat, 10 Dec 2005 19:59:05 -0500
From: Tim Daly
To: list
Subject: slashdot bridge building article

Slashdot has an article about a bridge building program called Pontifex
(http://www.chroniclogic.com/index.htm?pontifex2.htm).

Now this would be a very cool program that could eventually be an
"application" of axiom. Some creative type (a Google summer student?)
could begin to model the bridge elements in axiom. The goal would be
to model a full bridge and it's loads. And then to predict when the
bridge would fail and where it would fail. 

This could be a huge amount of fun (at least at the intellectual level).

\start
Date: Sun, 11 Dec 2005 09:51:24 +0100 (CET)
From: Peter Kruppa
To: list
Subject: Building axiom on FreeBSD

Hello!

I am trying to build axiom-Sept2005-src on FreeBSD 6 -STABLE .
This is how far I have come:
1) I have installed
    - gnu-awk (gawk)
    - gnu-make (gmake, this is different from FreeBSD's make)
    - gnu common lisp (gcl-2.6.7)
    - teTeX-3.0
    - bash (FreeBSD's default shell is tcsh; perhaps sh would
            suffice?)
    - tangle (??? - translate WEB to Pascal ???, I have no idea
 	     where this came from - teTeX ???)
2) I have hacked configure, since
    	# uname -s
    returns "FreeBSD", not "freebsd".
3)   	# bash
    to do build inside bash
 	# ./configure
    no errors, nor specific settings required
         # gmake GCLVERSION="gcl-system"
4) Now some happy building is done, but it fails with this

 	------------------------------------------------------
[...]
Loading /usr/local/axiom/obj/freebsd/interp/makeint.lisp
Loading /usr/local/axiom/obj/freebsd/interp/sys-pkg.lsp
Finished loading /usr/local/axiom/obj/freebsd/interp/sys-pkg.lsp
Loading /usr/local/axiom/src/interp/interp-proclaims.lisp
Finished loading 
/usr/local/axiom/src/interp/interp-proclaims.lisp
Loading /usr/local/axiom/obj/freebsd/interp/nocompil.lsp
Finished loading /usr/local/axiom/obj/freebsd/interp/nocompil.lsp
Loading /usr/local/axiom/obj/freebsd/interp/util.o
start address -T 0x89f8860 Finished loading 
/usr/local/axiom/obj/freebsd/interp/
util.o
Loading /usr/local/axiom/obj/freebsd/interp/vmlisp.o
start address -T 0x8af0000 Finished loading 
/usr/local/axiom/obj/freebsd/interp/
vmlisp.o
Loading /usr/local/axiom/obj/freebsd/interp/hash.o
start address -T 0x8a045e0 Finished loading 
/usr/local/axiom/obj/freebsd/interp/
hash.o
Loading /usr/local/axiom/obj/freebsd/interp/bootfuns.lsp
Finished loading /usr/local/axiom/obj/freebsd/interp/bootfuns.lsp
Loading /usr/local/axiom/obj/freebsd/interp/macros.o
start address -T 0x8b35000 Finished loading 
/usr/local/axiom/obj/freebsd/interp/
macros.o
Loading /usr/local/axiom/obj/freebsd/interp/unlisp.o
start address -T 0x8afffa0 Finished loading 
/usr/local/axiom/obj/freebsd/interp/
unlisp.o
Loading /usr/local/axiom/obj/freebsd/interp/setq.lsp
Finished loading /usr/local/axiom/obj/freebsd/interp/setq.lsp
Error in CONDITIONS::CLCS-LOAD [or a callee]: Cannot open the 
file /usr/local/ax
iom/obj/freebsd/interp/astr.o.

Fast links are on: do (use-fast-links nil) for debugging
Broken at BUILD-INTERPSYS.  Type :H for Help.
  1 (Continue) Retry loading file 
"/usr/local/axiom/obj/freebsd/interp/astr.o".
  2 Retry loading file 
"/usr/local/axiom/obj/freebsd/interp/makeint.lisp".
  3 (Abort) Return to top level.
dbl:BOOT>>6 /usr/local/axiom/obj/freebsd/bin/interpsys created
cp: /usr/local/axiom/obj/freebsd/bin/interpsys: No such file or 
directory
gmake[3]: *** [/usr/local/axiom/obj/freebsd/bin/interpsys] Fehler 
1
gmake[3]: Leaving directory `/usr/local/axiom/src/interp'
gmake[2]: *** [interpdir] Fehler 2
gmake[2]: Leaving directory `/usr/local/axiom/src'
gmake[1]: *** [srcdir] Fehler 2
gmake[1]: Leaving directory `/usr/local/axiom'
gmake: *** [all] Fehler 2
 	-----------------------------------------------------

Any ideas what went wrong?

Mind: I am no programmer - so please type slowly :-)

Thanks for your patience and regards,

Uli.


*********************************************
* Peter Ulrich Kruppa - Wuppertal - Germany *
*********************************************

\start
Date: Mon, 12 Dec 2005 08:38:20 -0800 (PST)
From: Cliff Yapp
To: Bill Page, Tim Daly
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> Here is an example of the Axiom "EndPaper" graphic produced by
> GraphViz:
> 
> http://wiki.axiom-developer.org/SandBoxEndPaper

Very impressive!
 
> You should also take a look at the actual coding of this page
> at
> 
> http://wiki.axiom-developer.org/SandBoxEndPaper/editform

Hmm - I seem to have a problem with my setup - it won't let me see it.

> You will see that it consists of only a list of the nodes and
> edges of the graph like this:
> 
> {AbelianSemiGroup, SemiGroup, OrderedSet, Finite} -> SetCategory;
> AbelianMonoid -> AbelianSemiGroup;
> Rng -> {AbelianGroup, SemiGroup};
> Monoid -> SemiGroup;
> OrderedAbelianSemiGroup -> {OrderedSet, AbelianMonoid};
> ...
> 
> GraphViz does all the work of laying out the graph in a 
> reasonable form for the reader. The result is not so different
> from the actual graphic in the Axiom book.

I like it!

> At the present time GraphViz on MathAction is rendered as 
> postscript and processed by LaTeX as a figure. This allows 
> GraphViz output to appear in pamphlet files. But I think that 
> as a result of the rescaling done by LaTeX and the conversion 
> to png, the quality of the image may not be as good as it 
> could be.

I've had similar troubles in the past.

> This also makes it impossible at present to include 
> hyperlinks in the graph.

I'll see if I can dig around with graphviz on my machine and come up
with something.
 
> There are probably a few more tweaks that I could make to the
> specification of the graph to improve the readability of the 
> node labels. But it seems to me that this is about as large a 
> graph as might be possible to display on a web page.

Agreed.

> GraphViz can also be used to produce a png file directly. This
> should produce a better quality image and would permit the use
> of an image map for clickable hyperlinks on nodes and edges. To
> do this will require another extension of MathAction to allow a
> new pseudo-enviroment something like this:
> 
> \begin{graphviz}
>   GraphViz commands including hyperlinks
> \end{graphviz}
> 
> When clicking 'Save' this would be processed directly by 
> GraphViz to a png graphic with an associated image map for 
> display on the web page.
> 
> I said earlier that I wanted to stop doing web application
> development and work more on Axiom, but if there is some 
> interest in using GraphViz this way on MathAction, I would be
> willing to add this functionality.

The thought that comes first to me is this would be an excellent option
to have if/when we start including these types of diagrams in pamphlet
files - hyperlinked pdf for pdf, image map png for html.  But I think
that's a bit down the road at present.

\start
Date: Mon, 12 Dec 2005 14:43:00 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Video of Tim at LispNYC?

Hey Tim, is the video of your talk back in May available anywhere?

\start
Date: Mon, 12 Dec 2005 18:21:32 -0500
From: Tim Daly
To: Peter Kruppa
Subject: Re: Building axiom on FreeBSD

There is a shell variable called AXIOM and it looks like
the shell variable has no value.

Try:

echo $AXIOM

and see what you get. It should look like (in your case)
AXIOM=/usr/local/axiom/mnt/freebsd

\start
Date: Tue, 13 Dec 2005 02:21:14 +0100 (CET)
From: Peter Kruppa
To: Tim Daly
Subject: Re: Building axiom on FreeBSD

Hi Tim!

On Mon, 12 Dec 2005, root wrote:

> There is a shell variable called AXIOM and it looks like
> the shell variable has no value.
>
> Try:
>
> echo $AXIOM
>
> and see what you get. It should look like (in your case)
> AXIOM=/usr/local/axiom/mnt/freebsd
This is exactly what I get. I think it has been set by configure 
script.

Regards,

Uli.

*********************************************
* Peter Ulrich Kruppa - Wuppertal - Germany *
*********************************************

\start
Date: Mon, 12 Dec 2005 21:20:27 -0500
From: Tim Daly
To: Peter Kruppa
Subject: Re: Building axiom on FreeBSD

ok. next debugging question.... (be patient. it's hard to debug at a distance)

does 

/usr/local/axiom/obj/freebsd/interp/astr.o

exist?

\start
Date: Tue, 13 Dec 2005 02:40:13 +0100 (CET)
From: Peter Kruppa
To: Tim Daly
Subject: Re: Building axiom on FreeBSD

On Mon, 12 Dec 2005, root wrote:

> ok. next debugging question.... (be patient. it's hard to debug at a distance)
No problem, thanks anyway.

> does
>
> /usr/local/axiom/obj/freebsd/interp/astr.o
>
> exist?
No! There exists /usr/local/axiom/obj/freebsd/interp/ and it is 
filled with quite a lot a lot of files (13 MB), but no astr.o

Uli.

*********************************************
* Peter Ulrich Kruppa - Wuppertal - Germany *
*********************************************

\start
Date: Mon, 12 Dec 2005 22:12:13 -0500
From: Tim Daly
To: Peter Kruppa
Subject: Re: Building axiom on FreeBSD

ah. then it failed to compile. which is odd because there is nothing
special about that file at all.

ok. look upward in the console listing and see why it failed to build.

\start
Date: Mon, 12 Dec 2005 22:22:44 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: Video of Tim at LispNYC?

> Hey Tim, is the video of your talk back in May available anywhere?

Heow says http://www.lispnyc.org/wiki.clp?page=past-meetings

it's still in raw form and has not been edited.
as long as i'm in it there is still editing to be done :-)

\start
Date: 12 Dec 2005 22:14:29 -0500
From: Camm Maguire
To: Sandip Ray
Subject: Re: [Gcl-devel] Re: unexec and fedora core 4

Greeting!

Sandip Ray writes:

> Hi Camm, 
> 
> Is the solution then to disable SELinux in the machine? I guess I am fine 
> with doing that, but just wanted to make sure.

This will certainly suffice, but less drastic measures should also.
In order of severity:

1) disable 'strict' mode in SELinux (think you can do this with RH's
   kickstart).
2) Turn off allow_execmem (and possibly allow_execmod) from your
   strict policy (in /etc/selinux) and rebuild/reboot.

Please let me know if problems persist.

Take care,

> 
> --- Sandip. 
> 
> On Fri, 9 Dec 2005, Camm Maguire wrote:
> 
> \\Greetings!
> \\
> \\OK, here is what I believe now to be the case -- the SELinux option
> \\allow_execmem, which is 'active' on the bad box, is causing the
> \\problem.  All is well if one takes the drastic action of 
> \\
> \\sudo /bin/sh -c "/usr/sbin/setenforce 0"
> \\
> \\but will probably allso work if one changes
> \\
> \\/etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem false;
> \\
> \\to
> \\
> \\/etc/selinux/strict/src/policy/domains/user.te:bool allow_execmem true;
> \\
> \\and 
> \\
> \\sudo /bin/sh -c "cd /etc/selinux/strict/src/policy && make load"
> \\
> \\though I have not confirmed this not wanting to hose the machine in
> \\question. 
> \\
> \\The security people appear to persist in their (IMHO quite erroneous)
> \\assumption that there is no legitimate need for an executable heap.
> \\Tim Daly likely has further thoughts on this, but I saw the comment
> \\again here:
> \\
> \\http://copilotconsulting.com/mail-archives/selinux.2005/msg02006.html
> \\
> \\Take care,
> \\
> \\Camm Maguire writes:
> \\
> \\> Juho Snellman writes:
> \\> 
> \\> > Camm Maguire wrote:
> \\> > > Greetings!  I am a developer of GCL, which shares unexec with emacs.
> \\> > > I have noticed on certain recent Fedora Core 4 machines, binaries
> \\> > > produced with unexec cannot mprotect memory (allocated with brk)
> \\> > > PROT_EXEC (returning EACCESS, i.e. permission denied), whereas
> \\> > > binaries output by ld can do so just fine.  This does not vary with
> \\> > > exec-shield or randomize_va_space settings, and appears quite machine
> \\> > > specific.  The same binary which functions perfectly normally on one
> \\> > > fc4 machine shows this failure only on another machine.  I have as yet
> \\> > > been unable to correlate this with dynamic library placement, or other
> \\> > > settings in /proc/sys.
> \\> > 
> \\> > Just a guess, but this might be related to SELinux. Do the machines
> \\> > have differences in /etc/selinux/config?
> \\> > 
> \\> 
> \\> Bingo! (I think)  The config files are identical, but the problem
> \\> machine has a 'strict' subdirectory with a host of files and options.
> \\> Any idea of what I should look for herein, and what this could have to
> \\> do with unexec vs ld?
> \\> 
> \\> Thank you so much!

\start
Date: 12 Dec 2005 22:15:27 -0500
From: Camm Maguire
To: Eli Zaretskii
Subject: Re: [Gcl-devel] Re: unexec and fedora core 4
Cc: Matt Kaufmann, Juho Snellman, Sandip Ray

Greetings!

Eli Zaretskii writes:

> > question. 
> 
> Should we add something along these lines to etc/PROBLEMS?
> 

Don't know what this list is, but sounds advisable.  I would also
advise not setting allow_execmem in strict mode by default.

\start
Date: Mon, 12 Dec 2005 22:27:35 -0500
From: Bill Page
To: Cliff Yapp
Subject: RE: hyperlinked algebra

On December 12, 2005 11:38 AM C Y wrote:
> ...
> > 
> > http://wiki.axiom-developer.org/SandBoxEndPaper/editform
> 
> Hmm - I seem to have a problem with my setup - it won't let
> me see it.

Well, ah I presume that you at least get the page that says you
must set your name and email address in preferences before you
are allowed access to the edit page, right? Just do that and try
again. It should work.

> ... 
> > This also makes it impossible at present to include 
> > hyperlinks in the graph.
> 
> I'll see if I can dig around with graphviz on my machine and
> come up with something.

Great. Let me know what you find. So far the most relevant info
I have found is here:

http://www.graphviz.org/doc/info/output.html

Output Formats

ps2
    Produces PostScript output with PDF notations. It is assumed the
output will be directly converted into PDF format. The notations
include PDF bounding box information, so that the resulting PDF file
can be correctly used with pdf tools, such as pdflatex. In addition,
if a node has a URL attribute, this gets translated into PDF code
such that the node, when viewed in a PDF-viewer, e.g., acroread, is
a link to the given URL. If a URL is attached to the graph, this
serves as a base, such that relative URLs on nodes are derived from
it.

-----------

> 
> > GraphViz can also be used to produce a png file directly. This
> > should produce a better quality image and would permit the use
> > of an image map for clickable hyperlinks on nodes and edges. To
> > do this will require another extension of MathAction to allow a
> > new pseudo-environment something like this:
> > 
> > \begin{graphviz}
> >   GraphViz commands including hyperlinks
> > \end{graphviz}
> > 
> > When clicking 'Save' this would be processed directly by 
> > GraphViz to a png graphic with an associated image map for 
> > display on the web page.
> > 
> > I said earlier that I wanted to stop doing web application
> > development and work more on Axiom, but if there is some 
> > interest in using GraphViz this way on MathAction, I would be
> > willing to add this functionality.
> 
> The thought that comes first to me is this would be an excellent
> option to have if/when we start including these types of diagrams
> in pamphlet files - hyperlinked pdf for pdf, image map png for
> html.  But I think that's a bit down the road at present.
> 

I haven't done the hyperlinking yet, but you can see what a
pamphlet file that contains GraphViz commands looks like at:

http://wiki.axiom-developer.org/book--main--1/Endpaper3

This contains both the Algebra and Data Structure diagrams (two
versions, one using abbreviations and one using the full category
names).

Right now I am looking into the problem of writing multi-line
labels that would allow me to write for example:

  Homogeneous
  Aggregate

instead of

  HomogeneousAggregate

This would allow the diagram to be narrower and with a larger
font size. The way this is supposed to be written in GraphViz
"dot" language is:

  HomogeneousAggregate [label="Homogeneous\nAggregate"];

but when I write the \n inside the LaTeX file, LaTeX insists
on interpreting this as an undefined command \nAggregate and
gives a LaTeX error instead of just writing it to the '*.dot'
file the way the GraphViz macro says it should. If anyone
know how to get LaTeX to write a string containing \n to a
file, please let me know. Right now I am stuck.

\start
Date: Tue, 13 Dec 2005 05:52:20 +0100 (CET)
From: Peter Kruppa
To: Tim Daly
Subject: Re: Building axiom on FreeBSD

On Mon, 12 Dec 2005, root wrote:

> ah. then it failed to compile. which is odd because there is nothing
> special about that file at all.
>
> ok. look upward in the console listing and see why it failed to build.
I searched for astr and found these lines
 	-------------------------------------------
532 making /usr/local/axiom/int/interp/astr.clisp from 
/usr/local/axiom/src/inte
rp/astr.boot.pamphlet
531 making /usr/local/axiom/obj/freebsd/interp/astr.o from 
/usr/local/axiom/int/
interp/astr.clisp
 	-------------------------------------------
/src/interp/astr.boot.pamphlet exists, but neither
 	/int/interp/astr.clisp 		nor
 	/obj/freebsd/interp/astr.o



And - I don't know if this has anything to do with it:
 	------------------------------------------
45 /usr/local/axiom/obj/freebsd/bin/bootsys created
 	------------------------------------------
but on the other hand I can see several lines like

/usr/local/axiom/obj/freebsd/bin/bootsys: not found

on Standarderror. Indeed there is no /obj/freebsd/bin/bootsys

Uli.


*********************************************
* Peter Ulrich Kruppa - Wuppertal - Germany *
*********************************************

\start
Date: Tue, 13 Dec 2005 01:16:47 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Documentation of Axiom

Dear Tim,

I'd like to introduce some kind of standard to the documentation of 
Axiom a bit similar to what I have done in ALLPROSE. I know that this 
will be a lot of work, but I believe it is really necessary. At the 
moment I don't easily find in the Axiom tree what I am looking for.
(I should perhaps say that I am usually not online when I work on Axiom, 
so MathAction does not help me.)

But before I make my hands dirty, I'd like to learn a bit more about the 
current structure and your plans, Tim, of how this should be developed 
further.

As I understand, there should be several book volumes treating the 
various parts of axiom. (I only don't know where in the source tree I 
can find those volumes. I use axiom--main--1--patch-46 at the moment.)
I can only see src/interp/bookvol5.pamphlet. That makes me think that 
each directory corresponds to a book volume. However, I am somehow sure 
that this is not (yet) the case. Is it planned that way?

As I see now bookvol5.pamphlet includes quite a lot of code, but it does 
not incorporate the other pamphlets under src/interp. Intentionally?
I assume that also the other pamphlets should eventually be included 
into bookvol, right?

So I like to suggest the following conventions.

* Convention 1:
There is a bookvoli.tex.pamphlet file (for each i) that is intended as 
the main entry point for a bookvolume. It contains a chapter/section 
that list all the files that are relevant for that volume together with 
a short explanation of what each file is about and later includes those 
files (via LaTeX \input). bookvoli.tex.pamphlet is responsible for
\documentclass{book}
\usepackage{axiom}
\begin{document}

and

\printindex
\bibliographystyle{alpha}
\bibliography{axiom}
\end{document}


* Convention 2:
There is one axiom.bib.pamphlet file for all bibliographic data related 
to these axiom book volumes.


* Convention 3:
Each "ordinary" .pamphlet file contains just text that would normally go 
between \begin{document} and \end{document} and matches the following 
template:
\begin{History} %chronological order, similar to ChangeLog files.
   \logitem{DATE1}{AUTHOR1} DESCRIPTION1
   \logitem{DATE2}{AUTHOR2} DESCRIPTION2
\end{History}
\begin{abstract} ... \end{abstract}
\begin{ExecutiveSummary} ... \end{ExecutiveSummary}
\begin{Content} ... \end{Content}


* Convention 4:
Each "ordinary" .pamphlet leads to a section in the book whose name is 
automatically given by the filename.
(There is no \chapter command appearing a .pamphlet file.)


* Convention 5:
Either each bookvolume corresponds to one sub directory of the src 
directory or there is a book directory at the same level as the src 
directory. The book-dir should contain all bookvoli.tex.pamphlet files 
together with axiom.bib.pamphlet and axiom.sty.pamphlet.
(I prefer the book directory.)


* Convention 6:
LaTeX commands should be preferred to TeX equivalents.
The definition of new LaTeX should be kept very local and at best 
avoided at all.
Style related commands should be avoided (like \hspace,\vspace,\newpage, 
etc.)

Is there someone against those conventions? Where should we write them 
so that they would be common knowledge?

I am sorry if there are already some conventions in Axiom that I have 
not found and thus I am not aware of them. (Pointers?)

\start
Date: Tue, 13 Dec 2005 01:35:02 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: re: Axiom Wiki FrontPage re-design

root wrote:
>> Call me old-fashioned, but in order to edit pamphlet files, I would get 
>> the arch-sources and do something locally and then submit. Only for 
>> small changes the web-access to the sources makes sense to me. Anyway, 
>> it is not quite clear to me how modifications to the sources made over 
>> the web will eventually find their way into axiom--main. Will Tim 
>> incorporate them by hand? I guess the ChangeSet idea becomes a bit 
>> blurred here.
> 
> ok. you're old-fashioned. but so am i so it's a bit of a struggle to
> think thru the idea of hacking real sources on a website. however
> bill has a good idea with this wiki site and he's managed to get
> the sources online and automatically generated.

I am not at all against Bill's work. It's great. It's just that I am 
usually offline when I find time to work on Axiom. So my main source of 
information is the pamphlet file in the source tree.

> since the website maintains a changelog/undo facility many people can
> work on their local copy (a DOYEN with a browser?) and transparently
> move to the wiki. 

> using the wiki this way for math could be VERY cool. suppose you find
> that a certain function does not compute a result. what would it take
> to click on the function and be taken to it's definition (note that 
> this requires tight cooperation with axiom since there are hundreds
> of functions with the same name but different type signatures). and
> once you've found the definition you study it for a while, write some
> comments about what failed, come back in a few days with a solution,
> type in the solution (and document it), remake axiom, go back to the
> sandbox and test it. if it works you "promote" it to the reviewers
> for inclusion into the "approved" source tree. 

Oh, there exists an "approved" tree. After reading a bit in the 
documentation of GNU arch, I was always wondering whether there still is 
ONE tree that should somehow be considered as the ORIGINAL or APPROVED. 
I guess, Tim, maintains that archive.

> each user could have their own branch of axiom.

Fine for me.

> of course, this will cause major "mainline" headaches for the "approved"
> source tree but that's hardly the experimenter's problem. 

Good to get these top-level ideas transmitted.

But I somehow would like to see a bit more plans. Of course anyone could 
do anything, but without some kind of given direction much work could be 
in vain. So I'd like to discuss before I program.

\start
Date: Tue, 13 Dec 2005 02:44:08 +0100
From: Ralf Hemmecke
To: Martin Rubey
Subject: Re: hyperlinked algebra

Martin Rubey wrote:
>> Well if I could easily get access to parents/siblings/children from the .asy
>> file in a some more attractive way for me, that would make me happy and would
>> probably be the dead of current hyperdoc, since then hyperdoc(-similar) pages
>> could be created in the following way
>>
>> .pamphlet (with aldordoc-like +++ descriptions) -->
>> .ao file                                        -->
>> libaxiom.al
>>
>> Having libaxiom.al then extract the .ao again   -->
>> .asy  (with +++ comments)                       -->
>> .tex (with the +++ comments like in ALLPROSE)   -->
>> latex/pdflatex/htlatex that .tex files to get an API
>> descriptions in dvi/pdf/html form.
> 
> For the Spad files, this is rather easy and was described by Tim in a recent
> email. Would this be good enough for you? In fact, asq does most of it already:
> Try 
> 
> asq -doc PI

Hmmm, that looks pretty much like a .asy file. (-fasy switch of aldor).

> However, to replace hyperdoc, you would have to have one dvi file for each
> operation and each constructor, which would probably be a burden for the
> harddisk.

I don't know why you want to stick to .dvi files here.

> I think that the proper format for the hyperdoc replacement is a
> database of html chunks. 

Of course a hyperdoc replacement would be something html-like.

\start
Date: Tue, 13 Dec 2005 02:31:43 +0100
From: Ralf Hemmecke
To: Cliff Yapp
Subject: Re: hyperlinked algebra

> P.S.  Incidently, I tried looking at the Leo tutorials last night and
> my initial inclination is to stick with Emacs for now because of it's
> AucTeX environment and other available goodies.  Leo's outlining is
> interesting but for the moment I am more drawn to Emacs's document
> editing features.

I must admit, that I have the same feeling. At the moment I don't want 
to change from Emacs to something else. However, I somehow fear that 
newer generations will not learn emacs anymore. So we should not build 
too much around emacs.

\start
Date: Tue, 13 Dec 2005 02:27:15 +0100
From: Ralf Hemmecke
To: Martin Rubey
Subject: Re: navigating Axiom's library
Cc: Kai Kaminski, list

Hi Martin, sorry, but I am a bit behind...

Martin Rubey wrote:
> Dear Ralf, *

> As far as I understand, you are proposing a system where several (literate)
> source files are compiled into one big dvi/ps/pdf/html/mathml ... file.

That is true for dvi/ps/pdf. HTML and friends should be hyperlinked 
anyway. Whether ALL documentation is in one big HTML file or whether 
there are several smaller pages is a minor detail for html.

As for dvi/ps/pdf I would like to group things together that logically 
form some kind of bigger entity (like, for example, all the interpreter 
code). Maybe the book volumes are a good size. But I would not restrict 
to that. Book volumes are just an application of the technology.

Basically it says:
Write a wrapper file that contains some top-level documentation and 
lists the file names that cover that topic (the file names always 
together with a 2 sentence explanation of what they are for).

I would be concerned with the compilation of the documentation, but not 
with the logic of building binary code from the sources.

> As you know, I think that it is necessary that we go from three documentation
> formats (namely: pamphlet, hypertex, structured text) to one, namely yours.

Well, mine is ordinary noweb stuff. It is only that I imposed a bit of 
more structure that I would also like to impose on the .pamphlet files 
of Axiom (if there is common agreement--I simply don't want to waste my 
time to do something that will not be accepted.)

I like the idea of MathAction (that's where the structured text is, 
right?) MathAction serves another purpose, I think. I propose just 
something for the Axiom sources, no interactive stuff.

As I once said, I don't really like the language that pages for hyperdoc 
are written in. It is a bit to complicated for me, simply too many 
commands. I would want to replace it with aldordoc.sty + some better 
browser that extracts information about the .as sources and is able to 
navigate through the Algbra hierarchy. Well, that would be the same idea 
as hyperdoc, but not with hyperdoc but with an ordinary webbrowser.

> As far as dvi/pdf/ps, i.e., printed matter is concerned, I think there is not
> much left to do. The one bit missing is to enable ALLPROSE to produce different
> files for the various user groups. For example a file which contains only the
> usage info (as in aldordoc) and the examples for endusers.

I think I could do this easily. And maybe I'll even do it for the next 
release of ALLPROSE, since you keep asking for it. But, I would consider 
it a quick hack, because:
ALLPROSE produces a complete documentation for maintainers. The API 
description for users should go through the Aldor compiler. You know, 
ALLPROSE puts the +++ stuff into the .as files and hands them over to 
the compiler. So they will be in the .al library and could be extracted 
from there via

aldor -fasy -laxiom filename.ao

There is know a program missing that transforms .asy into .tex which 
would then be processed via tex4ht to produces .html resulting in an 
even more hyperlinked API documentation than the maintainers documentation.

> However, for the web based documentation, there seems to be more to do - apart
> from being able to produce it using tex4ht and jsmath and these matters:

What would you want there? I guess, it is some interaction, right?

>> I have mentioned before that I do not find HyperDoc particularly
>> useful. Every time I sit down to use it I get a bad case of "browser
>> shock". ... So I do badly want to see HyperDoc's features re-packaged with a
>> standard web browser interface.

Well, I find HyperDoc useful, but only since there is nothing better at 
the moment. ;-)

> Of course, with ALLPROSE you can point at a line in the dvi viewer and jump to
> the corresponding line of source code, but this is a very different matter.

But it matters when you are working on the code and want to find your 
way around. It saves you from looking for the filename in which the 
corresponding code would be defined/used. Rememeber there are more 
people who are not original developers and have no idea of the general 
layout of the code.

> Somehow we need a facility that interacts with ALLPROSE and uses the
> databases. I wonder whether Aldor has similar ones... Do you know? If yes, we
> have to agree on one format, so that everything works together as it should.

There is just a library format for Aldor which is a .al library of 
several machine independent .ao files. You can, however, extract all the 
information you need from these .ao files. Just produce .asy from them 
and you basically get the complete syntaxtree back.

I have not looked into the daase files, but I guess, the index.KAF and 
info files in int/algebra/*.NRLIB are a bit similar to .asy.

> The net result would be a webbrowser-script, that displays the documentation
> produced by ALLPROSE and adds some buttons on the bottom depending on what is
> displayed currently, just as HyperDoc does it now...

I don't know yet, but I guess, tex4ht could do the job. (But it's a bit 
hard to know, since tex4ht is not so well documented as I would like to 
see it.)

> Of course, there is a discrepancy between the ALLPROSE approach and the way
> hyperdoc works currently:

> HyperDoc uses mostly the text in the in the databases, which axiom extracts
> into the appropriate database from the +++ comments when compiling the
> algebra. Apart from that, one can write additional HyperTex files, which get
> displayed as examples or the like.

As I said, it should be kept that way. ALLPROSE should be considered as 
a first step to produce such a database (.al library would be sufficient).

\start
Date: Tue, 13 Dec 2005 02:36:30 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: hyperlinked algebra

> http://wiki.axiom-developer.org/GraphViz
> 
> and there is an extension for LaTeX that processes GraphViz
> commands. There are apparently several ways to add hyperref-like
> links to these graphics in LaTeX but I have not had time yet to
> try any of these.

Wow, if this is layed out by an algorithm, that is great!
If hyperlinks can be added then it should be not too hard to produced 
the input from libaxiom.al via the .asy format.

\start
Date: Tue, 13 Dec 2005 02:40:22 +0100
From: Ralf Hemmecke
To: Cliff Yapp
Subject: Re: hyperlinked algebra

>> http://wiki.axiom-developer.org/GraphViz

> One drawback here is that, AFAIK, dvi isn't a support output format so
> hyperlinked dvis might be out.  Of course, given how much I've already
> missed... arrgh.

Hmm, I don't think that is a big problem. I don't care about dvi here. I 
guess the functionality could be achieved via a webbrowser that links 
back to a .dvi. (I have not really a glue whether this could be done, 
though.)

\start
Date: Mon, 12 Dec 2005 23:37:24 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: article "standard" header/footer

root wrote:
> oh, this is an artifact of an OLD debate. people want to use their
> "standard" version of notangle even though i keep telling them that
> axiom applies patches. you ran into the problem (and solved it yet
> again in a different way). axiom code needs axiom's notangle. but
> i seem to have lost that war.

Well, in my opinion it would be better to tell people that axiom needs 
at least version x.y of noweb and provide workarounds for bugs of noweb 
if Norman Ramsey does not like to include them into his distribution. I 
would rather say that we should take noweb as a tool and leave further 
development of that to other people. We should rather concentrate on 
something that is more mathematical, like algebra. Would somebody 
disagree here?

\start
Date: Tue, 13 Dec 2005 02:49:10 +0100
From: Ralf Hemmecke
To: Martin Rubey,
Subject: Re: hyperlinked algebra

>> http://wiki.axiom-developer.org/SandBoxEndPaper
> 
> Although I question the usefulness of such graphs, yours is very
> beautiful. Still: what can you do with such a graph?

Look at it an get a rough overview of the relations of the 
domains/categories. I think, that is more than useful.

\start
Date: Tue, 13 Dec 2005 09:42:52 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: hyperlinked algebra

>   HomogeneousAggregate [label="Homogeneous\nAggregate"];
> 
> but when I write the \n inside the LaTeX file, LaTeX insists
> on interpreting this as an undefined command \nAggregate and
> gives a LaTeX error instead of just writing it to the '*.dot'
> file the way the GraphViz macro says it should. If anyone
> know how to get LaTeX to write a string containing \n to a
> file, please let me know. Right now I am stuck.

That would depend on how GraphViz sets up the commands to write to the 
file. (I guess there is a graphviz.sty, right?) Could you provide the 
LaTeX related stuff that writes the .dot file.

\start
Date: Tue, 13 Dec 2005 11:36:10 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: hyperlinked algebra

Hi Bill,

I've looked at 
http://wiki.axiom-developer.org/images/book--main--1/endpaper3.pamphlet

and tried to find something for it.
Would you be satisfied to write something like

Abelian\-SemiGroup

in the LaTeX file instead of

Abelian\nSemiGroup?

If yes, then replace your \newcommand{\digraph}... by the following code.

\newcommand{\digraph}[2][scale=1]{%
\IfFileExists{#2.ps}%
{\includegraphics[#1]{#2}}%
{\fbox{
     \begin{tabular}{l}
       The file \texttt{#2.ps} hasn't been created from
       \texttt{#2.dot} yet.
     \end{tabular}
   }
}
\writedigraph{#2}}

\def\writedigraph#1#2{%
   \newwrite\dotfile
   \immediate\openout\dotfile=#1.dot
   \let\n\relax%define it.
   \expandafter\def\csname -\endcsname{\string\n}
   \immediate\write\dotfile{digraph #1 {#2}}
   \immediate\closeout\dotfile}

It basically does the following.

\digraph[OPTIONS]{FILENAME} checks whether FILENAME.ps is available and 
includes it. Then it puts \writedigraph{FILENAME} into the queue.

\writedigraph{FILENAME}{VIZGRAPH-STUFF} opens FILENAME.dot for writing,
writes out
   digraph #1 {#2}
to this file and closes the file.
During the write LaTeX commands are expanded. Since \- is defined to 
expand to the string "\n" you will see that at the .dot file.

Doing the same thing with \n instead of \- would be a bit more 
complicated. But I think for LaTeX-speakers \- is more natural anyway.

I hope, I made someone happy.

Ralf



Bill Page wrote:
> On December 12, 2005 11:38 AM C Y wrote:
>> ...
>>> http://wiki.axiom-developer.org/SandBoxEndPaper/editform
>> Hmm - I seem to have a problem with my setup - it won't let
>> me see it.
> 
> Well, ah I presume that you at least get the page that says you
> must set your name and email address in preferences before you
> are allowed access to the edit page, right? Just do that and try
> again. It should work.
> 
>> ... 
>>> This also makes it impossible at present to include 
>>> hyperlinks in the graph.
>> I'll see if I can dig around with graphviz on my machine and
>> come up with something.
> 
> Great. Let me know what you find. So far the most relevant info
> I have found is here:
> 
> http://www.graphviz.org/doc/info/output.html
> 
> Output Formats
> 
> ps2
>     Produces PostScript output with PDF notations. It is assumed the
> output will be directly converted into PDF format. The notations
> include PDF bounding box information, so that the resulting PDF file
> can be correctly used with pdf tools, such as pdflatex. In addition,
> if a node has a URL attribute, this gets translated into PDF code
> such that the node, when viewed in a PDF-viewer, e.g., acroread, is
> a link to the given URL. If a URL is attached to the graph, this
> serves as a base, such that relative URLs on nodes are derived from
> it.
> 
> -----------
> 
>>> GraphViz can also be used to produce a png file directly. This
>>> should produce a better quality image and would permit the use
>>> of an image map for clickable hyperlinks on nodes and edges. To
>>> do this will require another extension of MathAction to allow a
>>> new pseudo-environment something like this:
>>>
>>> \begin{graphviz}
>>>   GraphViz commands including hyperlinks
>>> \end{graphviz}
>>>
>>> When clicking 'Save' this would be processed directly by 
>>> GraphViz to a png graphic with an associated image map for 
>>> display on the web page.
>>>
>>> I said earlier that I wanted to stop doing web application
>>> development and work more on Axiom, but if there is some 
>>> interest in using GraphViz this way on MathAction, I would be
>>> willing to add this functionality.
>> The thought that comes first to me is this would be an excellent
>> option to have if/when we start including these types of diagrams
>> in pamphlet files - hyperlinked pdf for pdf, image map png for
>> html.  But I think that's a bit down the road at present.
>>
> 
> I haven't done the hyperlinking yet, but you can see what a
> pamphlet file that contains GraphViz commands looks like at:
> 
> http://wiki.axiom-developer.org/book--main--1/Endpaper3
> 
> This contains both the Algebra and Data Structure diagrams (two
> versions, one using abbreviations and one using the full category
> names).
> 
> Right now I am looking into the problem of writing multi-line
> labels that would allow me to write for example:
> 
>   Homogeneous
>   Aggregate
> 
> instead of
> 
>   HomogeneousAggregate
> 
> This would allow the diagram to be narrower and with a larger
> font size. The way this is supposed to be written in GraphViz
> "dot" language is:
> 
>   HomogeneousAggregate [label="Homogeneous\nAggregate"];
> 
> but when I write the \n inside the LaTeX file, LaTeX insists
> on interpreting this as an undefined command \nAggregate and
> gives a LaTeX error instead of just writing it to the '*.dot'
> file the way the GraphViz macro says it should. If anyone
> know how to get LaTeX to write a string containing \n to a
> file, please let me know. Right now I am stuck.

\start
Date: Tue, 13 Dec 2005 06:51:31 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] wiki problem at http://wiki.axiom-developer.org/AxiomDownload?

Is http://wiki.axiom-developer.org/AxiomDownload working?   There have been no posts for a month and when I try to post I get:

Status  : 502 Bad Gateway

Description : The origin web server encountered an unexpected condition which prevented it from fulfilling the request. Please try your request again. 

\start
Date: Tue, 13 Dec 2005 06:54:01 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] wiki problem at http://wiki.axiom-developer.org/AxiomDownload?

Is http://wiki.axiom-developer.org/AxiomDownload working?   There have been no posts for a month and when I try to post I get:

Status  : 502 Bad Gateway

Description : The origin web server encountered an unexpected condition which prevented it from fulfilling the request. Please try your request again. 

\start
Date: Tue, 13 Dec 2005 06:57:39 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] wiki problem at http://wiki.axiom-developer.org/AxiomDownload?

Is http://wiki.axiom-developer.org/AxiomDownload working?   There have been no posts for a month and when I try to post I get:

Status  : 502 Bad Gateway

Description : The origin web server encountered an unexpected condition which prevented it from fulfilling the request. Please try your request again. 

\start
Date: Tue, 13 Dec 2005 07:48:18 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [FrontPage] working for me

What do you mean?

> There have been no posts for a month

Just click the link 'Axiom Binaries' above. Does it work?

\start
Date: Tue, 13 Dec 2005 07:45:52 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] wiki problem at http://wiki.axiom-developer.org/AxiomDownload?

Is http://wiki.axiom-developer.org/AxiomDownload working?   There have been no posts for a month and when I try to post I get:

Status  : 502 Bad Gateway

Description : The origin web server encountered an unexpected condition which prevented it from fulfilling the request. Please try your request again. 

\start
Date: Tue, 13 Dec 2005 11:10:21 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: article "standard" header/footer

> Well, in my opinion it would be better to tell people that axiom needs 
> at least version x.y of noweb and provide workarounds for bugs of noweb 
> if Norman Ramsey does not like to include them into his distribution. I 
> would rather say that we should take noweb as a tool and leave further 
> development of that to other people. We should rather concentrate on 
> something that is more mathematical, like algebra. Would somebody 
> disagree here?

disagree? is there something to disagree about? we use noweb. it has a
bug. we fix the bug and use the fixed version until the bug gets fixed
in the distributed version. the bug has been reported, the fix has been
coded and submitted. the fix was rejected because it modified the C code
(a language i speak) rather than using awk/sed/shell (languages i don't
speak). so it's a static situation and has been for 3 years. the standard
version fails, the patched version works. use the patched version.

if we get lucky your version of the fix will get accepted and we can
stop using our local patch.

have you sent a bug report and your fix to Norman?
is there a later version with your fix?

\start
Date: Tue, 13 Dec 2005 07:34:55 -0800 (PST)
From: Cliff Yapp
To: Bill Page
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> On December 12, 2005 11:38 AM C Y wrote:
> > ...
> > > 
> > > http://wiki.axiom-developer.org/SandBoxEndPaper/editform
> > 
> > Hmm - I seem to have a problem with my setup - it won't let
> > me see it.
> 
> Well, ah I presume that you at least get the page that says you
> must set your name and email address in preferences before you
> are allowed access to the edit page, right? Just do that and 
> try again. It should work.

I was being dumb - I just needed to refresh that page.  Something in IE
refused to automatically update.  Mutter... browser...

> > ... 
> > > This also makes it impossible at present to include 
> > > hyperlinks in the graph.
> > 
> > I'll see if I can dig around with graphviz on my machine and
> > come up with something.
> 
> Great. Let me know what you find. So far the most relevant info
> I have found is here:
> 
> http://www.graphviz.org/doc/info/output.html
> 
> Output Formats
> 
> ps2
> Produces PostScript output with PDF notations. It is assumed
> the output will be directly converted into PDF format. The 
> notations include PDF bounding box information, so that the 
> resulting PDF file can be correctly used with pdf tools, such
> as pdflatex. In addition, if a node has a URL attribute, this
> gets translated into PDF code such that the node, when viewed 
> in a PDF-viewer, e.g., acroread, is a link to the given URL.
> If a URL is attached to the graph, this serves as a base, such
> that relative URLs on nodes are derived from it.

I guess the question is whether this feature can be made to work with
hyperref.  *Crosses fingers.*

> I haven't done the hyperlinking yet, but you can see what a
> pamphlet file that contains GraphViz commands looks like at:
> 
> http://wiki.axiom-developer.org/book--main--1/Endpaper3
> 
> This contains both the Algebra and Data Structure diagrams 
> (two versions, one using abbreviations and one using the full
> category names).

Very nice!  One comment is that it would be nice to abandon the "rows"
graphviz seems to favor and go with a bit more free form, in order to
avoid graphs that are so wide.  I think neato is supposed to do this
but IIRC it doesn't do directed graphs?  Also need to see if it can
support hyperlinking or even improve the width problem.  The current
method seems to work very well for some structures though, so it's a
bit tricky.

> Right now I am looking into the problem of writing multi-line
> labels that would allow me to write for example:
> 
>   Homogeneous
>   Aggregate
> 
> instead of
> 
>   HomogeneousAggregate
> 
> This would allow the diagram to be narrower and with a larger
> font size. The way this is supposed to be written in GraphViz
> "dot" language is:
> 
>   HomogeneousAggregate [label="Homogeneous\nAggregate"];
> 
> but when I write the \n inside the LaTeX file, LaTeX insists
> on interpreting this as an undefined command \nAggregate and
> gives a LaTeX error instead of just writing it to the '*.dot'
> file the way the GraphViz macro says it should. If anyone
> know how to get LaTeX to write a string containing \n to a
> file, please let me know. Right now I am stuck.

I think there is some method for doing this - the only way I'm thinking
of at the moment is the verbatium environment but that might be
overkill.

\start
Date: Tue, 13 Dec 2005 09:42:10 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomDownload] rpm problem with draw

I installed the rpms on a Fedora core 4 64-bit system.   I get this error with the draw example from the hyperdoc:

(4) -> draw(x*cos(x),x=0..30,title =="y = x*cos(x)")
   Loading /usr/lib/axiom-20050901/algebra/SEG.o for domain Segment
   Loading /usr/lib/axiom-20050901/algebra/SEGBIND.o for domain
      SegmentBinding
   Loading /usr/lib/axiom-20050901/algebra/DROPT.o for domain
      DrawOption
   Loading /usr/lib/axiom-20050901/algebra/ANY.o for domain Any
   Loading /usr/lib/axiom-20050901/algebra/SEX.o for domain SExpression

   Loading /usr/lib/axiom-20050901/algebra/ANY1.o for package
      AnyFunctions1
   Loading /usr/lib/axiom-20050901/algebra/NONE1.o for package
      NoneFunctions1
   Loading /usr/lib/axiom-20050901/algebra/FLOAT.o for domain Float
   Loading /usr/lib/axiom-20050901/algebra/SEGBIND2.o for package
      SegmentBindingFunctions2
   Loading /usr/lib/axiom-20050901/algebra/SEG2.o for package
      SegmentFunctions2
   Loading /usr/lib/axiom-20050901/algebra/FPS-.o for domain
      FloatingPointSystem&
   Loading /usr/lib/axiom-20050901/algebra/RNS-.o for domain
      RealNumberSystem&
   Loading /usr/lib/axiom-20050901/algebra/DRAW.o for package
      TopLevelDrawFunctions
   Loading /usr/lib/axiom-20050901/algebra/MKFLCFN.o for package
      MakeFloatCompiledFunction
   Loading /usr/lib/axiom-20050901/algebra/INFORM.o for domain
      InputForm
   Loading /usr/lib/axiom-20050901/algebra/DFLOAT.o for domain
      DoubleFloat
   Loading /usr/lib/axiom-20050901/algebra/SEXOF.o for domain
      SExpressionOf
Compiling /tmp/gazonk1.lsp.
End of Pass 1.
End of Pass 2.
OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3
Finished compiling /tmp/gazonk1.lsp.

   >> System error:
   Unknown bfd format

\start
Date: Tue, 13 Dec 2005 09:41:25 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] Re: working for me

Yes, the link works, but posting on that page does not work.

(Also: note spello "enail" on the help text for this comment box.)

\start
Date: Tue, 13 Dec 2005 12:05:36 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: hyperlinked algebra

On December 13, 2005 5:36 AM Ralf Hemmecke wrote:
>
> I've looked at 
> http://wiki.axiom-developer.org/images/book--main--1/endpaper3.pamphlet
> 
> and tried to find something for it.

Great!

> Would you be satisfied to write something like
> 
> Abelian\-SemiGroup
> in the LaTeX file instead of
> Abelian\nSemiGroup?
> 
> If yes, then replace your \newcommand{\digraph}... by the 
> following code.
> ... 

Thanks. That worked just fine.

> ... 
> Doing the same thing with \n instead of \- would be a bit more 
> complicated. But I think for LaTeX-speakers \- is more natural
> anyway.

Hmmm ... maybe '\n ' would be better - more compatible with
the definition of the "dot" language?

Why would you say '\-' is more natural in LaTeX?

> 
> I hope, I made someone happy.
> 

Yes, indeed! You made me very happy! :-)

You can see the revised result here:

http://wiki.axiom-developer.org/book--main--1/Endpaper3

\start
Date: Tue, 13 Dec 2005 18:26:45 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: hyperlinked algebra

Bill Page wrote:
>> Doing the same thing with \n instead of \- would be a bit more 
>> complicated. But I think for LaTeX-speakers \- is more natural
>> anyway.
> 
> Hmmm ... maybe '\n ' would be better - more compatible with
> the definition of the "dot" language?

Well, yes, this may be a good reason to look for something that works 
with \n. But the problem is that \n would be expanded during \write so
\nGroup would count as one control sequence which is usually not 
defined. I don't know how I can easily achieve a similar trick as with \-.

> Why would you say '\-' is more natural in LaTeX?

TeX has automatic hyphenation, but sometimes one must help. That can be 
done via the \- control sequence. Then TeX considers the place where \- 
is as an additional place to break lines.

http://www-h.eng.cam.ac.uk/help/tpl/textprocessing/teTeX/latex/latex2e-html/ltx-244.html

\start
Date: Tue, 13 Dec 2005 12:31:18 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: Documentation of Axiom

> I'd like to introduce some kind of standard to the documentation of 
> Axiom a bit similar to what I have done in ALLPROSE. I know that this 
> will be a lot of work, but I believe it is really necessary. At the 
> moment I don't easily find in the Axiom tree what I am looking for.
> (I should perhaps say that I am usually not online when I work on Axiom, 
> so MathAction does not help me.)
> 
> But before I make my hands dirty, I'd like to learn a bit more about the 
> current structure and your plans, Tim, of how this should be developed 
> further.
> 
> As I understand, there should be several book volumes treating the 
> various parts of axiom. (I only don't know where in the source tree I 
> can find those volumes. I use axiom--main--1--patch-46 at the moment.)
> I can only see src/interp/bookvol5.pamphlet. That makes me think that 
> each directory corresponds to a book volume. However, I am somehow sure 
> that this is not (yet) the case. Is it planned that way?

The books were being developed in arch under book--main--1, a separate
branch (see http://arch.axiom-developer.org) but since the material in
the book is the actual source code for the system it is not practical
to develop them in a separate branch.

One effort I've been making is to walk backward thru the email archive to
find useful emails and add them to the books. See the bottom of each file
for the appends. These emails need to be incorporated where they fit.

Axiom Volume 1: Tutorial is about to be published by lulu.com
I have the "proof" version coming in the mail any day now.
--patch-47 contains the source and pdf for the lulu version in src/doc
Once the proof version has been reviewed it should be on sale.
(the proceeds will likely go to the axiom foundation)
I expect this to be available in the next week or so.

Volume 2: Programming is in arch under book--main--1. I've started
rewriting this from scratch. I have permission from Joel Cohen
to quote from his texts. For the programming example in the book
I'm developing a "Cohen Algebra" which is a tree-structured expression
language that everyone keeps asking about. At least that is the current
plan. These things change as time progresses.

(Cohen, Joel, "Computer Algebra and Symbolic Computation: Elementary
Algorithms" A.K. Peters (2002) ISBN 1-56881-158-6 and
Cohen, Joel, "Computer Algebra and Symbolic Computation: Mathematical
Methods" A.K. Peters (2002) ISBN 1-56881-159-4)

Volume 3: Reference is in arch under book--main--1

Volume 4: Developers Guide is in arch under book--main--1. This gets
          updated whenever a mailing list discussion opens another topic.

Volume 5: Interpreter is being developed. It will take a long time.
          The first part of this work showed up in --patch-46 and now has
          engulfed a few more interpreter files. The work is slow going
          because of the volume of documentation that needs to be written.
          Working pieces of this will dribble out with each --patch

Volume 6: Compiler -- title only
Volume 7: Graphics -- title only
Volume 8: Hyperdoc -- title only

Volume 9: Algebra is where I'm hoping you'll take the lead. Find research
          papers and PhD thesis work and get permission to use it for
          documentation of the theory. we have permission to use trager's
          thesis work and bronstein's thesis work which covers most of
          the integration theory. William Sit has done the PODE work and
          is a likely source of good theory as well as good code. Larry
          Lambe is also a good source along with Cliff Williamson, Patricia
          Gianni and numerous other "friends of axiom".

Volume 10: Numerics is in process and will also take a long time. I have
           permission from a couple authors of research papers in numerics
           to quote their work and I'm in the process of doing that 
           documentation as well as looking for other sources of theory.
           there is a lot to learn here and the theory is most enlightening.
           And, oh by the way, i'm trying to get it to work correctly.

> 
> As I see now bookvol5.pamphlet includes quite a lot of code, but it does 
> not incorporate the other pamphlets under src/interp. Intentionally?
> I assume that also the other pamphlets should eventually be included 
> into bookvol, right?

time, time, time.... 

the process involves ingesting a file, rearranging it so it fits the 
logical progression, fully documenting it, and at all times making
sure the system still builds with the newly rearranged files. it is
agonizingly slow and very tedious to do a quality job. and it is hard
to "write for the reader" rather than "write for the machine". plus
there is so much to understand if you're going to explain a small 
piece of code.

i figure that the whole process for volume 5 will take about a year
or more. along the way volumes 6, 7, and 8 will get broken out as
the parts of the system get combed into their proper piles. and each
of those volumes will take a while to write. the graphics routines
will have to be reverse-engineered and documented.

> 
> So I like to suggest the following conventions.
> 
> * Convention 1:
> There is a bookvoli.tex.pamphlet file (for each i) that is intended as 
> the main entry point for a bookvolume. It contains a chapter/section 
> that list all the files that are relevant for that volume together with 
> a short explanation of what each file is about and later includes those 
> files (via LaTeX \input). bookvoli.tex.pamphlet is responsible for
> \documentclass{book}
> \usepackage{axiom}
> \begin{document}
> 
> and
> 
> \printindex
> \bibliographystyle{alpha}
> \bibliography{axiom}
> \end{document}
> 
> 
> * Convention 2:
> There is one axiom.bib.pamphlet file for all bibliographic data related 
> to these axiom book volumes.
> 
> 
> * Convention 3:
> Each "ordinary" .pamphlet file contains just text that would normally go 
> between \begin{document} and \end{document} and matches the following 
> template:
> \begin{History} %chronological order, similar to ChangeLog files.
>    \logitem{DATE1}{AUTHOR1} DESCRIPTION1
>    \logitem{DATE2}{AUTHOR2} DESCRIPTION2
> \end{History}
> \begin{abstract} ... \end{abstract}
> \begin{ExecutiveSummary} ... \end{ExecutiveSummary}
> \begin{Content} ... \end{Content}
> 
> 
> * Convention 4:
> Each "ordinary" .pamphlet leads to a section in the book whose name is 
> automatically given by the filename.
> (There is no \chapter command appearing a .pamphlet file.)
> 
> 
> * Convention 5:
> Either each bookvolume corresponds to one sub directory of the src 
> directory or there is a book directory at the same level as the src 
> directory. The book-dir should contain all bookvoli.tex.pamphlet files 
> together with axiom.bib.pamphlet and axiom.sty.pamphlet.
> (I prefer the book directory.)
> 
> 
> * Convention 6:
> LaTeX commands should be preferred to TeX equivalents.
> The definition of new LaTeX should be kept very local and at best 
> avoided at all.
> Style related commands should be avoided (like \hspace,\vspace,\newpage, 
> etc.)
> 
> Is there someone against those conventions? Where should we write them 
> so that they would be common knowledge?
> 
> I am sorry if there are already some conventions in Axiom that I have 
> not found and thus I am not aware of them. (Pointers?)
> 

the "conventions", if you can call them that, are just what seemed to
make sense at the time. since "exposing" my boilerplate here i've since
learned a bit and changed how i do things. (e.g. \printindex) i agree
that we need to discuss and complain about them as this is the only
way to develop a group mindset. but the conventions are hard to invent
without real situations. hyperlinking and the endpaper discussion 
is a good example. Bill Page's work is really driving a lot of new
constraints on this.

for the 5th volume i've been slowly merging files and re-sorting
the code into a more logical structure. there are chapters on 
various topics (which you can already see in the --patch-46 version)
just as you'd expect in any book.

eventually the interpreter, compiler, graphics, and browser will each
be in their own books and not all globed together in src/interp. at
which point we should be able to replace/upgrade/rewrite/extend the
compiler without breaking the rest of the world.

the bibliography stuff i use is broken and i have to spend a little
time on bibtex to incorporate src/doc/axiom.bib properly. it used to
work but apparently i lost the thread somewhere. i fully agree that
we should create a single bibtex file with a fully annotated bibliography.
in fact, we should probably put out a call for annotated entries of
existing works that could be reference materials. constructing a good
annotated computer algebra bibliography would be worthwhile in itself.

old latex/new latex? who knows. \eject was the only command i knew
until you mentioned \newpage. i've started recoding \eject into
\newpage when i open a source file for other changes. but either one
works so it's purely a matter of style. we'll get flak eventually
because THIS version of axiom today will use "OLD" commands tomorrow
when latex17m arrives. 

i'd suggest that you try to write volume 9 as a real book that 
includes real algebra files with real documentation that still
works in a real system and see what comes of the effort. clearly
the conventions used in the algebra are going to be a dominant
force throughout the rest of the system and you get to make them
up as you go along. it may turn out that the algebra conventions
are wildly different from the rest of the system because of your
ALLPROSE technology. but that's ok as long as it builds, it works,
and the algebra is fully documented.

volume 9 is probably a 5 year effort.

\start
Date: Tue, 13 Dec 2005 12:18:24 -0800 (PST)
From: Cliff Yapp
To: Tim Daly, Ralf Hemmecke
Subject: re: Documentation of Axiom

--- Tim Daly wrote:

 
> Axiom Volume 1: Tutorial is about to be published by lulu.com
> I have the "proof" version coming in the mail any day now.
> --patch-47 contains the source and pdf for the lulu version in
> src/doc
> Once the proof version has been reviewed it should be on sale.
> (the proceeds will likely go to the axiom foundation)
> I expect this to be available in the next week or so.

Exciting news!

[snip]
 
> Volume 9: Algebra is where I'm hoping you'll take the lead. 
> Find research papers and PhD thesis work and get permission 
> to use it for documentation of the theory. we have permission
> to use trager's thesis work and bronstein's thesis work which
> covers most of the integration theory. William Sit has done
> the PODE work and is a likely source of good theory as well 
> as good code. Larry Lambe is also a good source along with
> Cliff Williamson, Patricia Gianni and numerous other "friends
> of axiom".

I've been wondering about that a little - many, many papers that might
be of interest to us are actually copyright by the journals that
published them.  Does anybody know what the prospects are of convincing
one or more journals to contribute to the Axiom effort?

Obviously we can avoid copyright issues by re-expressing the knowledge
in the papers on our own (in a sense this is what I'm doing (or trying
to do) with the units package - incorporating design insights from
other work into a new work, and creating a new article in the process)
but that's a lot of work.  The advantage is it forces one to think
about the subject and may result in a better implementation in the end.
 
> Volume 10: Numerics is in process and will also take a long 
> time. I have permission from a couple authors of research
> papers in numerics to quote their work and I'm in the process
> of doing that documentation as well as looking for other
> sources of theory. there is a lot to learn here and the theory
> is most enlightening. And, oh by the way, i'm trying to get it
> to work correctly.

I know this is probably not something you've thought much about yet
Tim, but are we planning to add any kind of "awareness" of accuracy
limitations and error analysis to the numerical abilities of Axiom? 
The reason I ask is because if the units effort ever gets finished the
next piece I want to look at is Error Analysis.  What I would like to
be able to do is perform physical science calculations in Axiom and
have complete knowledge of and confidence in the uncertainty introduced
by experimental measurement, numerical approximations and uncertainty
induced by numerical calculations.  I think with the units
implementation and a really solid error analysis system Axiom could
become a major tool for scientific computation.  

Bascially, the first two things they introduce in experimental physics
are errors and units, and they are the most consistently important
ideas (and consistently ignored/fudged parts in undergraduate labs) in
experimental science.  My hope is that Axiom can build a whole library
of scientific capabilities someday which incorporate and enforce
correctness in errors and units throughout, but obviously those two
components must be created first, and they must be as correct, well
designed and robust as we can make them.  Symbolic computation
obviously doesn't deal with errors, but numerical does (even
implementing Real Numbers, a move I eagerly support, results in limits
due to hardware constraints if nothing else.)  I know enough to know
it's not a simple subject, but it's probably worth doing if it can be
done.  So I guess my main concern is:  how difficult would it be to add
error analysis to Axiom's numerical routines, given how they are
currently designed/being designed?

> it is agonizingly slow and very tedious to do a quality job.
> and it is hard to "write for the reader" rather than "write
> for the machine". plus there is so much to understand if 
> you're going to explain a small  piece of code.

Oddly enough, I'm reassured and encouraged by this.  The fact that
Axiom as a project accepts the time required for quality and is willing
to strive for that quality is one of the things that makes the project
so impressive. 

> the "conventions", if you can call them that, are just what 
> seemed to make sense at the time. since "exposing" my 
> boilerplate here i've since learned a bit and changed how i 
> do things. (e.g. \printindex) i agree that we need to discuss
> and complain about them as this is the only way to develop a
> group mindset. but the conventions are hard to invent
> without real situations. hyperlinking and the endpaper 
> discussion  is a good example. Bill Page's work is really 
> driving a lot of new constraints on this.

Definitely.  I still intend to try using pst-pdf and/or pdftricks as
well, to see if pdflatex can provide an alternative to the dvips route,
but I am much less worred about that now thanks to Bill's really
excellent work.

> eventually the interpreter, compiler, graphics, and browser
> will each be in their own books and not all globed together 
> in src/interp. at which point we should be able to 
> replace/upgrade/rewrite/extend the compiler without breaking
> the rest of the world.

Speaking of graphics, does anybody know of a good source for the
fundamental theories involved with producing good 2D and 3D plots?  I
recall a case where the Maxima plotting routines were upgraded to
include a technique from Yacas, but I have no idea where these
techniques are documented.  I expect Axiom has a lot of the key logic
in it already, but I am curious if we could add some features like
identification and marking of holes (for example).  Then there is the
question of "presentation quality" graphics like those generated by VTK
and (to some extent) ZICLIB - lighting, surface reflectivity, etc. 
Would the documentation of that sort of modeling technology be relevant
to Axiom?


> in fact, we should probably put out a call for annotated 
> entries of existing works that could be reference materials. 
> constructing a good annotated computer algebra bibliography 
> would be worthwhile in itself.

That brings up a question I should probably pose on Axiom-legal - what
is the copyright status on the bibtex entries that are generated by
online journal sites?  Presumably the purpose of these is to be
included, so I'm not really inclined to worry myself, but what do y'all
think?

> old latex/new latex? who knows. \eject was the only command 
> i knew until you mentioned \newpage. i've started recoding
> \eject into \newpage when i open a source file for other 
> changes. but either one works so it's purely a matter of 
> style. we'll get flak eventually because THIS version of 
> axiom today will use "OLD" commands tomorrow when latex17m
> arrives. 

Heh.  Probably true, assuming they do release a new latex at some
point.  Hopefully, style updating won't be too much of a difficulty -
in my experience you can even use search and replace in some cases.

> i'd suggest that you try to write volume 9 as a real book that
> includes real algebra files with real documentation that still
> works in a real system and see what comes of the effort. 
> clearly the conventions used in the algebra are going to be a 
> dominant force throughout the rest of the system and you get
> to make them up as you go along. it may turn out that the 
> algebra conventions are wildly different from the rest of the 
> system because of your ALLPROSE technology. but that's ok as 
> long as it builds, it works, and the algebra is fully 
> documented.
> 
> volume 9 is probably a 5 year effort.

Tim, would the units work (once it is done) be part of volume 9?  Or
should it along with error analysis, scientific constants, chemical
calculations, etc. be some hypothetical volume 10 "scientific
foundations"?

Also, is there some standard way for a pamphlet to extend the TeX
output routines?  I really need to dig into the source code and explore
Axiom's TeX abilities but IIRC someone is already working on upgrading
them?

\start
Date: Tue, 13 Dec 2005 17:31:06 -0500
From: Tim Daly
To: Cliff Yapp
Subject: re: Documentation of Axiom

> I know this is probably not something you've thought much about yet
> Tim, but are we planning to add any kind of "awareness" of accuracy
> limitations and error analysis to the numerical abilities of Axiom? 

Accuracy is somewhere on the list of things to discuss as is
the applicable range of values. Also on the list is the question
of where the algorithm applies (which quadrant, for instance).
The FORTRAN code is generally double precision floating point.
The code is highly optimized and obviously debugged thru use.

One of the things to think about is "infinite precision" versions
of the algorithm in an infinite real number setting. Axiom is
capable of computing with multi-digit values well beyond what
the hardware supports. However that does drag us into Kahan's
area and I fear to tread where the Wolf lives. :-) 

Another thing on the thought list is how to carry the accuracy
limitations and errors along in the computation. My gut feel is
that interval arithmetic and provisos would be perfect for this.

Like any analog computation (which I used to do on analog computers
back in the day) you get to the issue of scaling and automatic
scaling. Fortunately it doesn't involve rewiring :-)

There are lots of issue to cover in the documentation which, like
the units problem you are attacking, I have to learn in detail. If
I get it done in time I'll post the very first version of Volume 10
along with the next patch release.

\start
Date: Tue, 13 Dec 2005 18:01:38 -0500
From: Tim Daly
To: Camm Maguire
Subject: MAC OSX 10.4 and GCL

Camm,

Can you point me at a GCL version that is known to build on OSX 10.4?
Can you tell me the configure options with that version?

I've been unsuccessful in building a standalone version of GCL.

\start
Date: Tue, 13 Dec 2005 17:46:35 -0500
From: Bill Page
To: Tim Daly
Subject: noweb "bug" (was: article "standard" header/footer)

On Tuesday, December 13, 2005 11:10 AM Tim Daly (root) wrote:

> Ralf Hemmecke wrote:
> > Well, in my opinion it would be better to tell people that
> > axiom needs at least version x.y of noweb and provide
> > workarounds for bugs of noweb if Norman Ramsey does not
> > like to include them into his distribution. I would rather
> > say that we should take noweb as a tool and leave further
> > development of that to other people. We should rather
> > concentrate on something that is more mathematical, like
> > algebra. Would somebody disagree here?
>

I agree with Ralf. We should *not* be including noweb source
modified or otherwise in the Axiom distribution.

Similarly we should not be including gcl source in the Axiom
distribution. Camm has provided the patches necessary to build
Axiom from a previously installed gcl.

Yes, we should simply "tell people that axiom needs at least
version x.y of noweb" and version 2.6.x of gcl. These are
prerequisites. Download and install them first - then install
Axiom. If you are using apt-get on Debian or yum on Fedora,
etc. then these prerequisites are automatically installed for
you.

> disagree? is there something to disagree about? we use noweb.

No we do not use noweb! You modified a version of noweb and
included in the Axiom source distribution - that is called a
fork. That is something very different than using noweb. I
have a feeling that doing this rather ticked of Norman at an
early stage. Pity.

> it has a bug. we fix the bug and use the fixed version until
> the bug gets fixed in the distributed version.

Unless we really do want to fork noweb, that is the **wrong**
approach. Doing this implies to the developer that we do
not care what he thinks.

> the bug has been reported, the fix has been coded and
> submitted. the fix was rejected because it modified the C
> code (a language i speak) rather than using awk/sed/shell
> (languages i don't speak). so it's a static situation and
> has been for 3 years.

As I recall Norman did not actually agree that it was a bug
and originally said that we should just add escapes to the
affected source code. The preferred to modify noweb's behavior
is to write a custom awk script. About the C source
modifications he wrote:

> Absolutely *don't* do this.

See:

http://lists.nongnu.org/archive/html/axiom-developer/2002-11/msg00059.ht
ml

In fact, he even wrote the required awk script for us:

axiom-noweb:
------------

#!/bin/sh

awk '
/@use /  { uses [substr($0, 6)] = 1 }
/@defn / { defns[substr($0, 7)] = 1 }
{ print }
END {
  for (i in uses)
    if (!defns[i])
      printf "@begin code\n@defn %s\n@nl\n@text <<%s>>\n@end code\n", i,
i
}'

exit 0

# test with

sed '1,/test with/d' $0 | notangle -filter $0

<<*>>=
return x << 2 >> 2;
@

--------

All we have to do is include this script with the Axiom
distribution and call it as a filter as he shows.

% notangle -filter axiom-noweb

Really, this script is not so hard to understand is it? The
documentation for noweb filters is here:

http://www.literateprogramming.com/noweb_hacker.pdf

> the standard version fails, the patched version works. use
> the patched version.
>

I would very much prefer to use the unmodified version of
noweb with the awk script as suggested by Norman.

> if we get lucky your version of the fix will get accepted
> and we can stop using our local patch.
>
> have you sent a bug report and your fix to Norman?
> is there a later version with your fix?
>

You are calling it a bug and Norman thinks of it only as a
specific customization of noweb's behavior. There is no
need for a "fix".

\start
Date: Tue, 13 Dec 2005 20:17:25 -0500
From: Tim Daly
To: Bill Page
Subject: Re: noweb "bug" (was: article "standard" header/footer)

re: noweb bug

   i don't agree with Norman. *I* consider it a bug.
   especially so since Ralf fixed the same "feature" independently.
   noweb does the wrong thing with certain non-chunks.
   if the chunk isn't in the hashtable complain and continue.

   i diagnosed the bug, fixed it, and sent off a diff -Naur patch.
   which is exactly the way open source is supposed to work.
   Norman disagreed with my patch and rejected it. that's his call.
   which is exactly the way open source is supposed to work.
   but we still NEED the patch. Axiom won't build without it.
   so we get the UNMODIFIED sources, apply the patch, and build.

re: awk

   since i don't write awk (but you do) i find the awk script unreadable.
   it really ought to be documented. we had this discussion before when
   you wrote awk scripts into the makefile. awk is linenoise to me and
   i hate having to learn a whole new language to maintain 8 lines of code.

   this may be an acceptable way to fix the "feature" but i'm unclear
   when and how to apply awk/gawk/nawk scripts to noweb. i looked at
   the filtering thing but since it is all in awk/nawk/gawk it made no 
   sense. if it was so clear why didn't Ralf apply Norman's awk code?
  
   does this work with awk/nawk/gawk? all three? already i have to 
   customize the build scripts because of this trivial feature. it's
   the ONLY shell variable besides AXIOM that needs to be set before
   the system build begins. bug #1 on MACOSX is the lack of nawk/gawk.

re: gcl

   if it helps, think of it as automating a cvs get for the version we want.
   we get the UNMODIFIED sources and apply axiom-specific patches.
   we'll still need a patch mechanism otherwise the browser, sman, and
   graphics are broken. yet the axiom lisp patches will *never* be part
   of EVERY lisp distribution, not even part of GCL.

   an alternative is to modify GCL to support UFFI (Universal Foreign
   Function Interface) and modify Axiom to use it. I looked at this
   path and it is a lot of work. When Axiom goes ANSI it'll have to
   be done but that's still a long way in the future and GCL may have
   UFFI by then. Only a few other common lisps support UFFI so far.

re: forking

   you seem to feel that maintaining axiom-specific patches to standard 
   distributions (we use the standard tgz files as a base) is equivalent
   to forking a distibution. my definition of forking differs. in my
   view we are not forking. we are fixing axiom-specific bugs. we don't
   claim to distribute common lisp or GCL or noweb or anything but Axiom.
   we don't even claim that OUR version of noweb works for anyone else.
   we don't distribute a patched version on websites, we don't advertise
   that ours is better/faster/sexier. we're not trying to compete.

   GCL and noweb sources in axiom are EXACTLY as distributed and could
   (in a more perfect world) be fetched from CVS automatically. that's
   hardly a fork. GCL and noweb need source-level patches to work.



re: advocacy

  ok. you're advocating a change. that's good. but advocacy is volunteering
     - check out a --patch-46 copy of the system, 
     - make the changes, 
     - document the changes,
     - test them,
     - test the whole system build,
     - "diff -Naur old new" to create the patches
     - mail the patches to me, one set for noweb, one set for gcl. 
     - i'll apply them and test them
     - we'll discuss the results
     - i'll add them to the main sources

  sending documented, running, and debugged code that "just works" goes
  a long way toward winning the argument. complaining that i'm doing
  it wrong and expecting me to do the work isn't nearly as effective.
  at best if i agree with you i'm likely to add it to an already
  overlong queue. if i disagree with you and your code works it is
  much more likely to be included (witness the awk script already
  in the Makefile).

re: fixing working code

  the system build works. i can see hundreds of things in Axiom that
  need fixing but GCL and noweb aren't on that list (at least for me).
  basic functionality in Axiom is still broken (like ")cd" or ")hd") 
  and are MUCH higher on the todo list. 

  i'd much prefer that you try to tackle something like the Hyperdoc
  browser since you're advocating redoing the front end to use firefox.
  why not take the lead on Volume 8: Hyperdoc? it needs to be documented
  and we need to understand it so we can redesign/rewrite it. you have
  more ideas in that direction than anyone else.

\start
Date: Tue, 13 Dec 2005 17:26:09 -0800 (PST)
From: Cliff Yapp
To: Tim Daly, Bill Page
Subject: re: noweb "bug" (was: article "standard" header/footer)

--- Tim Daly wrote:

> an alternative is to modify GCL to support UFFI (Universal 
> Foreign Function Interface) and modify Axiom to use it. I 
> looked at this path and it is a lot of work. When Axiom goes
> ANSI it'll have to be done but that's still a long way in the
> future and GCL may have UFFI by then. Only a few other common
> lisps support UFFI so far.

Not to muddy the waters further, but actually it looks like a successor
to UFFI might be forming in the guise of CFFI, with the sweetener of an
automatic tool to generate bindings for C/C++ libraries called
Verrazano.  This effort is the result of one of the other Summer of
Code projects sponsored by Google.

http://common-lisp.net/project/cffi/
http://common-lisp.net/project/fetter/

I'm hoping the FLTK FFI bindings might prove a viable cross platform
backend target for McCLIM in the future.

\start
Date: Tue, 13 Dec 2005 21:26:09 -0500
From: Tim Daly
To: Cliff Yapp
Subject: re: noweb "bug" (was: article "standard" header/footer)

sbcl just got itself working on windows.
i'm trying to build it to see if they got mcclim working.
if so, we have a cross-platform gui.

an alternative i'm also investigating is gtk+ and libglade
it seems that gaim uses it and works everywhere.
if they can, we can.

\start
Date: Tue, 13 Dec 2005 21:41:41 -0500
From: Bill Page
To: Tim Daly
Subject: RE: noweb "bug" (was: article "standard" header/footer)

On Tuesday, December 13, 2005 8:17 PM Tim Daly (root) wrote:
>
> re: noweb bug
>
>    i don't agree with Norman. *I* consider it a bug.
>    especially so since Ralf fixed the same "feature" independently.
>    noweb does the wrong thing with certain non-chunks.
>    if the chunk isn't in the hashtable complain and continue.

Norman defines it this way: If a chunk isn't in the hashtable
treat it as empty text. That is the behavior that he expects
and presumably what some other users of noweb might also expect.
Your patch would change noweb's behavior for everyone.

Ralf did not patch noweb to achieve the effect he desired so I
don't think Ralf would classify this as a bug. It is just the
way noweb works by default.

>
>    i diagnosed the bug, fixed it, and sent off a diff -Naur
>    patch. which is exactly the way open source is supposed to
>    work. Norman disagreed with my patch and rejected it. that's
>    his call. which is exactly the way open source is supposed
>    to work.

I agree.

>    but we still NEED the patch. Axiom won't build without it.

No. We don't need a patch, we just need to use noweb a little
differently, the way it was designed to be used. No patch is
needed.

>    so we get the UNMODIFIED sources, apply the patch, and
>    build.
>

This is **not** the way open source is supposed to work unless
you are prepared to possibly alienate the original developer
and take on the responsibility for maintaining a separate version
of noweb. This is called a fork.

There is a standard well-documented way to change noweb's behavior
and Norman showed us exactly how to do it.

> re: awk
>
>    since i don't write awk (but you do) i find the awk
>    script unreadable.

I don't know much about awk. All I do is 'man awk' and read
a little. For example:

http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/
awk.1.html

>    it really ought to be documented. we had this discussion
>    before when you wrote awk scripts into the makefile. awk
>    is linenoise to me and i hate having to learn a whole new
>    language to maintain 8 lines of code.

But you are developing on linux. awk and friends have been in
all unix and unix-like systems for nearly 30 years. As far as
I am concerned you have no excuses for not being able to read
it.

http://www.gnu.org/software/gawk/manual/html_node/History.html

>
>    this may be an acceptable way to fix the "feature" but i'm
>    unclear when and how to apply awk/gawk/nawk scripts to
>    noweb. i looked at the filtering thing but since it is all
>    in awk/nawk/gawk it made no sense.

That is not true. The -filter option is very clearly documented
in detail by it's author. It has nothing to do with awk. The
filter could be written in the C programming language if one
wanted. It is just a filter.

> if it was so clear why didn't Ralf apply Norman's awk code?

Probably because he did not know about it. It was buried under
more than 3 years of discussion about other things.

>  
>    does this work with awk/nawk/gawk? all three?

Norman's awk script is vanilla awk. I would say "all three".

>    already i have to customize the build scripts because of
>    this trivial feature. it's the ONLY shell variable besides
>    AXIOM that needs to be set before the system build begins.

Why do you need a shell variable?

> bug #1 on MACOSX is the lack of nawk/gawk.
>

You must be kidding. See:

http://developer.apple.com/internet/opensource/opensourcescripting.html

and

http://developer.apple.com/documentation/MacOSX/Conceptual/OSX_Technolog
y_Overview/Tools/chapter_10_section_9.html

awk is the first tool on the list.

> re: gcl
>
>    if it helps, think of it as automating a cvs get for the
>    version we want. we get the UNMODIFIED sources and apply
>    axiom-specific patches. we'll still need a patch mechanism
>    otherwise the browser, sman, and graphics are broken.

That is not true. Camm does not patch gcl sources in order
to build Axiom on Debian.

>    yet the axiom lisp patches will *never* be part
>    of EVERY lisp distribution, not even part of GCL.

There is no need for such patches.

>
>    an alternative is to modify GCL to support UFFI (Universal
>    Foreign Function Interface) and modify Axiom to use it.
>    I looked at this path and it is a lot of work. When Axiom
>    goes ANSI it'll have to be done but that's still a long way
>    in the future and GCL may have UFFI by then. Only a few other
>    common lisps support UFFI so far.

UFFI is not required in order to build Axiom.

>
> re: forking
>
>    you seem to feel that maintaining axiom-specific patches
>    to standard distributions (we use the standard tgz files as
>    a base) is equivalent to forking a distribution.

Yes I do. See:

http://en.wikipedia.org/wiki/Forking

"In software engineering, a project fork or branch happens when
a developer (or a group of them) takes code from a project and
starts to develop independently of the rest."

>    my definition of forking differs. in my view we are not
>    forking.

Humpty Dumpty: When I use a word, it means just what I choose it
               to mean - neither more nor less.
Alice: The question is, whether you can make words mean so many
       different things.
Humpty Dumpty: The question is: which is to be master - that's all.

>    we are fixing axiom-specific bugs. we don't claim to distribute
>    common lisp or GCL or noweb or anything but Axiom. we don't
>    even claim that OUR version of noweb works for anyone else.
>    we don't distribute a patched version on websites, we don't
>    advertise that ours is better/faster/sexier. we're not trying
> to compete.

Forking has nothing to do with competing. It is a result of the
breakdown of a collaborative effort. Developers who want to do
their own thing without regard to cooperation with others.

>
>    GCL and noweb sources in axiom are EXACTLY as distributed
>    and could (in a more perfect world) be fetched from CVS
>    automatically. that's hardly a fork. GCL and noweb need
>    source-level patches to work.

That is not true. Axiom is built on Debain without patches
to gcl or noweb.

>
> re: advocacy
>
>   ok. you're advocating a change.

No, I am just complaining that you did something wrong 3 years
ago. It was Ralf who was advocating a change. I just agreed
with him. ;) The only change that I am advocating is that we
do everything we can to attract more Axiom developers.

>   that's good. but advocacy is volunteering
>      - check out a --patch-46 copy of the system,
>      - make the changes,
>      - document the changes,

The documentation would go something like this.

In noweb when the syntax <<xxx>> appears in the code, it
is supposed to be interpreted as the substitution (inclusion)
of the contents of the chunk named xxx at that point. The
problem that we have in Axiom is that sometimes the appearance
of <<xxx>> in the source code should not be interpreted as the
use of a chunk name but should be interpreted literally as
'<<xxx>>'. If <<xxx>>= does not occur as the actual name of
a chunk, then by default noweb simply omits the text '<<xxx>>'.

It is possible to add escapes to the source code so that <<xxx>>
is interpreted literally. But since it is unlikely that <<xxx>>
will appear as the name of a chunk, another possibility is to
change the default behavior of noweb so that it treats <<xxx>>
as if it was defined as

<<xxx>>='<<xxx>>'

The following noweb -filter accomplishes this.

As explained in Norman's noweb documentation, each occurrence
of <<xxx>> results in the internal code
  @use xxx
Each occurrence of <<xxx>>= results in
  @defn xxx
The complete definition of a chunk looks like this:

  @begin code
  @defn xxx
  @nl
  @text <<xxx>>
  @end code

The script works as follows:

1) Awk reads one line at one at a time.
2) If line begins "@use " then add rest of line as
   a key of the 'uses' array.
3) If line begins "@defn " then add rest of line as
   a key of the 'defns' array.
4) Output each line as it is.
5) At the end of the file, for each key in 'uses' that
   is not in 'defns' this script adds a definition of a
   chunk that is the same as the name of the chunk.

To modify the Axiom source distribution to use this method,
create a file named 'axiom-noweb' with the following
contents:
---------
#!/bin/sh
awk '
/@use /  { uses [substr($0, 6)] = 1 }
/@defn / { defns[substr($0, 7)] = 1 }
{ print }
END {
  for (i in uses)
    if (!defns[i])
      printf "@begin code\n@defn %s\n@nl\n@text <<%s>>\n@end code\n",
i,i
}'
exit 0
------

Make it executable by

 % chmod a+x axiom-noweb

and change every occurrence of 'tangle' in the Axiom make files
to 'tangle -filter axiom-noweb'.

>      - test them,
>      - test the whole system build,
>      - "diff -Naur old new" to create the patches
>      - mail the patches to me, one set for noweb,
>        one set for gcl.
>      - i'll apply them and test them
>      - we'll discuss the results
>      - i'll add them to the main sources

If anyone wants to do this, I would be very glad to help them
do it. We need more Axiom developers. This is a simple change.
All of the technical work has already been done by someone else,
but it would be a good chance to learn how to submit a patch.

>
>   sending documented, running, and debugged code that "just
>   works" goes a long way toward winning the argument.
>   complaining that i'm doing it wrong and expecting me to do
>   the work isn't nearly as effective.

I don't expect you to do the work. This is an argument about
principles not pragmatics.

>   at best if i agree with you i'm likely to add it to an already
>   overlong queue. if i disagree with you and your code works it
>   is much more likely to be included (witness the awk script
>   already in the Makefile).
>
> re: fixing working code
>
>   the system build works. i can see hundreds of things in Axiom
>   that need fixing but GCL and noweb aren't on that list (at
>   least for me). basic functionality in Axiom is still broken
>   (like ")cd" or ")hd") and are MUCH higher on the todo list.
>

I agree. But what is broken about ")cd" and what is the meaning
of the command ")hd" ?

>   i'd much prefer that you try to tackle something like the
>   Hyperdoc browser since you're advocating redoing the front
>   end to use firefox. why not take the lead on Volume 8:
>   Hyperdoc? it needs to be documented and we need to understand
>   it so we can redesign/rewrite it. you have more ideas in that
>   direction than anyone else.
>

I was really hoping what Kai Kaminski has already done would
encourage either him or someone else to take on that sort of
project. I am willing to continue to try to help anyone who
wants to do this.

\start
Date: Tue, 13 Dec 2005 23:17:14 -0500
From: Tim Daly
To: Camm Maguire
Subject: Axiom uses unmodified GCL on Debian?
Cc: Bill Page, list

Camm,

> That is not true. Camm does not patch gcl sources in order
> to build Axiom on Debian.
> 
> >    yet the axiom lisp patches will *never* be part
> >    of EVERY lisp distribution, not even part of GCL.
> 
> There is no need for such patches.

Bill Page tells me that you can build axiom on vanilla GCL
and everything works. Is this correct? If so, where do you
modify the Makefiles? Can you send me a "diff -Naur old new"
of the changes?

\start
Date: Tue, 13 Dec 2005 22:56:07 -0500
From: Bill Page
To: Tim Daly
Subject: RE: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

Tim,

On Thu, 29 Sep 2005 23:10:04 -0400 Camm wrote:

http://lists.nongnu.org/archive/html/axiom-developer/2005-09/msg00296.ht
ml

...

Here is the patch I'm using in the latest debian upload:

Here is the patch I'm using in the latest
   debian upload:

==========================
==========================
======================
=====
--- ./lsp/Makefile.pamphlet.~1.5.~	2005-09-05 18:50:31.000000000
+0000
+++ ./lsp/Makefile.pamphlet	2005-09-20 21:20:10.000000000 +0000
@@ -1012,14 +1012,7 @@
 	@echo 1 building ${LSP} ${GCLVERSION}

 gcldir:
-	@echo 2 building ${GCLVERSION}
-	@tar -zxf ${ZIPS}/${GCLVERSION}.tgz
-<<gcl-2.6.7.socket.patch>>
-<<gcl-2.6.7.libspad.patch>>
-<<gcl-2.6.7.toploop.patch>>
-<<gcl-2.6.7.tail-recursive.patch>>
-<<gcl-2.6.7.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))#-native-reloc(setq compiler::*default-system-p* t))"
si::*system-directory* (quote (list #+native-reloc".o" ".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
 ...

Regards,
Bill Page.

> -----Original Message-----
> From: root [mailto:Tim Daly]
> Sent: Tuesday, December 13, 2005 11:17 PM
> To: Camm Maguire
> Cc: Page, Bill; list; Ralf Hemmecke
> Subject: Axiom uses unmodified GCL on Debian?
>
> Camm,
>
> > That is not true. Camm does not patch gcl sources in order
> > to build Axiom on Debian.
> >
> > >    yet the axiom lisp patches will *never* be part
> > >    of EVERY lisp distribution, not even part of GCL.
> >
> > There is no need for such patches.
>
> Bill Page tells me that you can build axiom on vanilla GCL
> and everything works. Is this correct? If so, where do you
> modify the Makefiles? Can you send me a "diff -Naur old new"
> of the changes?

\start
Date: Tue, 13 Dec 2005 20:22:50 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

--- Tim Daly wrote:

> sbcl just got itself working on windows.
> i'm trying to build it to see if they got mcclim working.
> if so, we have a cross-platform gui.

Unfortunately, McCLIM currently requires clx to work (there is no
Windows backend even in the works yet).  
 
> an alternative i'm also investigating is gtk+ and libglade
> it seems that gaim uses it and works everywhere.
> if they can, we can.

A pure GTK (e.g. non-lisp) solution should be workable - I know Gimp
runs on Windows using GTK.  If we're not worrying about Lisp FLTK might
be a good choice.  It has some interesting options for visualization
using VTK too:
http://vtkfltk.sourceforge.net/

\start
Date: Wed, 14 Dec 2005 00:38:09 -0500
From: Tim Daly
To: Bill Page
Subject: Re: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

clearly i missed this patch file.
i've applied it and am testing it now.

\start
Date: Wed, 14 Dec 2005 01:33:01 -0500
From: Tim Daly
To: Bill Page
Subject: Re: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

well, the build is proceeding and appears to be progressing ok.
of course i have no idea WHY it works since there are no comments 
in the patch file. i'll test the graphics and hyperdoc in the morning.

so code appears in debian 
with changes that are not in the master source tree
and is distributed under the name 'axiom'
and you don't consider that a fork....

but patching the original source files of gcl and noweb
to build axiom (but not a gcl or noweb distro)
is considered a fork?

methinks you're being a bit harsh. forking is not intended
in either case and i'd never claim camm is trying to fork
axiom. we've had close cooperation over many years he's
remotely logged onto my main laptop to debug the original
SELinux failure and we worked together to corner an issue
of semantics that was killing the axiom compiler. i have
the greatest respect for him and wouldn't consider forking
gcl under any circumstances.

the fact that debian changes are not integrated into the
axiom source tree is likely due to miscommunication and
lack of time or lack of understanding, not malicious intent.
this needs to be fixed, though, as the debian version should
be buildable from the master sources. i was under the impression
that they were.

sending (or resending) patch files that fix the differences
is usually sufficient. 

if you'll push the noweb changes all the way thru the build
process and send patch files i'll 'fix' that also.

\start
Date: Wed, 14 Dec 2005 01:35:37 -0500
From: Bill Page
To: Tim Daly
Subject: RE: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

On Wednesday, December 14, 2005 1:33 AM Tim Daly (root) wrote:

>
> well, the build is proceeding and appears to be progressing
> ok. of course i have no idea WHY it works since there are no
> comments in the patch file. i'll test the graphics and hyperdoc
> in the morning.

Great. It would be nice if Camm had the time to write explicit
documentation for the patch, but I am quite sure that I can
pull his comments from the axiom-devel email list over the last
two years or so that (more or less) fully describe the approach
he is using. Would you like me to send you what I find?

>
> so code appears in debian
> with changes that are not in the master source tree
> and is distributed under the name 'axiom'
> and you don't consider that a fork....
>

I didn't say that. I was under the impression that he was
doing this with your full knowledge. But if you, as the primary
Axiom developer, disapproved of this, then we would have to
consider the debian port a "fork" at least in the sense that
Camm or some other developer would be stuck maintaining it
forever, but of course not in the sense that he is trying to
make it work any differently than it does now under the other
linux environments.

There is a good reason to build Axiom in this particular way
on Debian because Debian policy would not let Axiom to be
built the way we do it now in the current Axiom  distribution.
They are very strict about the way the different packages and
their prerequisites have to be organized in order to be
compatible with the apt-get packaging.

> but patching the original source files of gcl and noweb
> to build axiom (but not a gcl or noweb distro) is considered
> a fork?
>

I never said patching gcl the way we do in the current Axiom
distribution was a fork since it is being done with the full
knowledge of the gcl developer. Camm is intimately aware of
these changes. They are extensions to gcl and do not affect
the way gcl works any fundamental way. I just think that the
way the build is done on Debian is a superior approach and that
we should adopt it.

> methinks you're being a bit harsh.

Yes, perhaps I am. I should say something apologetic. I guess
I am just feeling rather frustrated lately because progress is
considerably less than I would have liked on several Axiom
"fronts". Meanwhile I still want to get back to actually using
Axiom for research.

> forking is not intended in either case and i'd never claim
> camm is trying to fork axiom. we've had close cooperation
> over many years he's remotely logged onto my main laptop to
> debug the original SELinux failure and we worked together to
> corner an issue of semantics that was killing the axiom
> compiler. i have the greatest respect for him and wouldn't
> consider forking gcl under any circumstances.
>

I understand and did not mean to imply that. I am sure that
Camm understands this. I think he is just being very very
cautious about suggesting any changes in the way you are doing
things. (And you keep saying: "Advocacy is volunteering" and
so it scares people off ... ;)

I don't know the situation with Norman Ramsey (noweb) but I do
know that we haven't heard anything from him on the axiom-devel
list since he sent the awk filter script some years ago. I think
it is a pity that Axiom (and Tim Daly!) is not more well known
for the commitment to literate programming. But I suppose if
you find the intersection of the set of developers interested
in literate programming with the set of developers interested
in computer algebra, I guess it's not such a big crowd.

> the fact that debian changes are not integrated into the
> axiom source tree is likely due to miscommunication and
> lack of time or lack of understanding, not malicious intent.
> this needs to be fixed, though, as the debian version should
> be buildable from the master sources. i was under the
> impression that they were.

Wow, that is a bit of shock to me since we have been talking
about these differences between the Debian build and the Axiom
distribution for almost two years now. Camm explained, what
seems like ages ago to me, that the Debian policy would not
permit Axiom to be built the way it is done in the current
distribution. I am very glad that you agree that this should
be fixed.

We would also have to fix this in the axiom--windows--1
distribution but I guess we are still planning to merge the
windows specific changes back into axiom--main--1 so that
would probably still be the best way to go. It's been a
year since our first release of Axiom on windows so I
suppose that it is time to put some increased priority on
trying to make that happen. (I mean me and whoever else
would like to help do that... :)

>
> sending (or resending) patch files that fix the differences
> is usually sufficient.
>
> if you'll push the noweb changes all the way thru the build
> process and send patch files i'll 'fix' that also.
>

<sigh> Ok, if no one else steps forward to take this task,
I guess I can do it by this weekend.

\start
Date: Tue, 13 Dec 2005 23:07:51 -0800
From: Arthur Ralfs
To: list
Subject: AxiomUI

Hello,

I've been listening in for the last month or so.  I see mention of
AxiomUI but when I search I haven't been able to find any code, only
descriptions of what it's supposed to do.  Is there any code available
for inspection?  I might be interested in working on this and I'm
eager to see what's been done already.

\start
Date: Wed, 14 Dec 2005 02:43:13 -0500
From: Bill Page
To: Arthur Ralfs
Subject: RE: AxiomUI

On Wednesday, December 14, 2005 2:08 AM Arthur Ralfs wrote:
>
> I've been listening in for the last month or so.  I see mention
> of AxiomUI but when I search I haven't been able to find any code,
> only descriptions of what it's supposed to do.  Is there any code
> available for inspection?  I might be interested in working on this
> and I'm eager to see what's been done already.
>

If you haven't seen this already you can start here with the original
proposal:

http://wiki.axiom-developer.org/AxiomUI

Then you can view the source code online at:

http://wiki.axiom-developer.org/axiom--GUI--1

The actual source archive can be retrieved via

% tla get axiom--GUI--1

For details of tla see:

http://wiki.axiom-developer.org/ArchUsage

I think the developer Kai Kaminski is still subscribed to this
list so if you ask specific questions he might be able to help.
Otherwise, I will see what I can answer.

Thanks for your interest!

\start
Date: Wed, 14 Dec 2005 00:45:58 -0800
From: Arthur Ralfs
To: list
Subject: Re: AxiomUI

Page, Bill wrote:

>If you haven't seen this already you can start here with the original
>proposal:
>
>http://wiki.axiom-developer.org/AxiomUI
>
>Then you can view the source code online at:
>
>http://wiki.axiom-developer.org/axiom--GUI--1
>
>The actual source archive can be retrieved via
>
>% tla get axiom--GUI--1
>
>For details of tla see:
>
>http://wiki.axiom-developer.org/ArchUsage
>
>I think the developer Kai Kaminski is still subscribed to this
>list so if you ask specific questions he might be able to help.
>Otherwise, I will see what I can answer.
>
>Thanks for your interest!
>
OK I got the source but when I went to the second wiki link it
redirected to http://wiki.axiom-developer.org/axiom--GUI--1/FrontPage
which was a new page with nothing in it.

\start
Date: Wed, 14 Dec 2005 11:41:14 +0100
From: Gernot Hueber
To: Tim Daly
Subject: Re: Building axiom on FreeBSD

I tried about the same than Uli (but using FreeBSD 5.4)

What looks suspicious is:
/.amd_mnt/johnson/vol/vol0/home/hueber/src/axiom--main--1--patch-46/obj/f=
reebsd/bin/bootsys: not found

Gernot

On Mon, 2005-12-12 at 22:12 -0500, root wrote:
> ah. then it failed to compile. which is odd because there is nothing
> special about that file at all.
>
> ok. look upward in the console listing and see why it failed to build.

\start
Date: Wed, 14 Dec 2005 11:50:24 +0100
From: Gernot Hueber
To: Tim Daly
Subject: Re: Building axiom on FreeBSD

Hello all,

I have found some more information when generating bootsys, actually I
have not yet experience with lisp. BTW the boothr.o file exists!

Can anybody explain this error - and offer a solution ;-)

Thanks

Gernot

hawkings# cat console
GCL (GNU Common Lisp)  2.6.7 ANSI    Nov 23 2005 09:09:08
Source License: LGPL(gcl,gmp), GPL(unexec,bfd)
Binary License:  GPL due to GPL'ed components: (READLINE UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL.

>
Loading /.amd_mnt/johnson/vol/vol0/home/hueber/src/axiom--main--1--patch-=
46/obj/freebsd/boot/boothdr.o
Error in IN-PACKAGE [or a callee]: A package error occurred on BOOTTRAN:
"No such package".

Fast links are on: do (use-fast-links nil) for debugging
Broken at IN-PACKAGE.  Type :H for Help.
 1 (Continue)
 2 Retry loading file
"/.amd_mnt/johnson/vol/vol0/home/hueber/src/axiom--main--1--patch-46/obj/=
freebsd/boot/boothdr.o".
 3 (Abort) Return to top level.
dbl:>>hawkings#


On Wed, 2005-12-14 at 11:41 +0100, Gernot Hueber wrote:
> I tried about the same than Uli (but using FreeBSD 5.4)
>
> What looks suspicious is:
> /.amd_mnt/johnson/vol/vol0/home/hueber/src/axiom--main--1--patch-46/obj=
/freebsd/bin/bootsys: not found
>
> Gernot
>
> On Mon, 2005-12-12 at 22:12 -0500, root wrote:
> > ah. then it failed to compile. which is odd because there is nothing
> > special about that file at all.
> >
> > ok. look upward in the console listing and see why it failed to build.

\start
Date: Wed, 14 Dec 2005 13:55:45 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: noweb "bug" (was: article "standard" header/footer)

By the way, try the following in AXIOMROOT.

find . -name '*.pamphlet' -exec grep "<<.*>>" {} \; > xxx.1
grep -v ">>= *$" xxx.1 > xxx.2
grep -v ">> *$"  xxx.2 > xxx.3
grep -v "@<<"    xxx.3 > xxx.4
wc xxx.4
   86  472 4836 xxx.4

Look at these 86 lines. I've only found

Label:          '<<' Name '>>' ;

(which is from ./src/interp/fnewmeta.lisp.pamphlet)
where Tim's problem occurs. So do we have the noweb patch just for this 
line?

\start
Date: Wed, 14 Dec 2005 07:38:51 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: hyperlinked algebra

On Tuesday, December 13, 2005 12:27 PM Ralf Hemmecke wrote:
>
> Bill Page wrote:
> >> Doing the same thing with \n instead of \- would be a bit more
> >> complicated. But I think for LaTeX-speakers \- is more natural
> >> anyway.
> >
> > Hmmm ... maybe '\n ' would be better - more compatible with
> > the definition of the "dot" language?
>
> Well, yes, this may be a good reason to look for something that
> works with \n. But the problem is that \n would be expanded during
> \write so \nGroup would count as one control sequence which is
> usually not defined. I don't know how I can easily achieve a
> similar trick as with \-.

What I had in mind was writing it like this:

  XxxYyy [label="Xxx\n Yyy"];

i.e. with a space character after the \n. That would allow LaTeX
to treat it as a two-character command, right? And the extra
space would not greatly affect the way GraphViz handles multi-line
labels outside of LaTeX.

But I like your solution below better.

>
> > Why would you say '\-' is more natural in LaTeX?
>
> TeX has automatic hyphenation, but sometimes one must help.
> That can be done via the \- control sequence. Then TeX considers
> the place where \- is as an additional place to break lines.
> ...

I think you are right. This is a good choice for LaTeX. Perhaps
we should submit this idea to the GraphViz developers. I can't
seem to locate the original author Derek Rayside of the script:

http://www.graphviz.org/Resources.php
http://web.mit.edu/~drayside/www/graphviz.tex/main.pdf

-------

I have solved the remaining problems with using hyperlinking
with GraphViz in LaTeX so that now the links in the diagram
link directly to the appropriate section of the target. For
example:

http://wiki.axiom-developer.org/book--main--1/Endpaper3

click on 'pdf' and then click on the first heading. This
takes you to the algebra hierarchy diagram. Now click on
the node "SetCategory" and you will jump directly to the
definition of SetCategory in the catdef.spad.pamphlet. And
similarly for the first few other top nodes.

Also I had to update catdef.spad.pamphlet to include a
\hypertarget{NAME}{} specification for each chunk of the
file.

To make this work, I had to upgrade to the most recent GraphViz
version 2.7 and also modify the procedure to create pdf files
to use 'dvips -z' and 'ps2pdf'. This is now implemented for the
pamphlet page type on MathAction.

Please let me know if you have any questions about how to
use this.

\start
Date: Wed, 14 Dec 2005 13:26:33 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: noweb "bug" (was: article "standard" header/footer)

Hello,

root wrote:
> re: noweb bug
> 
>    i don't agree with Norman. *I* consider it a bug.
>    especially so since Ralf fixed the same "feature" independently.
>    noweb does the wrong thing with certain non-chunks.
>    if the chunk isn't in the hashtable complain and continue.
> 
>    i diagnosed the bug, fixed it, and sent off a diff -Naur patch.
>    which is exactly the way open source is supposed to work.
>    Norman disagreed with my patch and rejected it. that's his call.
>    which is exactly the way open source is supposed to work.
>    but we still NEED the patch. Axiom won't build without it.
>    so we get the UNMODIFIED sources, apply the patch, and build.

I did not know of the original messages for Tim's need to "fix" noweb.
I've read through them and have to agree with Norman. If he doesn't like 
it and suggests even an awk script, that is just fine for me.

The stuff that I am working around is a bit different. My problem was 
that noweb complains about non-ending module names where it should not.

Try to tangle the file

%%%%% test.nw %%%%%
A test file.

<<*>>=
-- Here comes some code
<<: A -> B
<<: (A, B) -> X
@
and we go on with the text.

%%%%%% end test.nw %%%%

According to the specification noweb, the line
<<: A -> B
should be just fine, since there is no >> on the same line. But instead 
markup warns with

Module name doesn't end

and returns an error. So I cannot apply a filter, because the bug is at 
the very early stage. Here is a part of the mail from Norman Ramsey that 
I got about half a year ago when I reported this strange behaviour.

---BEGIN
My errors are different:

   : nr@labrador 14642 ; $NW/markup /tmp/test.nw >/dev/null
   /tmp/test.nw:5: Module name doesn't end
   /tmp/test.nw:6: Module name doesn't end

This behavior still doesn't meet noweb's specification, so you've
found a bug.
---END

Last night, I dived into markup.nw and believe that I have found the bug.

One should simply replace the line

     errorat(filename, lineno, Error, "Module name doesn't end", line);

by

     errorat(filename, lineno, Normal, "Module name doesn't end", line);

and the error is gone. I've sent this to Norman. Let's see what he says.

\start
Date: 14 Dec 2005 12:12:50 +0100
From: Martin Rubey
To: Ralf Hemmecke
Subject: Re: navigating Axiom's library
Cc: Kai Kaminski, list

Ralf Hemmecke writes:

> Hi Martin, sorry, but I am a bit behind...

too much traffic...

> Martin Rubey wrote:

> > As far as I understand, you are proposing a system where several (literate)
> > source files are compiled into one big dvi/ps/pdf/html/mathml ... file.

> That is true for dvi/ps/pdf. HTML and friends should be hyperlinked
> anyway. Whether ALL documentation is in one big HTML file or whether there
> are several smaller pages is a minor detail for html.

Well, I believe that it does make a difference for the HyperDoc replacement:
When you "browse" an operation or a constructor, you only want to see the
documentation to this particular entry, not more. It wouldn't be quite the
right thing to simply jump to the first line of the description of the
operation. 

More importantly, in HyperDoc you can select "descriptions" to get the
descriptions of all operations with a certain name. In this case, I guess that
the html page needs to be build dynamically.

> > As you know, I think that it is necessary that we go from three
> > documentation formats (namely: pamphlet, hypertex, structured text) to one,
> > namely yours.

> Well, mine is ordinary noweb stuff. It is only that I imposed a bit of more
> structure that I would also like to impose on the .pamphlet files of Axiom
> (if there is common agreement

I strongly agree.

> I like the idea of MathAction (that's where the structured text is, right?)
> MathAction serves another purpose, I think. I propose just something for the
> Axiom sources, no interactive stuff.

Yes, BUT: it should be trivial to add another environment that serves to
execute code and pastes in the result verbatim. In fact, I believe that this
would be useful for the documentation part, too.

And that's nothing but the functionality MathAction provides and not much else
but an interactive worksheet if processing is sufficiently fast.

All that I'm saying is: forget "structured text", make everything
noweb. "structured text" and "noweb" are not that far apart as it might
seem. Syntax for interactive worksheets does not exist yet, so it should
clearly be noweb.

> ... hyperdoc ...
> I would want to replace it with aldordoc.sty + some better browser that
> extracts information about the .as sources and is able to navigate through
> the Algbra hierarchy. Well, that would be the same idea as hyperdoc, but not
> with hyperdoc but with an ordinary webbrowser.

Yes. Well, "some better browser" would probably be a javascript application or
something similar that composes html pages from smaller pieces dynamically.

> > As far as dvi/pdf/ps, i.e., printed matter is concerned, I think there is
> > not much left to do. The one bit missing is to enable ALLPROSE to produce
> > different files for the various user groups. For example a file which
> > contains only the usage info (as in aldordoc) and the examples for
> > endusers.

> I think I could do this easily. And maybe I'll even do it for the next
> release of ALLPROSE, since you keep asking for it. 

(but please be aware of the fact that I will use Aldor only when it has become
a replacement for SPAD. So I really would like to have a HyperDoc replacement,
that makes use of the documentation in the pamphlet files. Currently HyperDoc
provides a button "Examples", it's future replacement should also have a button
"Documentation", which gives you the documented source code.)

> But, I would consider it a quick hack, because:

> ALLPROSE produces a complete documentation for maintainers. The API
> description for users should go through the Aldor compiler. You know,
> ALLPROSE puts the +++ stuff into the .as files and hands them over to the
> compiler. So they will be in the .al library and could be extracted from
> there via

> aldor -fasy -laxiom filename.ao
>
> There is know a program missing that transforms .asy into .tex which would
> then be processed via tex4ht to produces .html resulting in an even more
> hyperlinked API documentation than the maintainers documentation.

Well, in the distant future I think that the maintainers documentation should
be as hyperlinked as the users documentation.

> > However, for the web based documentation, there seems to be more to do -
> > apart from being able to produce it using tex4ht and jsmath and these
> > matters:

> What would you want there? I guess, it is some interaction, right?

I want the features of HyperDoc, MathAction and possibly a worksheet-like
interface. The latter is not important to me, though.

\start
Date: Wed, 14 Dec 2005 10:04:41 -0500
From: Tim Daly
To: Bill Page
Subject: Re: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

> > well, the build is proceeding and appears to be progressing
> > ok. of course i have no idea WHY it works since there are no
> > comments in the patch file. i'll test the graphics and hyperdoc
> > in the morning.
> 
> Great. It would be nice if Camm had the time to write explicit
> documentation for the patch, but I am quite sure that I can
> pull his comments from the axiom-devel email list over the last
> two years or so that (more or less) fully describe the approach
> he is using. Would you like me to send you what I find?

well the AXIOMsys build works perfectly but the axiom command
fails because sman (and therefore clef, hyperdoc, and graphics)
won't start. i'll debug that problem but it is almost certainly
related to the socket code we add to gcl.

also, how do we handle the fact that users can build gcl using the
-ansi switch. that means that their local copy of gcl cannot be used
by axiom (yet).

\start
Date: Wed, 14 Dec 2005 09:23:32 -0500
From: Bill Page
To: Arthur Ralfs
Subject: RE: AxiomUI

On Wednesday, December 14, 2005 3:46 AM Arthur Ralfs wrote:

> Bill Page wrote:
> >
> >Then you can view the source code online at:
> >
> >http://wiki.axiom-developer.org/axiom--GUI--1
> >
> OK I got the source but when I went to the second wiki link it
> redirected to http://wiki.axiom-developer.org/axiom--GUI--1/FrontPage
> which was a new page with nothing in it.
>

Redirection to FrontPage is the correct behaviour. On that page
you should see a list of files and directories:

  # ..
  # src
  # README

Each one acts like a link.

..     moves one step closer to the root of the tree. In this
       case back to the root itself.
src    is a directory. Clicking it will show it's FrontPage
       formatted like this one.
README is a file. Clicking it will display it as a web page
       formatted according to the page type. In this case:
       plain text.

Please try the link above again and let me know if you get this
result. There have been some intermittant problems with the
web site lately. I had to reset the server about 3 hours ago.
Perhaps your previous result was due to such a failure. But I
just tried it and it is working now for me.

\start
Date: 14 Dec 2005 09:46:51 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: MAC OSX 10.4 and GCL

Greetings!

Tim Daly writes:

> Camm,
> 
> Can you point me at a GCL version that is known to build on OSX 10.4?
> Can you tell me the configure options with that version?
> 
> I've been unsuccessful in building a standalone version of GCL.
> 

Good you asked, as I've just been working on this too. 

Here is what is working for me with no discernible problems thus far:

Set the following environment:  (needs to be cleaned up and done in
configure IMHO):

export PATH=/sw/bin:/sw/sbin:/usr/local/bin:$PATH # I don't think these are actually
export LIBRARY_PATH=/sw/lib
export C_INCLUDE_PATH=/sw/include
export CPPFLAGS="-no-cpp-precomp"

Get 2.6.8pre:

export CVSROOT=:pserver:anonymous@cvs.sv.gnu.org:/sources/gcl
cvs -z9 -q co -d gcl-2.6.8pre -r Version_2_6_8pre gcl

In this directory, ./configure && make.

Please let me know if problems persist.

2.6.8pre has Aurelien's great macosx binutils support updated for the
latest binutils library.  I need to bug upstream binutils to see if
they could include this there as well.

\start
Date: Wed, 14 Dec 2005 10:13:13 -0500
From: Bill Page
To: Tim Daly
Subject: RE: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

On Wednesday, December 14, 2005 10:05 AM Tim Daly (root) wrote:

> -----Original Message-----
> From: root [mailto:Tim Daly]
> To: Bill Page
> Cc: Tim Daly; list;
> Camm Maguire
> Subject: Re: Axiom uses unmodified GCL on Debian?
>
> > > well, the build is proceeding and appears to be progressing
> > > ok. of course i have no idea WHY it works since there are no
> > > comments in the patch file. i'll test the graphics and hyperdoc
> > > in the morning.
> >
> > Great. It would be nice if Camm had the time to write explicit
> > documentation for the patch, but I am quite sure that I can
> > pull his comments from the axiom-devel email list over the last
> > two years or so that (more or less) fully describe the approach
> > he is using. Would you like me to send you what I find?
>
> well the AXIOMsys build works perfectly but the axiom command
> fails because sman (and therefore clef, hyperdoc, and graphics)
> won't start. i'll debug that problem but it is almost certainly
> related to the socket code we add to gcl.
>

That seems unlikely to me, but I guess we need Camm's input on
this. I know that sman, clef, graphics and hyperdoc all work on
Debian. The socket code is added (compiler:link) to gcl in the
following makefile stanza:

+	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))#-native-reloc(setq compiler::*default-system-p* t))"
si::*system-directory* (quote (list #+native-reloc".o" ".lsp")))
"${OBJ}/${SYS}/lib/cfuns-c.o ${OBJ}/${SYS}/lib/sockio-c.o
${OBJ}/${SYS}/lib/libspad.a")' | gcl

It is exactly the same code that is used in the non-Debian
distribution.

What do you mean by "sman wont start"? What error message do
you get? sman is written entirely in "C" right? That should be
directly portable to Debian.

> also, how do we handle the fact that users can build gcl
> using the -ansi switch. that means that their local copy
> of gcl cannot be used by axiom (yet).
>

The Debian prerequiste for Axiom is the non-ansi version of
gcl. If the non-ansi version is not installed on the system
then 'apt-get install axiom' will also install it.

\start
Date: Wed, 14 Dec 2005 11:01:12 -0500
From: Tim Daly
To: list
Subject: this is open source

there are 22 developers listed with WRITE access to every 
project on arch.axiom-developer.org. write access is available
for the asking.

while i don't expect people to mangle the axiom--main branch
virtually every one can create a branch, make changes, test
them, and post patches. there are 13 publicly listed branches
with almost no commits. and arch allows private branch development.

if people are unhappy with some feature, or some feature is 
missing, or some code rearrangement is suggested then branch
the code, mangle the branch, polish it so it "just works",
document it, diff it (or point us at a polished branch) and
we can discuss the changes on the list. we can download and
test it. and if it works and people like it, we merge it.

i get the impression that people feel this is a single-threaded
effort thru me but MY impression and the reason so many people
have write access is that this is free software and anyone
is free to change what they like. but i do expect professional-quality
changes with the same level of QA work that is put into the rest
of the system (although it isn't apparent because it all happens
behind the scenes). i have 6 machines on my desk and 2 dozen
separate branches locally so i'm kinda swamped getting the basics
like MACOSX working cleanly. some of these projects will take many 
years. so proposing that *I* fix things just adds to the queue.

when people have suggested new platforms like windows or sbcl,
new guis, new algebra, or whatever a new branch is created. i
expect that (a) people will commit to those branches and (b)
people will develop their idea to the level that it "just works"
and (c) people will document their work so it can be understood
and changed by others and (d) people will bring their branch up
to the latest level so other people can test it. this is what
you expect on the main branch.

axiom is free software. design it, hack it, polish it, test it,
document it, and send patches (or arch changesets).  you're allowed to
do anything you want and have no reason to depend on me for anything
(except the final merge step into axiom--main). but we ALL expect
quality work.

\start
Date: Wed, 14 Dec 2005 16:23:09 +0100
From: Ralf Hemmecke
To: Martin Rubey
Subject: Re: navigating Axiom's library
Cc: Kai Kaminski, list

>> That is true for dvi/ps/pdf. HTML and friends should be hyperlinked
>> anyway. Whether ALL documentation is in one big HTML file or whether there
>> are several smaller pages is a minor detail for html.
> 
> Well, I believe that it does make a difference for the HyperDoc replacement:
> When you "browse" an operation or a constructor, you only want to see the
> documentation to this particular entry, not more. It wouldn't be quite the
> right thing to simply jump to the first line of the description of the
> operation. 

OK, what I meant was, that it is up to giving the right parameters to 
tex4ht to produce that. I still have some things to do here for 
ALLPROSE, but be sure, that I also want one page per type/function. Or 
better. People should just be able to produce what the like to have.
So in this sense I considered it a "minor" detail.

\start
Date: Wed, 14 Dec 2005 11:15:05 -0500
From: Tim Daly
To: Bill Page
Subject: Re: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

> > also, how do we handle the fact that users can build gcl
> > using the -ansi switch. that means that their local copy
> > of gcl cannot be used by axiom (yet).
> > 
> 
> The Debian prerequiste for Axiom is the non-ansi version of
> gcl. If the non-ansi version is not installed on the system
> then 'apt-get install axiom' will also install it.

true but not everyone uses debian. 
how do we solve the redhat9 issue?

\start
Date: Wed, 14 Dec 2005 16:30:33 +0100
From: Ralf Hemmecke
To: Martin Rubey
Subject: Re: navigating Axiom's library
Cc: Kai Kaminski, list

>> ... hyperdoc ...
>> I would want to replace it with aldordoc.sty + some better browser that
>> extracts information about the .as sources and is able to navigate through
>> the Algbra hierarchy. Well, that would be the same idea as hyperdoc, but not
>> with hyperdoc but with an ordinary webbrowser.
> 
> Yes. Well, "some better browser" would probably be a javascript application or
> something similar that composes html pages from smaller pieces dynamically.

I think that could be some direction. I am not a java(-script) 
programmer. So any way is welcome to me. But there should be first some 
program that goes

.asy --> .html(or something)

I've already contacted Yannis Chicha (the author of AldorDoc). Let's see 
whether he answers. Otherwise that could be one of my next little projects.

>> I think I could do this easily. And maybe I'll even do it for the next
>> release of ALLPROSE, since you keep asking for it. 
> 
> (but please be aware of the fact that I will use Aldor only when it has become
> a replacement for SPAD.

Of course we are all hoping for Aldor to become free software.

\start
Date: Wed, 14 Dec 2005 10:56:10 -0500
From: Bill Page
To: Tim Daly
Subject: RE: Axiom uses unmodified GCL on Debian?
Cc: Camm Maguire, list

On Wednesday, December 14, 2005 11:15 AM  Tim Daly (root) wrote:

> Bill Page wrote:
> >
> > The Debian prerequisite for Axiom is the non-ansi version of
> > gcl. If the non-ansi version is not installed on the system
> > then 'apt-get install axiom' will also install it.

Actually what I wrote is only for a binary distribution. There
are different apt-get procedures for building from source. I
should have said 'apt-get build-deps axiom' will install the
right version of gcl if it is not already there and
'apt-get source axiom' will get the source distribution.

>
> true but not everyone uses debian.
> how do we solve the redhat9 issue?
>

For people who are building from source we just tell them what
the prerequisites are and probably also check in ./configure that
they have everything they need.

I think there are some source distribution tools for RedHat such
as source format rpm files, yum and up2date source options and
even a version of apt-get but I think they are not maintained
in so tightly controlled manner as Debian so they (generally)
are not as useful - at least in my experience. For building
large applications from source on Fedora I usually just resolve
dependencies one-at-a-time as they show up.

\start
Date: Wed, 14 Dec 2005 10:00:45 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomDownload] FC4 ?

Changes http://wiki.axiom-developer.org/AxiomDownload/diff
--
Clicking on "Fedora Core 4 (binary)" takes me to a page that says

You are about to download Fedora Core 3 binary

!

What's going on?

\start
Date: Wed, 14 Dec 2005 08:59:14 -0800 (PST)
From: Cliff Yapp
To: Bill Page, Ralf Hemmecke
Subject: RE: hyperlinked algebra

--- Bill Page wrote:

> I have solved the remaining problems with using hyperlinking
> with GraphViz in LaTeX so that now the links in the diagram
> link directly to the appropriate section of the target.

WOW!

> For example:
> 
> http://wiki.axiom-developer.org/book--main--1/Endpaper3
> 
> click on 'pdf' and then click on the first heading. This
> takes you to the algebra hierarchy diagram. Now click on
> the node "SetCategory" and you will jump directly to the
> definition of SetCategory in the catdef.spad.pamphlet. And
> similarly for the first few other top nodes.

I think Acrobat Reader tries to do something with internet explorer but
it wound up hanging.  Probably not a serious problem.

> Also I had to update catdef.spad.pamphlet to include a
> \hypertarget{NAME}{} specification for each chunk of the
> file.
> 
> To make this work, I had to upgrade to the most recent GraphViz
> version 2.7 and also modify the procedure to create pdf files
> to use 'dvips -z' and 'ps2pdf'. This is now implemented for the
> pamphlet page type on MathAction.
> 
> Please let me know if you have any questions about how to
> use this.

If I ever get a good block of time I'm going to mess with this and see
what fun can be had :-).  Darn it the holidays didn't used to be this
crazy...

\start
Date: Wed, 14 Dec 2005 18:04:27 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: noweb "bug" (was: article "standard" header/footer)

Hi,

> Yes, we should simply "tell people that axiom needs at least
> version x.y of noweb" and version 2.6.x of gcl. These are
> prerequisites. Download and install them first - then install
> Axiom. If you are using apt-get on Debian or yum on Fedora,
> etc. then these prerequisites are automatically installed for
> you.

Right. There should be two distributions:
1) for people who just want to apply axiom
2) for people who want to develop axiom

Of course (1) would need fewer packages as prerequisites.
I strongly think that we should build on existing software and NOT 
maintain a fork of them.

> All we have to do is include this script with the Axiom
> distribution and call it as a filter as he shows.
> 
> % notangle -filter axiom-noweb

Even easier. Say

TANGLE=notangle -filter axiom-noweb

and don't change anything else (except for including the documented awk 
script).

>> the standard version fails, the patched version works. use
>> the patched version.

> I would very much prefer to use the unmodified version of
> noweb with the awk script as suggested by Norman.

I support Norman and Bill.

\start
Date: Wed, 14 Dec 2005 13:34:34 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug" (was: article "standard" header/footer)

you ARE aware that gcl includes things like bfd, binutils, gmp, etc.
axiom isn't the only package that includes upstream sources.  the only
way i know to ensure that your product works as advertised is to make
sure that it works when you build it. and that requires certain
versions. in a perfect world this would not be a problem. consider the
details of the alternative you propose:

suppose a user gets gcl.
suppose gcl is built with -ansi.
suppose they get axiom as it is now.... axiom builds and works.
suppose they get axiom "with external gcl"... axiom build fails.

so "axiom is broken software" and "don't use axiom" becomes the meme.
we can't afford to have the new user dancing with version issues.
the overall PERCEIVED quality of axiom depends on it "just working".

given your suggestion how do you suggest we fix the gcl -ansi problem?

we could check the "native" gcl to see 
(0) that the version is at least up to gcl-2.6.7 and
(1) that it does not include -ansi and 
(2) that the native version includes the right maxpage configure 
    (although i don't know how) and 
(3) that the bfd configure option was correct (although i don't know how). and
(4) that the compiler::link option is enabled (although i don't know how). and
(5) axiom has write access to the gcl library directories for the .o files and
(6) if one of those options is not correct 
    we could build our own version of gcl. 
but that implies we have a tested version tgz file somewhere. 
which we have now. 

i understand your desire to not include gcl with the distribution
and i can see how it "simplifies" the build scripts if gcl "just worked".

but if you're going to suggest we pursue this path then we need 
a plan to make sure that axiom "just works". 

what's the plan?

\start
Date: Wed, 14 Dec 2005 12:47:10 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: noweb "bug" (was: article "standard" header/footer)
Cc: Camm Maguire, list

Ralf,

On Wednesday, December 14, 2005 7:56 AM you wrote:
>
> By the way, try the following in AXIOMROOT.
>
> find . -name '*.pamphlet' -exec grep "<<.*>>" {} \; > xxx.1
> grep -v ">>= *$" xxx.1 > xxx.2
> grep -v ">> *$"  xxx.2 > xxx.3
> grep -v "@<<"    xxx.3 > xxx.4
> wc xxx.4
>    86  472 4836 xxx.4
>
> Look at these 86 lines. I've only found
>
> Label:          '<<' Name '>>' ;
>
> (which is from ./src/interp/fnewmeta.lisp.pamphlet)
> where Tim's problem occurs. So do we have the noweb patch
> just for this line?

I think you are correct.

We are actually looking for any occurrence of <<xxxxx>> where
there is no corresponding <<xxxxxx>>= in the same file. I don't
think we can do that properly using just grep.

Here is another simple script based on Norman Ramsey's awk
original idea that I think finds all these occurrences:

-----
for i in src lsp zips; do find $i -name '*.pamphlet' -exec awk '
/<<.*>>/  { match($0,/<<.*>>/); uses [substr($0, RSTART,RLENGTH)] = 1 =
}
/<<.*>>=/ {match($0,/<<.*>>/); defns[substr($0, RSTART,RLENGTH)] = 1 =
}
END {
  for (i in uses)
    if (!defns[i])
      printf "{}: %s\n",i
}' {} \; ; done;
----------------

When I run this I get:

[page@axiom-developer page]$ cd $AXIOM/../..
[page@axiom-developer axiom--main--1]$ for i in src lsp zips; do find $i
-name
'*.pamphlet' -exec awk '
> /<<.*>>/  { match($0,/<<.*>>/); uses [substr($0, RSTART,RLENGTH)] = =
1
}
> /<<.*>>=/ {match($0,/<<.*>>/); defns[substr($0, RSTART,RLENGTH)] = =
1 }
> END {
>   for (i in uses)
>     if (!defns[i])
>       printf "{}: %s\n",i
> }' {} \; ; done;

src/hyper/bitmaps.pamphlet: <<license>>
src/hyper/token.pamphlet: <<token.c>>
src/doc/axiom.sty.pamphlet: <<ref value>>}{<<page
number>>}{<<text>>}}{<<hyper category>>}{<<URL>>
src/doc/axiom.sty.pamphlet: <<ref value>>}{<<page number>>
src/doc/booklet.c.pamphlet: <<file:filename1>>@<<file:filename2>>
src/doc/booklet.c.pamphlet: <<http:web>>
src/doc/booklet.c.pamphlet: <<file:filename2>>
src/doc/booklet.c.pamphlet: << and >>
src/doc/booklet.c.pamphlet: <<file:filename>>
src/doc/booklet.c.pamphlet: <<file:PATH-AND-FILENAME>>
src/doc/Rosetta.pamphlet: <<x; y>>
src/interp/fnewmeta.lisp.pamphlet: <<' Name '>>
lsp/Makefile.pamphlet: <<gcl-2.6.5w.toploop.patch>>

[page@axiom-developer axiom--main--1]$

--------

So these are all the files that contain what appear to be
undefined chunks. Some of these currently depend on Tim's
patch to noweb to be processed properly.

Perhaps the following are actually inconsequential errors in
the source files:

  src/hyper/bitmaps.pamphlet: <<license>>
  src/hyper/token.pamphlet: <<token.c>>
  lsp/Makefile.pamphlet: <<gcl-2.6.5w.toploop.patch>>

The only real occurrence in a code chunk is the one you already
found:

  src/interp/fnewmeta.lisp.pamphlet: <<' Name '>>

This one is definitely processed incorrectly by an unmodified:

  $ notangle -R'fnew.meta' src/interp/fnewmeta.lisp.pamphlet

but Norman's filter works:

  $ notangle -filter ~/axiom-noweb -R'fnew.meta' \
       src/interp/fnewmeta.lisp.pamphlet

---------

Since we have also been talking about the Debian build of Axiom,
it occurs to me to wonder how this is handled on Debian?

If no special noweb modifications are made, then perhaps this
error in 'src/interp/fnewmeta.lisp.pamphlet' gets by undetected?

Or does the Debian build actually rebuild noweb?

\start
Date: Wed, 14 Dec 2005 13:42:59 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug" (was: article "standard" header/footer)

(7) and readline isn't installed in gcl

axiom has its own readline (clef) which can do "algebra command completion"
and knows about axiom. clef is automatically started when axiom starts.
readline interferes with clef.

so if "native gcl" has readline we can't use it either.

\start
Date: Wed, 14 Dec 2005 13:38:27 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug" (was: article "standard" header/footer)

oh, and as an aside, even if you build axiom on a "native gcl"
you don't need the native gcl afterward. you can erase it and
axiom still works (since axiom IS a gcl image).

so why force the user to install software that isn't used?

\start
Date: Wed, 14 Dec 2005 13:43:03 -0500
From: Bill Page
To: Camm Maguire
Subject: RE: noweb "bug" (was: article "standard" header/footer)

Camm,

On Wednesday, December 14, 2005 1:13 PM you wrote:
>...
> Bill Page wrote:
> > Or does the Debian build actually rebuild noweb?
>
> I haven't touched axiom's use of noweb, apart from not shipping
> special noweb binaries.  You can look at a sample build log here:
>
>
http://buildd.debian.org/fetch.php?&pkg=axiom&ver=20050901-4&arch=p=
owerp
c&stamp=1132811978&file=log&as=raw
>

I see here:
...
13 making noweb
patching file modules.c
patching file Makefile
...

So noweb is patched and built specifically for Axiom's use as is
done now in the the main source distribution.

> Of course, the treatment here may be lacking, and I'd be happy
> to incorporate any suggestions.
>

It looks fine to me except my preference would be to require
a pre-installed noweb and use the -filter script instead of
patching the sources... but we will get to that in time as part
of the main distribution.

Thanks for your input.

\start
Date: Wed, 14 Dec 2005 14:41:53 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: MAC OSX 10.4 and GCL

attached are the patches. essentially i had to forcefully reorder the
include files because the mac insists on including "usr/include/sys"
before "usr/include" and i can't seem to override it.



plus one of the graphics routines was just plain wrong so i rewrote it.
it's been a while since i've hacked X11 though so there may be bugs.

caveat: i haven't yet build axiom on gcl so while these may compile
they may not run.

you should be able to save this mail file and then do 
  patch <mailfile


once you apply the patches do:

export PATH=/sw/bin:/sw/sbin:/usr/local/bin:$PATH
export LIBRARY_PATH=/sw/lib
export C_INCLUDE_PATH=/sw/include
export CPPFLAGS="-no-cpp-precomp"
export AXIOM=`pwd`/mnt/MACOSX         (be sure to use MACOS)
make AWK=awk                          (OSX 10.4 doesn't have nawk/gawk)


===================================================================
patch 1: Makefile.pamphlet.patch
===================================================================
--- Makefile.pamphlet	2005-10-30 21:05:30.000000000 -0500
+++ Makefile.pamphlet	2005-12-07 21:50:50.000000000 -0500
@@ -698,7 +698,8 @@
 #GCLVERSION=gcl-2.6.5
 #GCLVERSION=gcl-2.6.6
 #GCLVERSION=gcl-2.6.7pre
-GCLVERSION=gcl-2.6.7
+#GCLVERSION=gcl-2.6.7
+GCLVERSION=gcl-2.6.6
 @
 
 \subsubsection{The [[GCLOPTS]] configure variable}
@@ -715,6 +716,12 @@
 GCLOPTS="--enable-vssize=65536*2 --enable-locbfd --disable-dynsysbfd \
          --disable-statsysbfd --enable-maxpage=256*1024"
 @
+For the MACOSX port we need the following options
+<<GCLOPTS-CUSTRELOC>>=
+GCLOPTS="--enable-vssize=65536*2 --enable-maxpage=256*1024 --disable-locbfd \
+         --disable-statsysbfd  --enable-custreloc --disable-tkconfig \
+         --enable-machine=pwerpc-macosx"
+@
 \subsection{Makefile.axposf1v3}
 <<Makefile.axposf1v3>>=
 # System dependent Makefile for the AXP/OSF platform
@@ -1872,7 +1879,7 @@
 PLF=MACOSXplatform
 # C compiler flags
 CCF="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE -D${PLF} \
-     -I/usr/X11/include -I/usr/include/sys"
+     -I/usr/X11/include -I/usr/include -I/usr/include/sys"
 # Loader flags
 LDF= -L/usr/X11R6/lib 
 # C compiler to use
@@ -1888,7 +1895,7 @@
 DAASE=${SRC}/share
 # where the libXpm.a library lives
 XLIB=/usr/X11R6/lib
-<<GCLOPTS>>
+<<GCLOPTS-CUSTRELOC>>
 <<SRCDIRS>>
 PATCH=patch
 

===================================================================
patch 2: Makefile.patch
===================================================================
--- Makefile	2005-10-30 21:05:30.000000000 -0500
+++ Makefile	2005-12-07 21:51:03.000000000 -0500
@@ -1,4 +1,4 @@
-VERSION="Axiom 3.9 (September 2005)"
+VERSION="Axiom 3.10 (November 2005)"
 SPD=$(shell pwd)
 SYS=$(notdir $(AXIOM))
 SPAD=${SPD}/mnt/${SYS}
@@ -13,7 +13,8 @@
 #GCLVERSION=gcl-2.6.5
 #GCLVERSION=gcl-2.6.6
 #GCLVERSION=gcl-2.6.7pre
-GCLVERSION=gcl-2.6.7
+#GCLVERSION=gcl-2.6.7
+GCLVERSION=gcl-2.6.6
 AWK=gawk
 GCLDIR=${LSP}/${GCLVERSION}
 SRC=${SPD}/src

===================================================================
patch 3: src/lib/bsdsignal.c.pamphlet.patch
===================================================================
--- src/lib/bsdsignal.c.pamphlet	2005-10-30 20:56:15.000000000 -0500
+++ src/lib/bsdsignal.c.pamphlet	2005-12-04 22:52:53.000000000 -0500
@@ -8,56 +8,223 @@
 \end{abstract}
 \eject
 \tableofcontents
-\eject
+\newpage
+\section{Executive Overview}
+\section{Signals}
+The system defines a set of signals that may be delivered to a process. Signal 
+delivery resembles the occurrence of a hardware interrupt: the signal is 
+normally blocked from further occurrence, the current process context is saved, 
+and a new one is built. A process may specify a {\sl handler} to which a signal 
+is delivered, or specify that a signal is to be {\sl ignored}. A process may 
+also specify that a default action is to be taken by the system when a signal 
+occurs. A signal may also be {\sl blocked}, in which case its delivery is 
+postponed until it is {\sl unblocked}. The action to be taken on delivery is 
+determined at the time of delivery. Normally, signal handlers execute on the 
+current stack of the process. This may be changed, on a per-handler basis, so 
+that signals are taken on a special {\sl signal stack}.
+
+Signal routines normally execute with the signal that caused their invocation 
+{\sl blocked}, but other signals may yet occur. A global {\sl signal mask} 
+defines the set of signals currently blocked from delivery to a process. 
+The signal mask for a process is initialized from that of its parent 
+(normally empty). It may be changed with a {\bf sigprocmask(2)} call, or 
+when a signal is delivered to the process.
+
+When a signal condition arises for a process, the signal is added to a set of 
+signals pending for the process. If the signal is not currently {\sl blocked} 
+by the process then it is delivered to the process. Signals may be delivered 
+any time a process enters the operating system (e.g., during a system call, 
+page fault or trap, or clock interrupt). If muliple signals are ready to be 
+delivered at the same time, any signals that could be caused by traps are 
+delivered first. Additional signals may be processed at the same time, with 
+each appearing to interrupt the handlers for the previous signals before 
+their first instructions. The set of pending signals is retuned by the 
+{\bf sigpending(2)} system call. When a caught signal is delivered, the current 
+state of the process is saved, a new signal mask is calculated (as described 
+below), and the signal handler is invoked. The call to the handler is arranged 
+so that if the signal handling routine returns normally the process will resume 
+execution in the context from before the signal's delivery. If the process 
+wishes to resume in a different context, then it must arrange to restore 
+the previous context itself.
+
+When a signal is delivered to a proces a new signal mask is installed for the 
+duration of the process's signal handler (or until a {\bf sigprocmask(2)} 
+system call is made). This mask is formed by taking the union of the current 
+signal mask set, the signal to be delivered, and the signal mask associated 
+with the handler to be invoked.
+
+The {\bf sigaction()} system call assigns an action for a signal specified by 
+{\sl sig}. If {\sl act} is non-zero, it specifies an action (SIG\_DFL, SIG\_IGN, 
+or a handler routine) and mask to be used when delivering the specified signal. 
+If {\sl oact} is non-zero, the previous handling information for the signal is 
+returned to the user.
+
+Once a signal handler is installed, it normally  remains installed until another 
+{\bf sigaction()} system call is made, or an {\sl execve(2)} is performed. A 
+signal-specific default action may be reset by setting {\sl sa\_handler} to 
+SIG\_DFL. The defaults are process termination, possibly with core dump; 
+no action; stopping the process; or continuing the process. See the signal 
+list below for each signal's default action. If {\sl sa\_handler} is SIG\_DFL, 
+the default action for the signal is to discard the signal, and if a signal 
+is pending, the pending signal is discarded even if the signal is masked. If 
+{\sl sa\_handler} is set to SIG\_IGN current and pending instances of the signal 
+are ignored and discarded.
+
+Options may be specified by setting {\sl sa\_flags}. The meaning of the various 
+bits is as follows:
+\begin{tabular}{ll}
+SA\_NOCLDSTOP & If this bit is set when installing a catching function for\\
+             & the SIGCHLD signal, the SIGCHLD signal will be generated only\\
+             & when a child process exits, not when a child process stops.\\
+SA\_NOCLDWAIT & If this bit is set when calling {\sl sigaction()} for the\\
+             & SIGCHLD signal, the system will not create zombie processes\\
+             & when children of the calling process exit. If the calling\\
+             & process subsequently issues a {\wf wait()} (or equivalent),\\
+             & it blocks until all of the calling process's child processes\\
+             & terminate, and then returns a value of -1 with errno set to\\
+             & ECHILD.\\
+SA\_ONSTACK   & If this bit is set, the system will deliver the signal to\\
+             & the process on a {\sl signal stack}, specified with\\
+             & {\bf sigaltstack(2)}.\\
+SA\_NODEFER   & If this bit is set, further occurrences of the delivered\\
+             & signal are not masked during the execution of the handler.\\
+SA\_RESETHAND & If this bit is set, the handler is reset back to SIG\_DFL\\
+             & at the moment the signal is delivered.\\
+SA\_RESTART   & See the paragraph below\\
+SA\_SIGINFO   & If this bit is set, the handler function is assumed to be\\
+             & pointed to by the sa\_sigaction member of struct sigaction\\
+             & and should match the prototype shown above or as below in\\
+             & EXAMPLES. This bit should not be set when assigning SIG\_DFL\\
+             & or SIG\_IGN
+\end{tabular}
+
+If a signal is caught during the system calls listed below, the call may be 
+forced to terminate with the error EINTR, the call may return with a data 
+transfer shorter than requested, or the call may be restarted. Restart of 
+pending calls is requested by setting the SA\_RESTART bit in {\sl sa\_flags}. 
+The affected system calls include {\bf open(2)}, {\bf read(2)}, {\bf write(2)}, 
+{\bf sendto(2)}, {\bf recvfrom(2)}, {\bf sendmsg(2)} and {\bf recvmsg(2)} 
+on a communications channel or a slow device (such as a terminal, but not a 
+regular file) and during a {\bf wait(2)} or {\bf ioctl(2)}. However, calls 
+that have already committed are not restarted, but instead return a partial 
+success (for example, a short read count).
+
+After a {\bf fork(2)} or {\bf vfork(2)} all signals, the signal mask, the 
+signal stack, and the restart/interrupt flags are inherited by the child.
+
+The {\bf execve(2)} system call reinstates the default action for all signals 
+which were caught and resets all signals to be caught on the user stack. 
+Ignored signals remain ignored; the signal mask remains the same; signals 
+that restart pending system calls continue to do so.
+
+The following is a list of all signals with names as in the include file
+{\sl <signal.h>}:
+
+\begin{tabular}{lll}
+{\bf NAME} & {\bf Default Action} & Description\\
+SIGHUP     & terminate process    & terminal line hangup\\
+SIGINT     & terminate process    & interrupt program\\
+SIGQUIT    & create core image    & quit program\\
+SIGILL     & create core image    & illegal instruction\\
+SIGTRAP    & create core image    & trace trap\\
+SIGABRT    & create core image    & {\bf abort(3)} call (formerly SIGIOT)\\
+SIGEMT     & create core image    & emulate instruction executed\\
+SIGFPE     & create core image    & floating-point exception\\
+SIGKILL    & terminate process    & kill program\\
+SIGBUS     & create core image    & bus error\\
+SIGSEGV    & create core image    & segmentation violation\\
+SIGSYS     & create core image    & non-existent system call invoked\\
+SIGPIPE    & terminate process    & write on a pipe with no reader\\
+SIGALRM    & terminate process    & real-time timer expired\\
+SIGTERM    & terminate process    & software termination signal\\
+SIGURG     & discard signal       & urgent condition present on socket\\
+SIGSTOP    & stop process         & stop (cannot be caught or ignored)\\
+SIGSTP     & stop process         & stop signal generated from keyboard\\
+SIGCONT    & discard signal       & continue after stop\\
+SIGCHLD    & discard signal       & child status has changed\\
+SIGTTIN    & stop process         & background read attempted from \\
+           &                      & control terminal\\
+SIGTTOU    & stop process         & background write attempted from\\
+           &                      & control terminal\\
+SIGIO      & discard signal       & I/O is possible on a descriptor (\bf fcntl(2)}\\
+SIGXCPU    & terminate process    & cpu time limit exceeded {\bf setrlimit(2)}\\
+SIGXFSZ    & terminate process    & file size limit exceeded {\bf setrlimit(2)}\\
+SIGVTALRM  & terminate process    & virtual time alarm {\bf setitimer(2)}\\
+SIGPROF    & terminate process    & profiling timer alarm {\bf setitimer(2)}\\
+SIGWINCH   & discard signal       & Window size change\\
+SIGINFO    & discard signal       & status request from keyboard\\
+SIGUSR1    & terminate process    & User defined signal 1\\
+SIGUSR2    & terminate process    & User defined signal 2
+\end{tabular}
+
+The {\sl sigaction()} function returns the value 0 if successful; otherwise 
+the value -1 is returned and the global variable {\sl errno} is set to indicate 
+the error.
+
+Signal handlers should have either the ANSI C prototype:
+\begin{verbatim}
+  void handler(int);
+\end{verbatim}
+or the POSIX SA\_SIGINFO prototype:
+\begin{verbatim}
+  void handler(int, siginfo\_t *info, ucontext\_t *uap);
+\end{verbatim}
+
+The handler function should match the SA\_SIGINFO prototype if the SA\_SIGINFO 
+bit is set in flags. It then should be pointed to by the sa\_sigaction member 
+of struct sigaction. Note that you should not assign SIG\_DFL or SIG\_IGN this way.
+
+If the SA\_SIGINFO flag is not set, the handler function should match either 
+the ANSI C or traditional BSD prototype and be pointed to by the sa\_handler 
+member of struct sigaction. In practice, FreeBSD always sends the three 
+arguments of the latter and since the ANSI C prototype is a subset, both 
+will work. The sa\_handler member declaration in FreeBSD include files is 
+that of ANSI C (as required by POSIX), so a function pointer of a BSD-style 
+function needs to be casted to compile without warning. The traditional BSD 
+style is not portable and since its capabilities are a full subset of a 
+SA\_SIGNFO handler its use is deprecated.
+
+The {\sl sig} argument is the signal number, one of the SIG\ldots values from 
+{\sl <signal.h>}.
+
+The {\sl code} argument of the BSD-style handler and the si\_code member of the
+info argument to a SA\_SIGINFO handler contain a numeric code explaining the
+cause of the signal, usually on of the SI\_\ldots values from {\sl <sys/signal.h>}
+or codes specific to a signal, i.e. one of the FPE\_\ldots values for SIGFPE.
+
+The {\sl uap} argument to a POSIX SA_SIGINFO handler points to an instance of 
+ucontext\_t.
+
+The {\bf sigaction()} system call will fail and no new signal handler will be
+installed if one of the following occurs:
+\begin{tabular}{ll}
+[EFAULT] & Either {\sl act} or {\sl oact} points to memory that is not a\\
+         & valid part of the process address space\\
+[EINVAL] & The {\sl sig} argument is not a valid signal number\\
+[EINVAL] & An attempt is made to ignore or supply a handler for SIGKILL\\
+         & or SIGSTOP
+\end{tabular}
 \section{MAC OSX and BSD platform change}
-We needed to change [[SIGCLD]] to [[SIGCHLD]] for the [[MAC OSX]] platform
-and we need to create a new platform variable. This change is made to 
-propogate that platform variable.
-<<mac osx platform change>>=
-#if defined(LINUXplatform) || defined (ALPHAplatform)|| defined(RIOSplatform) || defined(SUN4OS5platform) ||defined(SGIplatform) ||defined(HP10platform) || defined(MACOSXplatform) || defined(BSDplatform)
-@
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    - Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-    - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-
-    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
-      names of its contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-@
 <<*>>=
 <<license>>
 
 #include "useproto.h"
 #include "bsdsignal.h"
 
-#include <signal.h>
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/signal.h"
+#else
+#include <signal.h> 
+#endif
+
 #include "bsdsignal.H1"
 
 
@@ -76,7 +243,12 @@
   struct sigaction in,out;
   in.sa_handler = action;
   /* handler is reinstalled - calls are restarted if restartSystemCall */
-<<mac osx platform change>>
+@
+We needed to change [[SIGCLD]] to [[SIGCHLD]] for the [[MAC OSX]] platform
+and we need to create a new platform variable. This change is made to 
+propogate that platform variable.
+<<*>>=
+#if defined(LINUXplatform) || defined (ALPHAplatform)|| defined(RIOSplatform) || defined(SUN4OS5platform) ||defined(SGIplatform) ||defined(HP10platform) || defined(MACOSXplatform) || defined(BSDplatform)
   if(restartSystemCall) in.sa_flags = SA_RESTART;
   else in.sa_flags = 0;
 #elif defined(SUNplatform)
@@ -98,7 +270,42 @@
 
 
 @
-\eject
+\section{License}
+<<license>>=
+/*
+Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    - Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    - Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+
+    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+@
+\newpage
 \begin{thebibliography}{99}
 \bibitem{1} nothing
 \end{thebibliography}

===================================================================
patch 4: src/lib/cfuns-c.c.pamphlet.patch
===================================================================
--- src/lib/cfuns-c.c.pamphlet	2005-10-30 20:56:15.000000000 -0500
+++ src/lib/cfuns-c.c.pamphlet	2005-12-04 23:10:59.000000000 -0500
@@ -49,7 +49,19 @@
 
 #include "useproto.h"
 #include <stdio.h>
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/unistd.h"
+#else
 #include <unistd.h>
+#endif
 #include <stdlib.h>
 #include <string.h>
 #if !defined(BSDplatform)

===================================================================
patch 5: src/lib/edin.c.pamphlet.patch
===================================================================
--- src/lib/edin.c.pamphlet	2005-10-30 20:46:40.000000000 -0500
+++ src/lib/edin.c.pamphlet	2005-12-04 21:19:50.000000000 -0500
@@ -51,7 +51,19 @@
 
 #include "useproto.h"
 #include <stdlib.h>
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/unistd.h"
+#else
 #include <unistd.h>
+#endif
 #include <string.h>
 #include <stdio.h>
 #include <sys/types.h>

===================================================================
patch 6: src/lib/fnct_key.c.pamphlet.patch
===================================================================
--- src/lib/fnct_key.c.pamphlet	2005-10-30 20:56:15.000000000 -0500
+++ src/lib/fnct_key.c.pamphlet	2005-12-04 21:19:59.000000000 -0500
@@ -60,8 +60,19 @@
 <<license>>
 
 #include "useproto.h"
-
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/unistd.h"
+#else
 #include <unistd.h>
+#endif
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>

===================================================================
patch 7: src/lib/sockio-c.c.pamphlet.patch
===================================================================
--- src/lib/sockio-c.c.pamphlet	2005-10-30 20:56:03.000000000 -0500
+++ src/lib/sockio-c.c.pamphlet	2005-12-04 21:24:27.000000000 -0500
@@ -53,12 +53,28 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/unistd.h"
+#else
 #include <unistd.h>
+#endif
 #include <sys/time.h>
 #include <sys/stat.h>
 #include <errno.h>
 #include <string.h>
+#if defined(MACOSXplatform)
+#include "/usr/include/signal.h"
+#else
 #include <signal.h>
+#endif
 
 #if defined(SGIplatform)
 #include <bstring.h>

===================================================================
patch 8: src/lib/spadcolors.c.pamphlet.patch
===================================================================
--- src/lib/spadcolors.c.pamphlet	2005-10-30 20:46:40.000000000 -0500
+++ src/lib/spadcolors.c.pamphlet	2005-12-04 22:28:07.000000000 -0500
@@ -89,7 +89,10 @@
     RGB rgb;
     float h, f, p, q, t;
     int i;
-
+    
+    rgb.r = 0.0;
+    rgb.g = 0.0;
+    rgb.b = 0.0;
     if (hsv.s == 0.0) {
         rgb.r = rgb.g = rgb.b = hsv.v;
         return (rgb);
@@ -562,7 +565,29 @@
 #else
 AllocCells(Display *dsply, Colormap colorMap, int smoothHue)
 #endif
-
+@
+This routine used to have the following code block. However this
+code block makes no sense. To see why you need to know that an
+XColor object looks like:
+\begin{verbatim}
+/*
+ * Data structure used by color operations
+ */
+typedef struct {
+	unsigned long pixel;
+	unsigned short red, green, blue;
+	char flags;  /* do_red, do_green, do_blue */
+	char pad;
+} XColor;
+\end{verbatim}
+This routine used to set the values of all of the elements of the XColor struct
+except [[pixel]]. This is usually done to specify a desired color in RGB
+values. To try to get a pixel value close to that color you call XAllocColor.
+This routine sets up the desired color values but it never asks for the pixel
+(which is really an index into the colormap of the nearest color) value that
+corresponds to the desired color. In fact it uses pixel without ever giving
+it a value. I've rewritten that code.
+\begin{verbatim}
 {
     unsigned long plane_masks[1];
     int i, count;
@@ -578,9 +603,9 @@
         hls.l = lightness;
         hls.s = saturation;
         rgb = HLStoRGB(hls);
-	xcolor.red    = rgb.r *((1<<16)-1);
-	xcolor.green  = rgb.g *((1<<16)-1);
-	xcolor.blue   = rgb.b *((1<<16)-1);
+	xcolor.red    = rgb.r *((1@<<16)-1);
+	xcolor.green  = rgb.g *((1@<<16)-1);
+	xcolor.blue   = rgb.b *((1@<<16)-1);
 	xcolor.flags = DoRed | DoGreen | DoBlue;
 	/*
 	  fprintf(stderr,"%f\t%f\t%f\n",rgb.r,rgb.g,rgb.b);
@@ -597,6 +622,54 @@
         return (0);
     }
 }
+\end{verbatim}
+<<*>>=
+{
+    unsigned long plane_masks[1];
+    int i, count;
+    float lightness;
+    RGB rgb;
+    XColor xcolor;
+    HLS hls;
+
+    count = 0;
+    for (i = 0; i < (smoothConst + 1); i++) {
+        lightness = (float) (i) / (float) (smoothConst);
+        hls.h = (float) smoothHue;
+        hls.l = lightness;
+        hls.s = saturation;
+        rgb = HLStoRGB(hls);
+        xcolor.red    = rgb.r *((1<<16)-1);
+        xcolor.green  = rgb.g *((1<<16)-1);
+        xcolor.blue   = rgb.b *((1<<16)-1);
+        xcolor.flags = DoRed | DoGreen | DoBlue;
+        /*
+          fprintf(stderr,"%f\t%f\t%f\n",rgb.r,rgb.g,rgb.b);
+          fprintf(stderr,"%d\t%d\t%d\n",xcolor.red,xcolor.green,xcolor.blue);
+          */
+@
+Here I've modified the code to actually as for the pixel (colormap index) that
+most closely matches our requested RGB values.
+<<*>>=
+        if (XAllocColor(dsply, colorMap, &xcolor)) { 
+            pixels[count] = xcolor.pixel;
+            count++;
+        }
+    }
+    /* count says how many succeeded */
+    if (count != (smoothConst+1) ) {
+      /* we have failed to get all of them - free the ones we got */
+      FreePixels(dsply,colorMap,count);
+      return (0);
+    }
+    if (XAllocColorCells(dsply, colorMap, False, 
+                          plane_masks, 0, pixels, smoothConst + 1)) {
+        return (smoothConst + 1);
+    }
+    else {
+        return (0);
+    }
+}
 @
 \eject
 \begin{thebibliography}{99}

===================================================================
patch 9: src/lib/util.c.pamphlet.patch
===================================================================
--- src/lib/util.c.pamphlet	2005-10-30 20:46:40.000000000 -0500
+++ src/lib/util.c.pamphlet	2005-12-04 22:53:29.000000000 -0500
@@ -8,49 +8,26 @@
 \end{abstract}
 \eject
 \tableofcontents
-\eject
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    - Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-    - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-
-    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
-      names of its contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-@
+\newpage
 <<*>>=
 <<license>>
 
 #include "useproto.h"
 
 #include <stdlib.h>
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/unistd.h"
+#else
 #include <unistd.h>
+#endif
 #include <sys/types.h>
 #include <stdio.h>
 #include <errno.h>
@@ -206,7 +183,42 @@
   return (size);
 }
 @
-\eject
+\section{License}
+<<license>>=
+/*
+Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    - Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    - Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+
+    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+@
+\newpage
 \begin{thebibliography}{99}
 \bibitem{1} nothing
 \end{thebibliography}

===================================================================
patch 10: src/lib/wct.c.pamphlet.patch
===================================================================
--- src/lib/wct.c.pamphlet	2005-10-30 20:56:15.000000000 -0500
+++ src/lib/wct.c.pamphlet	2005-12-04 23:08:44.000000000 -0500
@@ -8,42 +8,7 @@
 \end{abstract}
 \eject
 \tableofcontents
-\eject
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    - Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-    - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in
-      the documentation and/or other materials provided with the
-      distribution.
-
-    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
-      names of its contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-@
+\newpage
 <<*>>=
 <<license>>
 /*
@@ -59,15 +24,31 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+@
+The MACOSX platform is broken because no matter what you do it seems to
+include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
+systems these files include themselves which causes an infinite regression
+of includes that fails. GCC gracefully steps over that problem but the
+build fails anyway. On MACOSX the [[/usr/include/sys]] versions 
+of files are badly broken with respect to the [[/usr/include]] versions.
+<<*>>=
+#if defined(MACOSXplatform)
+#include "/usr/include/unistd.h"
+#else
 #include <unistd.h>
+#endif
 #include <string.h>
 #include <fcntl.h>
+#if defined(MACOSXplatform)
+#include "/usr/include/time.h"
+#else
 #include <time.h>
+#endif
 #include <ctype.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 
-/* #define PINFO *//* A floag for suprresing the printing of the file info */
+/* #define PINFO *//* A flag to suppress printing of the file info */
 
 #define WCT                     /* A flag needed because ctype.h stole some
                                  * of my constants */
@@ -869,7 +850,42 @@
 
 }
 @
-\eject
+\section{License}
+<<license>>=
+/*
+Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    - Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    - Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+
+    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+@
+\newpage
 \begin{thebibliography}{99}
 \bibitem{1} nothing
 \end{thebibliography}

\start
Date: Wed, 14 Dec 2005 11:43:12 -0800
From: Bob McElrath
To: Tim Daly
Subject: Re: this is open source

root [Tim Daly] wrote:
> when people have suggested new platforms like windows or sbcl,
> new guis, new algebra, or whatever a new branch is created. i
> expect that (a) people will commit to those branches and (b)
> people will develop their idea to the level that it "just works"
> and (c) people will document their work so it can be understood
> and changed by others and (d) people will bring their branch up
> to the latest level so other people can test it. this is what
> you expect on the main branch.

Remember that effort is an exponentially falling distribution.  Just a
guess, but each line below will at least halve the number of people that
make it to that step.  Open source occurs on the tail.

# website viewers
# downloaders
# that get axiom running
# that try to compute something "real"
# that try to modify something
# that attempt to submit patches/create arch branch
# that develop patch to usability
# that document their patch
# that take the effort to get the patch integrated.

\start
Date: Wed, 14 Dec 2005 12:12:47 -0800 (PST)
From: Cliff Yapp
To: Tim Daly, list
Subject: Re: this is open source

--- Tim Daly wrote:

> axiom is free software. design it, hack it, polish it, test it,
> document it, and send patches (or arch changesets).  you're 
> allowed to do anything you want and have no reason to depend 
> on me for anything (except the final merge step into axiom--
> main). but we ALL expect quality work.

Sorry if we're not pulling our weight Tim - I know I haven't been. 
I've got a variety of things on my system I want to take a shot at, but
I have so much to learn :-/.

Maybe the thing to do in my case is worrying less about the details
like McCLIM backends and just start doing something more relevant (like
a math GUI in McCLIM).  Presumably the backend can follow later.  Lord
knows I've got enough stuff queued up to keep me busy for a while!

Thanks again for all your hard work, and I'll try to talk less until I
have something substantial to exhibit :-).

\start
Date: Wed, 14 Dec 2005 16:09:17 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: this is open source

http://www.dridus.com/~nyef/messagebox-goodness.png

sbcl on windows popping up a native windows messagebox

\start
Date: Wed, 14 Dec 2005 14:41:33 -0800 (PST)
From: Cliff Yapp
To: Tim Daly
Subject: Re: this is open source

WOW.  I did not know things had progressed that far.  Exciting times.

Cheers,
CY

--- Tim Daly wrote:

> http://www.dridus.com/~nyef/messagebox-goodness.png
> 
> sbcl on windows popping up a native windows messagebox

\start
Date: Wed, 14 Dec 2005 18:55:28 -0500
From: Bill Page
To: Cliff Yapp, Tim Daly
Subject: RE: this is open source

On Wednesday, December 14, 2005 5:42 PM C Y wrote:
>
> WOW.  I did not know things had progressed that far.
>    Exciting times.
>
> --- Tim Daly wrote:
> > http://www.dridus.com/~nyef/messagebox-goodness.png
> >
> > sbcl on windows popping up a native windows messagebox
> >

Lisp pop-ups on Windows is exciting?

... oh, I am sooo depressed ...

;)

\start
Date: Wed, 14 Dec 2005 19:46:08 -0500
From: Bill Page
To: Bob McElrath
Subject: RE: this is open source

On Wednesday, December 14, 2005 2:43 PM Bob McElrath wrote:
> ...
> Remember that effort is an exponentially falling distribution.
> Just a guess, but each line below will at least halve the number
> of people that make it to that step.  Open source occurs on the
> tail.

I disagree. Or at least, I don't think that this has to be the case.
That is the reason why we have a wiki containing all the help and
documentation directly available for search and update via the web.
That is why we have the entire Axiom source distribution available
directly for updating over the web. That is why we can write and
execute Axiom programs over the web.

>
> # website viewers

I want contributors to the Axiom wiki to start here!

> # downloaders

I want potential contributors to the Axiom source code to
start about here!

> # that get axiom running
> # that try to compute something "real"
> # that try to modify something
> # that attempt to submit patches/create arch branch
> # that develop patch to usability
> # that document their patch
> # that take the effort to get the patch integrated.
>

The rest of this reverse osmosis filter is about long term
quality assurance. That takes time but it does not mean that
developers should hesitate to do make small or large changes
without all this "red tape". What eventually makes it into the
"official" Axiom source distribution is another issue, but that
should not stop anyone from experimenting, learning and
contributing in a much less structured manner.

They can do that privately in their own source code environments
or they can do it more publicly via the Axiom Wiki. All types
of Axiom-related programming are now possible through the web
including Lisp, Boot, Spad, Aldor and Axiom interpreter scripts.
And we also have a very flexible environment for writing
documentation. All of this code and documentation is directly
portable to the actual Axiom source distribution when/if we are
satisfied with the quality of the result.

\start
Date: Wed, 14 Dec 2005 20:47:46 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: noweb "bug" (was: article "standard" header/footer)

Camm,

on the mac:

loading /home/daly/macosx46/obj/MACOSX/interp/util.o

Error: Undefined symbol "_feof"
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by LOAD.
Broken at LOAD. Type :H for Help.
>>make[3]: *** [/home/daly/macosx46/obj/MACOSX/bin/interpsys] Error 255

_feof looks like a C (stdio?) symbol (file end of file?)

is there a linker option that needs to be set?

\start
Date: Wed, 14 Dec 2005 21:03:04 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: noweb "bug" (was: article "standard" header/footer)

Camm,

further investingation shows that _feof is defined in
/usr/lib/libc.dylib(feof.So)

simplly definiing a file foo.lisp containing
  (defun foo (x y) (+ x y))
and then doing:
  (compile-file "foo.lisp")
  (load "foo.lisp")
  (foo 2 3)
works so the breakage is more subtle.
i'm continuing to investigate...

\start
Date: 14 Dec 2005 20:25:45 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

Greetings!

First let me say I'm totally fine with shipping gcl sources with axiom
as is.  The below is just an attempt to explore the other possibility
in more detail. 

Tim Daly writes:

> you ARE aware that gcl includes things like bfd, binutils, gmp, etc.
> axiom isn't the only package that includes upstream sources.  the only

Absolutely true, and a bit of a GCL weakness at present IMHO.

Schelter originally had a patch against gmp which necessitated our
including the source.  We've since (thankfully) totally eliminated the
need for this, so gmp source is only really included now as a
convenience for my test builds on machines where it would be difficult
for me to install gmp.  

binutils is stickier for two reasons 1) we have a macosx specific
patch which is not yet included upstream, but most importantly 2)
compiler::link cannot be run against an external bfd library of a
different version than that which was present when gcl was built.  We
could work around the latter by either 1) snarfing the extneral
libbfd.a binary and placing the modules therein into the shipped
libgcl.a, or 2) shipping the C source to sfasl.o and compiling it
before running compiler::link. I think I would prefer the former.  

But please accept this observation as GCL maintainer that our having
done this is a source of constant headache, if for no other reason
than that I have to keep up with the bit rot in both packages myself.
I intend to undo it eventually.  I do agree that it has facilitated a
quick 'known build failsafe' in environments with broken bfd, etc.

> way i know to ensure that your product works as advertised is to make
> sure that it works when you build it. and that requires certain
> versions. in a perfect world this would not be a problem. consider the
> details of the alternative you propose:
> 
> suppose a user gets gcl.
> suppose gcl is built with -ansi.
> suppose they get axiom as it is now.... axiom builds and works.
> suppose they get axiom "with external gcl"... axiom build fails.
> 
> so "axiom is broken software" and "don't use axiom" becomes the meme.
> we can't afford to have the new user dancing with version issues.
> the overall PERCEIVED quality of axiom depends on it "just working".
> 

Agreed.  Only real solution here is to ensure that GCL is smart
enough to build axiom in either flavor, or that GCL builds and
installs all 4 images by default, or that axiom works in either
flavor, etc.  I'm beginning to favor the second option as it is what
we do in Debian already.

> given your suggestion how do you suggest we fix the gcl -ansi problem?
> 

If I change GCL to match the debian behavior everywhere, then is it
just a question of axiom (not) setting the GCL_ANSI env variable.

> we could check the "native" gcl to see 
> (0) that the version is at least up to gcl-2.6.7 and

Hopefully many GCL versions will suffice, but alas many programs have
to check a certain gcc version, for example.

> (1) that it does not include -ansi and 

See above.

> (2) that the native version includes the right maxpage configure 
>     (although i don't know how) and 

This is another GCL weakness which might be fixable.  Effectively we
should reduce or eliminate configure-time memory limits, and make them
runtime adjustable.  This should not be too hard.

> (3) that the bfd configure option was correct (although i don't know how). and

This should not matter to you so much, but #-native-reloc should.
I.e. whether your gcl uses a local bfd, an external bfd, or a custom
linker (mingw, option on x86, sparc and mac), the functionality is the
same.  On the other hand, if you are stuck with dlopen, workarounds
are necessary.  I intend to eliminate same on the last two platforms
where they are currently required.

> (4) that the compiler::link option is enabled (although i don't know how). and

This is always present.

> (5) axiom has write access to the gcl library directories for the .o files and

Why is this required?  You can set the effective system directories
with #'reset-sys-paths.

> (6) if one of those options is not correct 
>     we could build our own version of gcl. 
> but that implies we have a tested version tgz file somewhere. 
> which we have now. 
> 
> i understand your desire to not include gcl with the distribution
> and i can see how it "simplifies" the build scripts if gcl "just worked".
> 
> but if you're going to suggest we pursue this path then we need 
> a plan to make sure that axiom "just works". 
> 
> what's the plan?

Here is one idea, again I'm not necessarily pushing this, just
exploring: 

1) Mod GCL to
        1) build axiom as is under ansi.  This is a simple conversion
        of the in-package failure to a warning afaict. or 
        1a) ship both images starting with 2.6.8 everywhere.
        2) remove compile-time memory limits in GCL.
2) Mod axiom to
        1) support the supplied external gcl axiom patches,
        including the #-native-reloc workarounds, at least under an alternate
        make target

Then we should be done.  BTW, compiler notes can be suppressed without
a patch by setting compiler::*suppress-compiler-notes* to t.  Likewise
the system banner can be modified without a patch via
si::*system-banner*.  I've already indicated how the system
directories can be changed at runtime.

\start
Date: 14 Dec 2005 20:42:47 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

OK, please try again with

export CVSROOT=:pserver:anonymous@cvs.sv.gnu.org:/sources/gcl
cd gcl-2.6.8pre/o && cvs update plttest.c && make plt.o \
         && cd ../unixport && make saved_gcl

Or try a fresh checkout if you wish.

Please keep me posted.  I'll explain what is going on if you are
interested.

Take care,

Tim Daly writes:

> Camm,
> 
> on the mac:
> 
> loading /home/daly/macosx46/obj/MACOSX/interp/util.o
> 
> Error: Undefined symbol "_feof"
> Fast links are on: do (si::use-fast-links nil) for debugging
> Error signalled by LOAD.
> Broken at LOAD. Type :H for Help.
> >>make[3]: *** [/home/daly/macosx46/obj/MACOSX/bin/interpsys] Error 255
> 
> _feof looks like a C (stdio?) symbol (file end of file?)
> 
> is there a linker option that needs to be set?

\start
Date: Wed, 14 Dec 2005 13:45:48 -0500
From: Tim Daly
To: Camm Maguire
Subject: Re: MAC OSX 10.4 and GCL

camm,

i have a bunch of patches for the MACOSX version of axiom's C code.
i'll post the diffs in a few...

the gcl_2.6.8pre build worked on the mac. thanks.

\start
Date: Wed, 14 Dec 2005 22:38:55 -0500
From: Tim Daly
To: Camm Maguire
Subject: re: noweb "bug" (was: article "standard" header/footer)

still fails at the same spot in the same way.

> OK, please try again with
> 
> export CVSROOT=:pserver:anonymous@cvs.sv.gnu.org:/sources/gcl
> cd gcl-2.6.8pre/o && cvs update plttest.c && make plt.o \
>          && cd ../unixport && make saved_gcl
> 
> Or try a fresh checkout if you wish.
> 
> Please keep me posted.  I'll explain what is going on if you are
> interested.
> 
> Take care,
> 
> Tim Daly writes:
> 
> > Camm,
> > 
> > on the mac:
> > 
> > loading /home/daly/macosx46/obj/MACOSX/interp/util.o
> > 
> > Error: Undefined symbol "_feof"
> > Fast links are on: do (si::use-fast-links nil) for debugging
> > Error signalled by LOAD.
> > Broken at LOAD. Type :H for Help.
> > >>make[3]: *** [/home/daly/macosx46/obj/MACOSX/bin/interpsys] Error 255
> > 
> > _feof looks like a C (stdio?) symbol (file end of file?)
> > 
> > is there a linker option that needs to be set?

\start
Date: Wed, 14 Dec 2005 22:22:27 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: README of axiom--main--1

Dear Tim,

I've just browsed through axiom--main--1/README.
To me it seems there is some contradiction. See below.

Ralf

The src directory consists of human-written, system-independent
code. You can copy this directory (and the top-level makefiles) and
have a complete build system. *** Nothing in this directory is ever
changed by the Makefiles and it can be mounted in a read-only fashion
during the build process. ***

The zips directory contains particular distributions of
network-available software that is known to work with this release of
Axiom. Newer versions may work and, if so, should be added to this
directory. *** The makefiles that handle these files will unpack them 
into the correct locations in the src directory tree. ***

\start
Date: Thu, 15 Dec 2005 11:45:45 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: hyperlinked algebra

Page, Bill wrote:
> On Tuesday, December 13, 2005 12:27 PM Ralf Hemmecke wrote:
>> Bill Page wrote:
>>>> Doing the same thing with \n instead of \- would be a bit more 
>>>> complicated. But I think for LaTeX-speakers \- is more natural
>>>> anyway.
>>> Hmmm ... maybe '\n ' would be better - more compatible with
>>> the definition of the "dot" language?
>> Well, yes, this may be a good reason to look for something that
>> works with \n. But the problem is that \n would be expanded during
>> \write so \nGroup would count as one control sequence which is
>> usually not defined. I don't know how I can easily achieve a
>> similar trick as with \-.
> 
> What I had in mind was writing it like this:
> 
>   XxxYyy [label="Xxx\n Yyy"];
> 
> i.e. with a space character after the \n. That would allow LaTeX
> to treat it as a two-character command, right? And the extra
> space would not greatly affect the way GraphViz handles multi-line
> labels outside of LaTeX.

If you can generate it that way then just replace in the definition I gave

   \expandafter\def\csname -\endcsname{\string\n}%

by

   \def\n{\string\n}%

The output will be exactly the same. The space gets eaten by TeX because 
it comes after a control sequence.

> But I like your solution below better.
> 
>>> Why would you say '\-' is more natural in LaTeX?
>> TeX has automatic hyphenation, but sometimes one must help. 
>> That can be done via the \- control sequence. Then TeX considers
>> the place where \- is as an additional place to break lines.

Well, I even think we should have

   \expandafter\def\csname -\endcsname{-\string\n}%

so that there would be a hyphen at the end of the first word.

> I have solved the remaining problems with using hyperlinking
> with GraphViz in LaTeX so that now the links in the diagram
> link directly to the appropriate section of the target. For
> example:
> 
> http://wiki.axiom-developer.org/book--main--1/Endpaper3

Wow, it is really that easy!!!

AbelianGroup [label="AbelianGroup"URL="catdef.spad.pdf#ABELGRP"];

I think you are a hero in figuring that out so quickly.

> To make this work, I had to upgrade to the most recent GraphViz
> version 2.7 and also modify the procedure to create pdf files
> to use 'dvips -z' and 'ps2pdf'. This is now implemented for the
> pamphlet page type on MathAction.

Is there any chance to get this translated to html? As I have read 
GraphViz can output SVG, but I have no idea how to use it.

\start
Date: Wed, 14 Dec 2005 22:43:03 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: noweb "bug" (was: article "standard" header/footer)

>> re: advocacy
>>
>>   ok. you're advocating a change.
> 
> No, I am just complaining that you did something wrong 3 years
> ago. It was Ralf who was advocating a change. I just agreed
> with him. ;) 

Hmm, was I advocating? Well, my point of view is to minimise the effort 
of developing/maintaining axiom. As I now more clearly see, noweb is a 
piece of software that need not be included with an Axiom distribution.
For GCL I cannot say anything. But I accept what Tim has done. He has 
brought Axiom to the open source world, so he has the right to be the 
leader and also the right to do things his way. Well that I don't agree 
with including noweb just does not mean that I stop working for Axiom, 
it is just that any bug or fix I find in noweb will be sent to Norman 
Ramsey. I will never modify the version that comes with Axiom.
I guess many people would think that way. If Tim has enough time to 
maintain that version, fine with me.

 > The only change that I am advocating is that we
 > do everything we can to attract more Axiom developers.

Oh. I wholeheartedly agree. And for that MathAction and the whole web 
stuff is necessary. But it is not all. Although I am now following the 
axiom-developer list for about a year or so, my contribution to Axiom is 
still close to zero in terms of actual code/documentation. Only by the 
mail of Tim some days ago, I became aware again of book--main--1. I 
checked it out and found several bookvol?.pamphlet files that I always 
missed. That they are mostly unfinished does not matter too much.

But what matters is that there is just a link on the website telling 
about book--main--1. I cannot remember that I have read much about the 
different volumes that should be written. So why should I check out 
book--main--1 if I am new to Axiom and just want to learn how I could 
contribute? I don't think new developers would want to work on the book 
in the first place.

But why is that branch interesting?

 >Axiom Volume 1: Tutorial of Axiom
 >Volume 2: Programming
 >Volume 3: Reference
 >Volume 4: Developers Guide
 >Volume 5: Interpreter
 >Volume 6: Compiler -- title only
 >Volume 7: Graphics -- title only
 >Volume 8: Hyperdoc -- title only
 >Volume 9: Algebra
 >Volume 10: Numerics

Can you see Volume 4? THAT is what a new developer would be looking for 
(IMHO, of course). Unfortunately vol4 is mainly non-existing.

Tim wanted me to take over volume 9, but after getting an overview of 
the volume tiltles I think a Developers Guide is much more needed than 
the Algebra part (although I rather like to do some algebra), in order 
to get potential new developers more quickly into the system. The 
biggest problem that Axiom has is the number of active developers. If I 
count correctly then one decimal digit is enough. That is, of course, 
nothing given the size of Axiom.

If the Developers Guide never goes to press, I don't care. It should be 
evolving and fix certain conventions/standards that the current 
developers agreed upon and that every developer should follow.
For example, also the build process could be described there.

If I understand correctly every sources of Axiom are under the src 
directory. So I suggest, Tim, you put all the bookvolume?.pamphlet under
axiom--main--1/src/doc. And make a note in the top-level README about 
the availability of the src/doc directory with all its volumes. I would 
then start to work a bit on volume 4 in order to demonstrate how my 
documentation ideas are. If most of the current developers find that 
form attractive I could extend to the other volumes.

\start
Date: Thu, 15 Dec 2005 09:59:24 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug" (was: article "standard" header/footer)

> it is just that any bug or fix I find in noweb will be sent to Norman 
> Ramsey. I will never modify the version that comes with Axiom.
> I guess many people would think that way. If Tim has enough time to 
> maintain that version, fine with me.

if you sent your fix to norman and he accepted it then the next
time we get the chance the zips/noweb-xxx.tgz would be updated
to the latest version. that latest version would include your fix.
the patch in the zips directory would no longer apply and would
no longer be needed. if there are no related patches that implies
we could use the vanilla version. which implies we no longer need
to maintain it and it could be erased. 

bill has pointed out that norman believes the current actions 
noweb takes is correct and that there is a way we can use the
standard version with a local patch (though not to the sources).

instead of a patch there is an awk script and a notangle option.
as soon as we rewrite the system to use the new script we can
remove zips/noweb* and the issue goes away. 

most of the steps would be:
 (1) PUSH THE CHANGE
   check out a fresh system
   build a pre-change copy of the system (call it old)
   build a second copy of the system (call it new)
   in new:
     add the awk script to etc/scripts
     update CHANGELOG
     update the etc/scripts/Makefile.pamphlet to document how it works
     update CHANGELOG
     autogen the script into the proper mnt/linux/bin subdirectory
     modify the document command to use the script
     update CHANGELOG
     for every Makefile.pamphlet in the source tree 
       check every use of "document"
       check every use of "notangle"
     erase all zips/noweb*
     update CHANGELOG
     build a post-change copy of the system
 (2) CHECK THE CHANGE
   diff -r --brief old new
   for each difference
     verify that the difference is correct
     diff -Naur oldfile newfile >dir.dir.oldfile.patch
 (3) EXPOSE THE CHANGE
   mail off the patches
  
once this is done then the noweb issue is moot.

this is essentially a subset of the process i go thru for EVERY
change to the system. (additional tests are done such as doing
a "round-trip" build where i upload the sources, erase all local
copies, download and build the sources and recheck the changes
so i know the uploaded version works).

i might suggest that this is a good exercise for you to try
so you get familiar with making changes. and if you try to
do this it would be worthwhile documenting it in volume 4
(the developers guide). it's hard for me to write the steps
because i do it every day and don't know what others would
consider obscure and in need of explanation.

\start
Date: Thu, 15 Dec 2005 06:11:27 -0800 (PST)
From: Cliff Yapp
To: Bill Page, Tim Daly
Subject: RE: this is open source

Heh - maddeningly enough, it seems to be the rule that the most
interesting languages have the least support.  Lisp had the misfortune
to be just sufficiently unpopular in the early to mid ninties that it
never got the plethera of graphics libraries that other languages got,
and that had proved difficult to remedy.  Doing basic interfacing to
library graphics is doable, but doing a "universal" solution is very
hard.  And nowadays a universal soultion isn't enough - has to look
good and include a lot of functionality.

McCLIM is basically the last best hope for Lisp GUI programming to take
off in a major way (TRUE lisp graphics programming, where the interface
logic is defined in lisp without being closely tied to any single
non-lisp toolkit).  I'd like to help push that forward but it's not a
simple task and I need both more knowledge and time.  Being an eternal
optimist about such things I'm hoping it will eventually come to pass
:-).

But this is exciting for two reasons - the Windows graphics yes, but
SBCL was never designed to run on Windows at all and the port is highly
non-trivial.  So its having progressed that far is quite exciting. 
That was the "wow" part ;-).

--- Bill Page wrote:

> On Wednesday, December 14, 2005 5:42 PM C Y wrote:
> > 
> > WOW.  I did not know things had progressed that far.
> >    Exciting times.
> > 
> > --- Tim Daly wrote:
> > > http://www.dridus.com/~nyef/messagebox-goodness.png
> > > 
> > > sbcl on windows popping up a native windows messagebox
> > > 
> 
> Lisp pop-ups on Windows is exciting?
> 
> ... oh, I am sooo depressed ...

\start
Date: Tue, 13 Dec 2005 15:30:06 -0000
From: Keith Briggs
To: list
Subject: problem at http://wiki.axiom-developer.org/FrontPage

I'm getting either "Bad gateway" or "No space left on device" every time =
I try to post on your wiki.

\start
Date: Thu, 15 Dec 2005 10:33:03 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug" (was: article "standard" header/footer)

> But what matters is that there is just a link on the website telling 
> about book--main--1. I cannot remember that I have read much about the 
> different volumes that should be written. So why should I check out 
> book--main--1 if I am new to Axiom and just want to learn how I could 
> contribute? I don't think new developers would want to work on the book 
> in the first place.
> 
> But why is that branch interesting?
> 
>  >Axiom Volume 1: Tutorial of Axiom
>  >Volume 2: Programming
>  >Volume 3: Reference
>  >Volume 4: Developers Guide
>  >Volume 5: Interpreter
>  >Volume 6: Compiler -- title only
>  >Volume 7: Graphics -- title only
>  >Volume 8: Hyperdoc -- title only
>  >Volume 9: Algebra
>  >Volume 10: Numerics
> 
> Can you see Volume 4? THAT is what a new developer would be looking for 
> (IMHO, of course). Unfortunately vol4 is mainly non-existing.
> 
> Tim wanted me to take over volume 9, but after getting an overview of 
> the volume tiltles I think a Developers Guide is much more needed than 
> the Algebra part (although I rather like to do some algebra), in order 
> to get potential new developers more quickly into the system. The 
> biggest problem that Axiom has is the number of active developers. If I 
> count correctly then one decimal digit is enough. That is, of course, 
> nothing given the size of Axiom.
> 
> If the Developers Guide never goes to press, I don't care. It should be 
> evolving and fix certain conventions/standards that the current 
> developers agreed upon and that every developer should follow.
> For example, also the build process could be described there.
> 
> If I understand correctly every sources of Axiom are under the src 
> directory. So I suggest, Tim, you put all the bookvolume?.pamphlet under
> axiom--main--1/src/doc. And make a note in the top-level README about 
> the availability of the src/doc directory with all its volumes. I would 
> then start to work a bit on volume 4 in order to demonstrate how my 
> documentation ideas are. If most of the current developers find that 
> form attractive I could extend to the other volumes.
> 

the whole book came out in april 2004 and there were great plans
to publish it on lulu.com. however we ran into the fact that
lulu has a 700ish page limit and the book is over 1000. plus
we were muttering about adding a CD so the whole lulu push stalled.

next we decided to split the book into 3 volumes: tutorial, 
programming, and reference. rather than ship 2 copies of the
book in the source tree it was broken off into a separate
project. as part of that project i added volume 4, the developers
guide which the original axiom did not need.

in order to capture the accumulated wisdom of the project i started
going back over the email archive and collecting any email that would
apply to each volume. these are appended to the end of the volumes
at the moment. when the volume rewrite occurs these would be added
and blended. there is still much to be done here as there is a lot
of mail to review.

i've been slowly hacking the book project and recently finished
the first volume. it is on lulu.com now and i should have the
proof copy arrive before the weekend. if the proof copy looks
ok then i can open it up for general sale. the bookvol1.pamphlet
and bookvol1.pdf files are part of --patch-47 (in src/doc) which
will be uploaded at the end of the month. 

i've started in on volume 2, the programmers guide which will 
require a complete rewrite. i've outlined it and am writing a
programming example that will be carried throughout the book
(a cohen algebra which i mentioned in a previous posting)

if you're interested in volume 4 go for it. send email and i'll
help you with the details and the writing. the book--main--1
branch is probably better than the axiom--main--1 branch because
we can update more frequently and the changes can be broken for
a long time. we can also mirror them in src/doc every time the
main system update occurs. and i can update the README.

eventually the book--main--1 branch will go away and the book
volumes will be a standard part of the source tree (indeed, in
the fullness of time they WILL be the source tree).

\start
Date: Thu, 15 Dec 2005 16:03:22 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: noweb "bug"

> if you're interested in volume 4 go for it. send email and i'll
> help you with the details and the writing. the book--main--1
> branch is probably better than the axiom--main--1 branch because
> we can update more frequently and the changes can be broken for
> a long time. we can also mirror them in src/doc every time the
> main system update occurs. and i can update the README.
> 
> eventually the book--main--1 branch will go away and the book
> volumes will be a standard part of the source tree (indeed, in
> the fullness of time they WILL be the source tree).

OK. Could you tell me how recent the sources are in book--main--1.
I have unfortunately never worked with tla except for 'tla get' and I am 
learning very slowly.

If you don't mind, I'll put bookvol4 into src/doc and change everything 
as I would like to have it.

As I understood, I am allowed to commit freely to book--main--1 or is 
there any procedure I should follow?

\start
Date: Thu, 15 Dec 2005 11:06:31 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug"

> OK. Could you tell me how recent the sources are in book--main--1.
> I have unfortunately never worked with tla except for 'tla get' and I am 
> learning very slowly.

re: learning. no problem. you could even document it :-)

> 
> If you don't mind, I'll put bookvol4 into src/doc and change everything 
> as I would like to have it.

ok. 

> 
> As I understood, I am allowed to commit freely to book--main--1 or is 
> there any procedure I should follow?

not yet. we can work that out as we go. just post that you've updated
it so we know to fetch the latest version.

\start
Date: Thu, 15 Dec 2005 10:35:16 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: hyperlinked algebra

in tex if you want a 2 character command (say \n) but no space you write:

foo\n{}bar ==> foo\nbar

the {} tells tex that \n has ended and has no argument.

\start
Date: Thu, 15 Dec 2005 11:47:00 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

On December 15, 2005 10:35 AM Tim Daly (root) wrote:
> 
> in tex if you want a 2 character command (say \n) but no 
> space you write:
> 
> foo\n{}bar ==> foo\nbar
> 
> the {} tells tex that \n has ended and has no argument.
> 

I believe that

foo\n bar  <==>  foo\n{}bar

are identical. No?

\start
Date: Thu, 15 Dec 2005 12:57:22 -0500
From: Tim Daly
To: Bill Page
Subject: Re: hyperlinked algebra

> I believe that
> 
> foo\n bar  <==>  foo\n{}bar
> 
> are identical. No?

nope. the first from will generate 
   foo\n bar
the second form will generate
   foo\nbar

\start
Date: Thu, 15 Dec 2005 12:53:35 -0500
From: Bill Page
To: Matthias Heiler
Subject: Re: this is open source

On December 15, 2005 5:13 AM Matthias Heiler wrote:
> 
> Bill Page writes:
> 
> > They can do that privately in their own source code environments
> > or they can do it more publicly via the Axiom Wiki. All types
> > of Axiom-related programming are now possible through the web
> > including Lisp, Boot, Spad, Aldor and Axiom interpreter scripts.
> 
> For a beginner these are too many languages to choose from.
> People need guidance when to use which, and which language will
> be supported on the long run.  (Nobody wants to invest time in a
> language that will soon be discontinued.)
> 

Isn't that what they said about Fortran? :)

As far as I am concerned none of these languages should be
discontinued. They are all essential to the way Axiom is
built. (Tim Daly disagrees about Boot, but that is a different
story.)

Learning Lisp is one thing in itself. If you program at all, you
should at least know something about Lisp.

Learning Axiom interpreter scripts is essential for all but
trivial use of Axiom.

Learning Spad is essential for Axiom library programming.

Learning Boot is simple because it is essentially a simplified
form of Spad - an intermediate language between Lisp and Spad.
Boot is used only internally in the Axiom compiler and interpreter.

I think that it is the nature of Axiom that it's development
environment can not be made much simpler than this. There is
the old saying: Everything should be as simple as possible,
but not simpler. :)


\start
Date: Thu, 15 Dec 2005 13:06:12 -0500
From: Bill Page
To: Derek Rayside
Subject: RE: hyperlinked algebra

Derek,

That is great news. Thank you very much for this work. As Ralf
said, we plan to make extensive use of this in our documentation
of Axiom. The combination of GraphViz with LaTeX and hyperref
links is very convenient.

I am aware of, but have not yet experimented with another
extension LaTeX-related extension of GraphViz that allows the
use of LaTeX symbols in labels.

http://brighten.bigw.org/projects/ladot

Do you have any thoughts about how to combine this with
graphviz.tex in a seemless way?

Thanks again.

Regards,
Bill Page.

> -----Original Message-----
> 
> Hi Ralf
> 
> Thanks for your note!  That's my first note from a user of 
> this software!
> 
> I have been making some improvements to graphviz.tex as well, and
> will incorporate your code for the next "release".  I have made it
> a proper latex style file with documentation, and also added a work 
> around to deal with the low number of file handles that tex has.
> 
> I have a big deadline for the term today, so I probably won't 
> get to look at this until next week some time.
> 
> Thanks,
> Derek.
> 
> 
> On Thu, 15 Dec 2005, Ralf Hemmecke wrote:
> 
> > Dear Derek,
> >
> > recently in connection with Axiom 
> (http://wiki.axiom-developer.org) i
> > have added a little feature to your graphviz.tex from
> > http://www.graphviz.org/Resources.php
> >
> > It is basically identical to yours, but it allows the appearance
> > of \- inside words and translates them to the string \n in the
> > dot file output.
> ...

\start
Date: Thu, 15 Dec 2005 13:22:12 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperlinked algebra

On December 15, 2005 12:57 PM Tim Daly wrote:

> Bill Page wrote: 
> > I believe that
> > 
> > foo\n bar  <==>  foo\n{}bar
> > 
> > are identical. No?
> 
> nope. the first from will generate 
>    foo\n bar
> the second form will generate
>    foo\nbar
> 

???

I don't think so. Try this:

\documentclass[10pt,notitlepage]{article}
\def\n{n}%
\begin{document}
\pagestyle{empty}
\section{Test}
\begin{verbatim}
foo\n bar
foo\n{}bar
\end{verbatim}

foo\n bar

foo\n{}bar
\end{document}

The result is here:

http://page.axiom-developer.org/test.dvi

\start
Date: 15 Dec 2005 14:02:12 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

Greetings!

OK, think I got it now, will know for sure in a bit.  Might want to
try a fresh update of 2.6.8pre at this point.

Please keep me posted.

Take care,

Tim Daly writes:

> still fails at the same spot in the same way.
> 
> > OK, please try again with
> > 
> > export CVSROOT=:pserver:anonymous@cvs.sv.gnu.org:/sources/gcl
> > cd gcl-2.6.8pre/o && cvs update plttest.c && make plt.o \
> >          && cd ../unixport && make saved_gcl
> > 
> > Or try a fresh checkout if you wish.
> > 
> > Please keep me posted.  I'll explain what is going on if you are
> > interested.
> > 
> > Take care,
> > 
> > Tim Daly writes:
> > 
> > > Camm,
> > > 
> > > on the mac:
> > > 
> > > loading /home/daly/macosx46/obj/MACOSX/interp/util.o
> > > 
> > > Error: Undefined symbol "_feof"
> > > Fast links are on: do (si::use-fast-links nil) for debugging
> > > Error signalled by LOAD.
> > > Broken at LOAD. Type :H for Help.
> > > >>make[3]: *** [/home/daly/macosx46/obj/MACOSX/bin/interpsys] Error 255
> > > 
> > > _feof looks like a C (stdio?) symbol (file end of file?)
> > > 
> > > is there a linker option that needs to be set?

\start
Date: Thu, 15 Dec 2005 13:24:16 -0600
From: Jay Belanger
To: list
Subject: This sentence is not a Lie. (was Re: this is open source)

Cliff Yapp writes:

> --- Tim Daly wrote:
>
>> axiom is free software. design it, hack it, polish it, test it,
>> document it, and send patches (or arch changesets).  you're
>> allowed to do anything you want and have no reason to depend
>> on me for anything (except the final merge step into axiom--
>> main). but we ALL expect quality work.
>
> Sorry if we're not pulling our weight Tim 

Was the original post a comment about people not pulling their weight?
I didn't think so, but regardless, I need to do something.
I can now start on EAxiom for Cliff.
Also, I seem to recall seeing a package to do Lie symmetry analysis of
PDEs in Axiom, but I can't come across it again.  (Googling "Axiom"
and anything mathematical doesn't always give results about the CAS.)
What, if anything, is out there?

\start
Date: Thu, 15 Dec 2005 17:10:38 -0500
From: Tim Daly
To: Camm Maguire
Subject: typo in the error msg

sorry, i am hand-copying the error message and there was a minor typo
=====================================================================

different error message. there is progress. now it is loading the
lisp code that was compiled but it fails loading cfuns.o which
is C code that gets compiled and linked into the image. the source
is in src/lib/cfuns.c.pamphlet. the message is

Loading /home/daly/macosx46/obj/MACOSX/interp/cfuns.o
Error binding section LC_SEGMENT.__DATA.__la_symbol_ptr: symbol _findString is undefined

Error: Cannot get relocated section contents

\start
Date: Thu, 15 Dec 2005 17:03:54 -0500
From: Tim Daly
To: Camm Maguire
Subject: re: noweb "bug" (was: article "standard" header/footer)

different error message. there is progress. now it is loading the
lisp code that was compiled but it fails loading cfuns.o which
is C code that gets compiled and linked into the image. the source
is in src/lib/cfuns.c.pamphlet. the message is

Loading /home/daly/macosx46/obj/MACOSX/interp/cfuns.o
Error binding section LC_SEGMETN.__DATA.__la_symbol_ptr: symbol _findString is undefined

Error: Cannot get relocated section contents

\start
Date: Thu, 15 Dec 2005 14:08:37 -0800 (PST)
From: Cliff Yapp
To: Jay Belanger
Subject: Re: This sentence is not a Lie

--- Jay Belanger wrote:
> 
> Cliff Yapp writes:
> >
> > Sorry if we're not pulling our weight Tim 
> 
> Was the original post a comment about people not pulling their
> weight?

Not really.  I read it (just my interpretation) as Tim being frustrated
with so many opinions without accompanying code, and I'm certainly
guilty of that.  So that was me acknowledging that, rather than a
response directly to his original email.  Like when your teacher
rebukes the whole class generally but you know you've been doing
whatever it is everyone's getting rebuked for ;-).

> I didn't think so, but regardless, I need to do something.
> I can now start on EAxiom for Cliff.

Wooooo hooooooo!

> Also, I seem to recall seeing a package to do Lie symmetry 
> analysis of PDEs in Axiom, but I can't come across it again. 
> (Googling "Axiom" and anything mathematical doesn't always
> give results about the CAS.) What, if anything, is out there?

Maybe you are thinking of JET?
http://www.iwr.uni-heidelberg.de/groups/compalg/seiler/Papers/HTML/Axiom.html
 If so, good news - the author of the JET environment recently gave me
permission to release an older version of his code he was able to
locate!  I have it on my home machine but with one thing and another I
haven't gotten it online yet (I need to attach copyright and license
info).  It's not documented unfortunately, and I don't know about the
copyright on his paper or whether he would be willing to have us use it
if he does still have it, but reading the paper and proceeding from
there with the code is probably a lot better than starting from
scratch!

I'll try and get that code uploaded tomorrow, maybe on the Axiom wiki
if I can find a good place.  This code isn't any kind of pamphlet file
and I have no documentation to turn it into one, but it's a start.

Probably also worth following up on is subsequent work the author did
in Mupad on this subject - apparently quite a lot of progress was made.

\start
Date: 15 Dec 2005 17:52:18 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

Greetings!  Odd, I see:

Loading /Users/camm/axiom/obj/MACOSX/interp/cformat.o
start address -T 0xccf500 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cformat.o
Loading /Users/camm/axiom/obj/MACOSX/interp/cfuns.o
start address -T 0xc41880 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cfuns.o
Loading /Users/camm/axiom/obj/MACOSX/interp/clam.o
start address -T 0xc5d580 Finished loading /Users/camm/axiom/obj/MACOSX/interp/clam.o
Loading /Users/camm/axiom/obj/MACOSX/interp/clammed.o
start address -T 0xc1b000 Finished loading /Users/camm/axiom/obj/MACOSX/interp/clammed.o
Loading /Users/camm/axiom/obj/MACOSX/interp/comp.o

In any case, the way this stuff works is to write dummy C calls to the
functions to which GCL's compiler might possibly produce references --
then the symbol is guaranteed to be in GCL's lookup hash table so it
can find its address when the .o file is loaded.  So you might want to
try adding some 

findString("foo"...);

whatever the syntax is (check the macosx man page as its not unix to
my knowledge) into plttest.c, make plt.o && cd ../unixport && make
saved_gcl. 

I'll try to look into this too, but time is short at the moment.

Take care,


Tim Daly writes:

> different error message. there is progress. now it is loading the
> lisp code that was compiled but it fails loading cfuns.o which
> is C code that gets compiled and linked into the image. the source
> is in src/lib/cfuns.c.pamphlet. the message is
> 
> Loading /home/daly/macosx46/obj/MACOSX/interp/cfuns.o
> Error binding section LC_SEGMETN.__DATA.__la_symbol_ptr: symbol _findString is undefined
> 
> Error: Cannot get relocated section contents

\start
Date: Thu, 15 Dec 2005 19:13:16 -0500
From: Tim Daly
To: Cliff Yapp
Subject: re: This sentence is not a Lie

> > > Sorry if we're not pulling our weight Tim 
> > 
> > Was the original post a comment about people not pulling their
> > weight?
> 
> Not really.  I read it (just my interpretation) as Tim being frustrated
> with so many opinions without accompanying code, and I'm certainly
> guilty of that.  So that was me acknowledging that, rather than a
> response directly to his original email.  Like when your teacher
> rebukes the whole class generally but you know you've been doing
> whatever it is everyone's getting rebuked for ;-).
> 

well, it's only my opinion but what i think tim meant was that
you're all appearing to "ask permission" and you don't need to.

this is free code, it isn't "my" code. i don't own it, i don't
(try to) control it, and so complaining to me that something is
"wrong" is like sending me a note that code YOU wrote on your
desktop is wrong... so? fix it.

i realize that i'm standing on the "master copy" but, like the 
linux project, somebody has to organize the chaos. but nobody
asks linus if they can hack device drivers or anything else.
they just do it, show that it works, put out running code,
and then get a whole lot of flak about it. eventually it gets
improved and sent up the chain to get put in the kernel.

i'm not concerned about "pulling weight"... everybody does what
they can, they want to, they have time for... i'm just a bit of
a fanatic about it so i feel pressured to fix broken things.

and i'm certainly not in a position to rebuke anyone. nor do i
feel the need to. rebuking people would arise from the feeling
that i was in a position of power and trying to control everyone.
which i'm not and i'm not.

the bottom line is.... you have a whole CD full of code and a
whole world listening... and an opportunity to change the world.
whatcha gonna do about it?

\start
Date: Thu, 15 Dec 2005 14:10:24 -0500 (EST)
From: Derek Rayside
To: Bill Page
Subject: RE: hyperlinked algebra

Hi Bill,

I am aware of ladot, but I have not used it.  A feature request such as
this is just the sort of impetus I need to investigate the matter :)
I'll take a look at it next week.

Yes, you will definitely run into tex's file handle limitations.
Basically you can draw slightly over a dozen graphs before it dies.
Thankfully the new version has a workaround.  The current state of the
code and documentation is here:

    http://people.csail.mit.edu/drayside/latex/dotla/

It is presently called dotla, as the inverse of ladot, but Steve Northover
asked me to rename it back to graphviz, so I will do that shortly.

best,
Derek.


On Thu, 15 Dec 2005, Bill Page wrote:

> Derek,
>
> That is great news. Thank you very much for this work. As Ralf
> said, we plan to make extensive use of this in our documentation
> of Axiom. The combination of GraphViz with LaTeX and hyperref
> links is very convenient.
>
> I am aware of, but have not yet experimented with another
> extension LaTeX-related extension of GraphViz that allows the
> use of LaTeX symbols in labels.
>
> http://brighten.bigw.org/projects/ladot
>
> Do you have any thoughts about how to combine this with
> graphviz.tex in a seemless way?
>
> Thanks again.
>
> Regards,
> Bill Page.
>
> > -----Original Message-----
> > From: Derek Rayside [mailto:Derek Rayside]
> > Sent: December 15, 2005 12:08 PM
> > To: Ralf Hemmecke
> > Cc: Bill Page
> > Subject: Re: hyperlinked algebra
> >
> >
> > Hi Ralf
> >
> > Thanks for your note!  That's my first note from a user of
> > this software!
> >
> > I have been making some improvements to graphviz.tex as well, and
> > will incorporate your code for the next "release".  I have made it
> > a proper latex style file with documentation, and also added a work
> > around to deal with the low number of file handles that tex has.
> >
> > I have a big deadline for the term today, so I probably won't
> > get to look at this until next week some time.
> >
> > Thanks,
> > Derek.
> >
> >
> > On Thu, 15 Dec 2005, Ralf Hemmecke wrote:
> >
> > > Dear Derek,
> > >
> > > recently in connection with Axiom
> > (http://wiki.axiom-developer.org) i
> > > have added a little feature to your graphviz.tex from
> > > http://www.graphviz.org/Resources.php
> > >
> > > It is basically identical to yours, but it allows the appearance
> > > of \- inside words and translates them to the string \n in the
> > > dot file output.

\start
Date: Thu, 15 Dec 2005 22:23:30 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: hyperlinked algebra

On December 15, 2005 5:46 AM Ralf Hemmecke wrote:
> ... 
> Is there any chance to get this translated to html? As I have
> read GraphViz can output SVG, but I have no idea how to use it.
> 

Yes. GraphViz can generate several different formats that are
compatible with HTML. SVG might be interesting but it is not
yet widely supported by browsers. One alternative is to use
just a simple png image with a "image map". The map associates
urls with specific areas in the image. The image can be displayed
in the standard manner in HTML. Graphviz can generate both the
image and the map from the same input as used in the LaTeX
examples. The end result would be equivalent to the way this
works now in the pdf pamphlet files. 

On MathAction it is possible right now to display GraphViz output
in HTML by processing it as an embedded LaTeX snippet, like this:

\begin{latex}
\digraph { ... }
\end{latex}

But this way it is not possible to associate the image with a
map. What I have in mind is to allow \digraph {...} to appear
directly in the Structured Text and to process it directly as
png plus image map. This might take a day or two of programming.

\start
Date: Fri, 16 Dec 2005 02:07:04 -0500
From: Tim Daly
To: Camm Maguire
Subject: re: noweb "bug" (was: article "standard" header/footer)

i took your suggestion and rewrote plttest.c to add the line:

long findstring(char *a, char *b);

but it had no effect. 

when you built axiom did you modify the makefiles to use 
GCLVERSION=gcl-2.6.8pre

or did you build the lisp by hand and copy it over?
or did you use your debian mod and compiler::link?

\start
Date: Fri, 16 Dec 2005 01:25:18 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: noweb "bug"

> most of the steps would be:
>  (1) PUSH THE CHANGE
>    check out a fresh system
>    build a pre-change copy of the system (call it old)
>    build a second copy of the system (call it new)
>    in new:
>      add the awk script to etc/scripts
>      update CHANGELOG
>      update the etc/scripts/Makefile.pamphlet to document how it works
>      update CHANGELOG
>      autogen the script into the proper mnt/linux/bin subdirectory
>      modify the document command to use the script
>      update CHANGELOG
>      for every Makefile.pamphlet in the source tree 
>        check every use of "document"
>        check every use of "notangle"
>      erase all zips/noweb*
>      update CHANGELOG
>      build a post-change copy of the system
>  (2) CHECK THE CHANGE
>    diff -r --brief old new
>    for each difference
>      verify that the difference is correct
>      diff -Naur oldfile newfile >dir.dir.oldfile.patch
>  (3) EXPOSE THE CHANGE
>    mail off the patches
> 
> this is essentially a subset of the process i go thru for EVERY
> change to the system. (additional tests are done such as doing
> a "round-trip" build where i upload the sources, erase all local
> copies, download and build the sources and recheck the changes
> so i know the uploaded version works).

Thank you Tim. With a bit more detail that should go to the developer's 
guide. There are certainly many more of such procedures in the 
development process that are not yet documented. I guess, there will be 
lots of questions from me in order to be able to fill the developer's 
guide with some useful contents.

> i might suggest that this is a good exercise for you to try
> so you get familiar with making changes. and if you try to
> do this it would be worthwhile documenting it in volume 4
> (the developers guide).

That is exactly my goal.

> it's hard for me to write the steps
> because i do it every day and don't know what others would
> consider obscure and in need of explanation.

Well, I am not yet completely sure, but I somehow have the feeling that 
I would suggest another development cycle (no patches via email but via 
branches), but I first have to understand that myself. So that may take 
some time.

\start
Date: Fri, 16 Dec 2005 00:00:57 +0100
From: Ralf Hemmecke
To: Matthias Heiler
Subject: Axiom guidance

Matthias Heiler wrote:
> Bill Page writes:
> 
>> They can do that privately in their own source code environments
>> or they can do it more publicly via the Axiom Wiki. All types
>> of Axiom-related programming are now possible through the web
>> including Lisp, Boot, Spad, Aldor and Axiom interpreter scripts.
> 
> For a beginner these are too many languages to choose from.  People
> need guidance when to use which, and which language will be supported
> on the long run.  (Nobody wants to invest time in a language that will
> soon be discontinued.)

Great that you drop in. You are exactly right.
 > People need guidance.
That is what I am still missing in the Axiom project. I will take the 
burden and try to put some HowTo sections into the developer's guide 
under book--main--1. I still have no clear idea how I can do this but 
I'll try to write down my steps so that it is perhaps a bit easier for 
others to contribute to Axiom and to find their way through the Axiom 
jungle. I would be happy if you could contribute. What exactly are you 
missing? Would you like to do something for Axiom and don't know where 
to start or what are your questions?

I somehow have the impression that the FAQ section is a bit unwritten 
and does not really invite people to put in their questions that will 
perhaps be answered by somebody who can. Bill, what do you think about 
making it more explicit on the FAQ wiki that people should put their 
questions there? The axiom-developer list is great, but questions and 
answers get burried easily.

Matthias and anyone else who is listening, tell your critisism. We all 
can learn from it and probably (try to) improve.

\start
Date: Fri, 16 Dec 2005 01:39:28 +0100
From: Ralf Hemmecke
To: Tim Daly
Subject: Re: noweb "bug"

> i've started in on volume 2, the programmers guide which will 
> require a complete rewrite. i've outlined it and am writing a
> programming example that will be carried throughout the book
> (a cohen algebra which i mentioned in a previous posting)

Hmmm, I don't know whether it is worth spending many hours on the spad 
language. You know, I am a bit against spad. Although quite similar, 
SPAD is not the same as Aldor. And I would rather like to see SPAD 
replaced by Aldor. Eliminate the SPAD language in favour of Aldor.

Of course the biggest problem here is that Aldor is still not free 
although there seem to be plans from Stephen Watt to make the compiler 
Open Source. Unfortunately, I have no idea how we could accelerate this 
opensourcing process.

> if you're interested in volume 4 go for it. send email and i'll
> help you with the details and the writing. the book--main--1
> branch is probably better than the axiom--main--1 branch because
> we can update more frequently and the changes can be broken for
> a long time.

You see, that is one little detail that should go into the developer's 
guide. axiom--main--1 is to be considered read-only by all developers 
except you, Tim (and perhaps a few trusted people who I don't know). For 
all the other versions like book--main--1, etc. there are other rules. 
(Rules that I haven't read about.)

> eventually the book--main--1 branch will go away and the book
> volumes will be a standard part of the source tree 

Right so!

> (indeed, in the fullness of time they WILL be the source tree).

I know approximatly what you mean, and will suggest some structure and 
document it in the developer's guide.

\start
Date: Fri, 16 Dec 2005 01:53:36 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Re: hyperlinked algebra

Bill Page wrote:
> On December 15, 2005 10:35 AM Tim Daly (root) wrote:
>> in tex if you want a 2 character command (say \n) but no 
>> space you write:
>>
>> foo\n{}bar ==> foo\nbar
>>
>> the {} tells tex that \n has ended

Right.

> and has no argument.

I tend to say that is wrong. The definition of \n says whether \n takes 
an argument at all. {} is just an empty group which could have some 
influence though on the hyphenation algorithm, IIRC.

> I believe that
> 
> foo\n bar  <==>  foo\n{}bar
> 
> are identical. No?

They don't look identical, but they do the same thing as long as you 
haven't redefined the meaning of { and } and the meaning of the space 
character. They would not be identical, if there where the following 
definition around.

As a proof of concept look at what the following code gives.
Note especially how the space in "backslash n" gets typeset in the .dvi.

Happy TeXing... ;-)
Ralf

\documentclass{article}
\expandafter\def\csname n bar\endcsname{BAR}
\catcode`\ =11%consider space as belonging to the category "letter"
\def\n{(backslash n)}
\begin{document}
\fbox{foo\n bar}
\fbox{foo\n{}bar}
\end{document}

\start
Date: Fri, 16 Dec 2005 04:00:56 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [AxiomProgramming] (new) This is a stub. Please enhance by providing links etc. Don't make it much longer

Axiom's programming languages

  At first it might be confusing: So many programming languages to
  choose from. There is Lisp, Boot, Spad, Aldor and even more. So what
  do I really need to learn?

  Lisp

    to learn programming itself, if you intend to hack the
    interpreter, compiler, user-interface

  "Axiom interpreter":AxiomInterpreter scripts

    if you want to use Axiom for doing mathematics at a basic to
    intermediate level. Similar in scope to the scripting languages
    provided by Maple, Mathematica, etc., only *a lot better*

    Explained in detail in the "Axiom Book":AxiomBook Sections 5 and 6
    and by HyperDoc

  "Spad":AxiomCompiler

    if you want to use Axiom for doing mathematics at an advanced
    level, in a way that you can share your efforts with other
    people. Furthermore, if you want to "debug Axioms":DebuggingAxiom
    "mathematical" bugs. The mathematical capabilities Axiom provides
    are written in Spad.

    It is (more or less) a prerequesite to know how to use the Axiom
    interpreter language, they are nearly identical.

    Explained in the "Axiom Book":AxiomBook, Sections 11, 12 and 13.

  "Aldor":AldorForAxiom

    is the successor of Spad and can be used within Axiom via an
    external compiler. If you want to use Axiom for doing mathematics
    at an advanced level, in a way that you can share your efforts
    with other people. Also, if you *really* want to understand how to
    use Spad, you should learn Aldor.

  Aldor has extensive online
  "documentation":http://www.aldor.org/docs/HTML/index.html

  LaTeX

    is the language we use for "documenting":LiterateProgramming everything.

\start
Date: Fri, 16 Dec 2005 12:53:53 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: Local MathAction

Dear Bill,

I know it's a stupid question for a living thing like MathAction, but 
since I am usually offline when I work on Axiom, I would be happy to 
have a local copy of all the information on my computer. Is there any 
hope to get something like this together with a possible daily 
synchronization?

\start
Date: Fri, 16 Dec 2005 13:34:59 +0100
From: Ralf Hemmecke
To: Bill Page
Subject: re: this is open source

>>> They can do that privately in their own source code environments
>>> or they can do it more publicly via the Axiom Wiki. All types
>>> of Axiom-related programming are now possible through the web
>>> including Lisp, Boot, Spad, Aldor and Axiom interpreter scripts.
>> For a beginner these are too many languages to choose from.
>> People need guidance when to use which, and which language will
>> be supported on the long run.  (Nobody wants to invest time in a
>> language that will soon be discontinued.)

> Isn't that what they said about Fortran? :)

> As far as I am concerned none of these languages should be
> discontinued. They are all essential to the way Axiom is
> built. (Tim Daly disagrees about Boot, but that is a different
> story.)

Well, I think I rather agree with Matthias and Tim. The fewer languages 
I have to learn in order to get some mathematical stuff running, the better.

Boot is something that is maybe a bit easier to learn than LISP, but
it is not essential for Axiom in the long run. But I would rather have 
replaced BOOT by Aldor instead of LISP if this were possible.

> Learning Lisp is one thing in itself. If you program at all, you
> should at least know something about Lisp.

Yes, I know some basics in LISP, but I would not say I can speak it 
fluently. And although LISP is at the moment very important for Axiom, 
wouldn't it make sense for the future to replace more and more LISP by 
some higher level language? I consider LISP a kind of assembler 
language. Sure one can do all kinds of stuff with it, but Axiom actually 
exists because it is not LISP. Axiom provides a very nice language 
SPAD/Aldor. Anything below that is just hairy details for 
axiom-developers/maintainers. And if these hairy details could be made 
less hairy then that is certainly better. It is also better in view of 
getting more people become axiom-developers. As Matthias said, a new 
person just doesn't easily know where to start and thus is lost as an 
axiom-developer.

So making the build process simpler is essential to accelerate the 
development.

> Learning Axiom interpreter scripts is essential for all but
> trivial use of Axiom.

I hope some day we will just have Aldor and Bnatural (which I think 
would be a library written in Aldor).

> Learning Spad is essential for Axiom library programming.

Right, but unfortunately SPAD is not Aldor. So which language to choose?
Right, spad and aldor are very much the same, but unfortunately there 
are some tiny differences. It would make me somehow happy if Axiom 
states somewhere that SPAD is deprecated and for new code Aldor should 
be preferred.

> Learning Boot is simple because it is essentially a simplified
> form of Spad - an intermediate language between Lisp and Spad.
> Boot is used only internally in the Axiom compiler and interpreter.

Yes, Boot is internal, and until I really want to learn how the compiler 
and interpreter work I don't learn it. Well, I think it would also lead 
to a paragraph in the developer's guide. What language is used for what 
internally. Tim, is there already such a paragraph somewhere?

> I think that it is the nature of Axiom that it's development
> environment can not be made much simpler than this. There is
> the old saying: Everything should be as simple as possible,
> but not simpler. :)

As simple as possible: Axiom has a kernel in written in C or LISP and 
the rest is Aldor. Bill, would you consider that too simple?

OK, I agree, Axiom has many more languages:
(La)TeX
awk
sh
Makefile
noweb
perl(?)
awk
C
python(?)
etc...

But these languages are existing languages in their own right. Axiom 
adds BOOT, SPAD, the Interpreter language, Aldor. Aldor could even be 
seen to belong to the list above.

So what Axiom should add is a nice mathematical interface. Type 
mathematics, get out mathematics. Bnatural would be a first approach to 
this. Hopefully there will be some timeslot in the near future where 
someone could implement this.

\start
Date: Fri, 16 Dec 2005 14:15:09 +0100
From: Ralf Hemmecke
To: Derek Rayside
Subject: Re: hyperlinked algebra

This is a multi-part message in MIME format.
--------------010602090607020208010506

Hi Derek,

>     http://people.csail.mit.edu/drayside/latex/dotla/

In the .pdf you were asking for some code to maintain newlines within 
\digraph to carry over to the output.

I am not sure whether it's the right way, but I guess you might like 
this little piece of code in the attachment. So "fancyvrb" would not be 
needed and my \- stuff should still work because the argument of 
\digraph still get expanded.

Ralf

--------------010602090607020208010506
 name="xxx.tex"
 filename="xxx.tex"

\documentclass{article}

\newcommand{\digraph}[2][scale=1]{%
\IfFileExists{#2.ps}%
{\includegraphics[#1]{#2}}%
{\fbox{
    \begin{tabular}{l}
      The file \texttt{#2.ps} hasn't been created from
      \texttt{#2.dot} yet.
    \end{tabular}
  }
}
\writedigraph{#2}}

\begingroup
  \catcode`\^^M=\active
  \gdef\writedigraph{%
    \begingroup\catcode`\^^M=\active\def^^M{^^J}\@writedigraph}%
\endgroup
\def\@writedigraph#1#2{%
  \newwrite\dotfile%
  \immediate\openout\dotfile=#1.dot%
  \expandafter\def\csname -\endcsname{-\string\n}%
  \immediate\write\dotfile{digraph #1 {#2}}%
  \immediate\closeout\dotfile\endgroup}

\begin{document}

\digraph[scale=1.0]{xxxdot}{
size="7.5,7.5";
rankdir=BT;
ratio=auto;
fontname="Helvetica";
nodesep="0.15";
ranksep="0.75";
SetCategory [label="Set\-Category"];
{AbelianSemiGroup; SemiGroup; OrderedSet; Finite} -> SetCategory;
}

\end{document}

--------------010602090607020208010506--

\start
Date: Fri, 16 Dec 2005 10:16:51 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: Axiom guidance
Cc: Matthias Heiler

On December 15, 2005 6:01 PM Ralf Hemmecke wrote:
> ... 
> I somehow have the impression that the FAQ section is a bit
> unwritten and does not really invite people to put in their
> questions that will perhaps be answered by somebody who can.
> Bill, what do you think about making it more explicit on the
> FAQ wiki that people should put their questions there? The
> axiom-developer list is great, but questions and answers get
> burried easily.
> 

Yes, you are right that the current FAQ on the Axiom Wiki is
just cobbled together from other sources (i.e. "unwritten" in
a sense).  I think it is a good idea to encourage people to
submit questions there. But of course we do encourage people to
submit questions anywhere on the wiki - it is an entirely open
web site. What we need most I think is for someone to explicitly
take on the task of helping to maintain and develop the FAQ.
It is easy for anyone who has a browser to do this from anywhere
in the world.

> Matthias and anyone else who is listening, tell your critisism.
> We all can learn from it and probably (try to) improve.
> 

Absolutely right!

\start
Date: Fri, 16 Dec 2005 11:10:32 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: Re: noweb "bug"

> Hmmm, I don't know whether it is worth spending many hours on the spad 
> language. You know, I am a bit against spad. Although quite similar, 
> SPAD is not the same as Aldor. And I would rather like to see SPAD 
> replaced by Aldor. Eliminate the SPAD language in favour of Aldor.

not to worry, spad isn't going away any time soon.

there are 1100 domains that would need rework which could be done
but no-one will do.

aldor isn't available.

spad and aldor are 99% compatible. aldor needs special constructs
because it runs standalone but it is conceptually the same.

aldor has an idea or two (like post-facto extensions) which are
not used or required in spad.

documenting how to program has SO little to do with the language
that we could do a s/spad/aldor/ (if i spoke sed) and get the same
results. we could call it SPALDOR :-)

\start
Date: Fri, 16 Dec 2005 10:25:29 -0500
From: Bill Page
To: list
Subject: FW: [TeXmacs] Better system for donations

Axiom Developers;

Obviously this is also of interest to Axiom developers. I think
we should encourage the creation of such an association in
France and in other countries as well.

Regards,
Bill Page.

-----Original Message-----
From: Joris van der Hoeven [mailto:vdhoeven@texmacs.org] 
Sent: December 16, 2005 4:52 AM
To: texmacs-users@texmacs.org
Cc: loic.mazo@laposte.net; ; Komla DOMELEVO
Subject: Re: [TeXmacs] Better system for donations


Dear all,

I am happy that several people are enthusiastic about creating
a French association for promoting free software in science.
At this very moment, besides me, the following people are
interested to participate:

	Nicolas Ratier
	Loic Mazo
	Komla Domelevo
	Henri Lesourd

It would be nice if you guys could start by working out a draft version
of "les status de l'association". A few points:

1) The association might be called something like

	"Association pour les logiciels libres en science"

2) It should be made precise that we only promote free software
   (in the sense of GNU) and with applications in science.
   Probably, we should also include a few words or preamble about
   the importance of this issue and our objectives.

3) We have to make sure that it possible to receive donations and
   sell software, books and/or other services, which can be reinvested
   in the development and promotion of free software in science.

4) We have to think about allowing other free software projects
   in science joining our efforts in the future. In that case,
   possible money received by the association should be redistributed
   among the constituant projects in a clear and adequate way.

If there are other people who would like to join our efforts,
please let me know. At a certain point we might create a separate
mailing list to this effect.

Best wishes, Joris

\start
Date: Fri, 16 Dec 2005 10:36:36 -0500
From: Bill Page
To: Ralf Hemmecke
Subject: RE: Local MathAction

On December 16, 2005 6:54 AM Ralf Hemmecke wrote:
> 
> I know it's a stupid question for a living thing like MathAction,
> but since I am usually offline when I work on Axiom, I would be
> happy to have a local copy of all the information on my computer.
> Is there any hope to get something like this together with a
> possible daily synchronization?
> 

I think that is an **excellect** question! In fact we anticipated
such a possibility in the original design of MathAction. This is
part of what Tim Daly calls the Doyen idea.

Installing MathAction locally is certainly possible but the setup
is a little complex. So far as I know only two other Axiom
developers have done this. One is Bob McElrath - the developer
of the LaTeX extensions for Zwiki on which MathAction is based.
The other developer who has installed MathAxtion locally is Hans
Peter Wuermli.

It would be good first to review:

http://wiki.axiom-developer.org/MathAction

and then read:

http://wiki.axiom-developer.org/InstallingMathAction

(Note: Some of the information here is a little out of date.)

I would be very happy to help you set this up locally for your
own use. As part of the process, this would allow me to improve
the How-To documentation.

\start
Date: 16 Dec 2005 17:01:11 +0100
From: Martin Rubey
To: list
Subject: Basic Algebra Hierarchy

Why is there a link from Algebra to CharacteristicNonZero ?

\start
Date: Fri, 16 Dec 2005 10:07:11 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [AxiomProgramming] 

  At first it might be confusing: So many programming languages to
  choose from. There is Lisp, Boot, Spad, Aldor and even more. So what
  do I really need to learn? These are listed below in order of
  importance:

  "Axiom interpreter":AxiomInterpreter scripts

    if you want to use Axiom for doing mathematics at a basic to
    intermediate level. Similar in scope to the scripting languages
    provided by Maple, Mathematica, etc., only *a lot better*

    Explained in detail in the "Axiom Book":AxiomBook Sections 5 and 6
    and by HyperDoc

  "Spad":AxiomCompiler

    if you want to use Axiom for doing mathematics at an advanced
    level, in a way that you can share your efforts with other
    people. Furthermore, if you want to "debug Axioms":DebuggingAxiom
    "mathematical" bugs. The mathematical capabilities Axiom provides
    are written in Spad.

    It is (more or less) a prerequesite to know how to use the Axiom
    interpreter language, they are nearly identical.

    Explained in the "Axiom Book":AxiomBook, Sections 11, 12 and 13.

  "Aldor":AldorForAxiom

    is the successor of Spad and can be used within Axiom via an
    external compiler. If you want to use Axiom for doing mathematics
    at an advanced level, in a way that you can share your efforts
    with other people. Also, if you *really* want to understand how to
    use Spad, you should learn Aldor.

  Aldor has extensive online
  "documentation":http://www.aldor.org/docs/HTML/index.html

  LaTeX

    is the language we use for "documenting":LiterateProgramming everything.

  "Lisp":LispInAxiom

    Boot is used internally in Axiom for the implementation of the interpreter
    and Spad compiler. Boot is written in Lisp (and Boot) and has a syntax very
    much like Spad.

\start
Date: Fri, 16 Dec 2005 10:40:08 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] Great page design

The new front page looks much, much better than the old Wiki. I
believe these sorts of things actually can help the credibility of
your project more than some would like to believe ;-) How hard would
it be to make all the other pages look this pretty? It seems like the
other pages still display in a very ugly way on my box. I think this
can largely be remedied by switching to the same font that is used on
the front page.

\start
Date: Fri, 16 Dec 2005 13:10:31 -0600
From: MathAction (billpage)
To: MathAction
Subject: [FrontPage] same font on all pages?

The font style is easily changed.

I changed the style so that the same font (verdana, arial,
helvetica, sans-serif in order of preference) is used on
all pages?

Does everyone agree that this looks better? Or does anyone
have another suggestion for choice of fonts?

\start
Date: 16 Dec 2005 14:40:26 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

Greetings!

With current cvs 2.6.8pre, I just took your patch, and changed the
GCLVERSION to gcl-system in both Makefile and Makefile.pamphlet.  Then
I pointed the PATH to ~/gcl-2.6.8pre/bin:$PATH, set the AXIOM env
variable as you instructed, and make AWK=awk.

I get down to the following:

tangling xpoly.spad.pamphlet to xpoly.spad
tangling ystream.spad.pamphlet to ystream.spad
tangling zerodim.spad.pamphlet to zerodim.spad
make[3]: *** No rule to make target `/Users/camm/axiom/int/algebra/ABELGRP.o', needed by `src'.  Stop.
make[2]: *** [algebradir] Error 2
make[1]: *** [srcdir] Error 2
make: *** [all] Error 2


Above this I see:

start address -T 0xc30f80 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cattable.o
Loading /Users/camm/axiom/obj/MACOSX/interp/cformat.o
start address -T 0xccf500 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cformat.o
Loading /Users/camm/axiom/obj/MACOSX/interp/cfuns.o
start address -T 0xc41880 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cfuns.o
Loading /Users/camm/axiom/obj/MACOSX/interp/clam.o
start address -T 0xc5d580 Finished loading /Users/camm/axiom/obj/MACOSX/interp/clam.o
Loading /Users/camm/axiom/obj/MACOSX/interp/clammed.o
start address -T 0xc1b000 Finished loading /Users/camm/axiom/obj/MACOSX/interp/clammed.o
Loading /Users/camm/axiom/obj/MACOSX/interp/comp.o
start address -T 0xc56fe0 Finished loading /Users/camm/axiom/obj/MACOSX/interp/comp.o


I also did a build with my debian patches on top of yours, and got
further, down to

      IntegerLinearDependence 
   Loading /Users/camm/axiom/int/algebra/ZMOD.NRLIB/code for domain 
      IntegerMod 

"building browse.daase" 
"building category.daase" 
"building interp.daase" 
Value = 0
(1) -> 5 making /Users/camm/axiom/mnt/MACOSX/bin/asq from /Users/camm/axiom/obj/MACOSX/etc/asq.c
4 making /Users/camm/axiom/mnt/MACOSX/bin/asq from /Users/camm/axiom/obj/MACOSX/etc/asq.c
2 making /Users/camm/axiom/mnt/MACOSX/lib/summary from /Users/camm/axiom/src/etc/summary
3 making /Users/camm/axiom/mnt/MACOSX/lib/copyright from /Users/camm/axiom/src/etc/copyright
1 making /Users/camm/axiom/mnt/MACOSX/bin/axiom from /Users/camm/axiom/src/etc/axiom
6 finished /Users/camm/axiom/src/etc
6 making /Users/camm/axiom/src/clef/Makefile from /Users/camm/axiom/src/clef/Makefile.pamphlet
5 making /Users/camm/axiom/src/clef
2 making /Users/camm/axiom/obj/MACOSX/clef/edible.c from /Users/camm/axiom/src/clef/edible.c.pamphlet
3 making /Users/camm/axiom/obj/MACOSX/clef/edible.o from /Users/camm/axiom/obj/MACOSX/clef/edible.c
edible.c: In function 'main':
edible.c:182: warning: implicit declaration of function 'fork'
edible.c:191: warning: implicit declaration of function 'setsid'
edible.c:198: warning: implicit declaration of function 'dup2'
edible.c:209: warning: implicit declaration of function 'close'
edible.c:224: warning: implicit declaration of function 'execvp'
edible.c:234: warning: implicit declaration of function 'execlp'
edible.c:234: warning: incompatible implicit declaration of built-in function 'execlp'
edible.c:234: warning: missing sentinel in function call
edible.c:247: warning: implicit declaration of function 'getppid'
edible.c:299: warning: implicit declaration of function 'read'
edible.c:310: warning: implicit declaration of function 'write'
edible.c: In function 'hangup_handler':
edible.c:399: warning: implicit declaration of function 'kill'
edible.c:408: warning: implicit declaration of function 'unlink'
edible.c: In function 'alarm_handler':
edible.c:501: warning: implicit declaration of function 'alarm'
1 linking clef
5 making /Users/camm/axiom/mnt/MACOSX/doc/src/clef/axiom.sty from /Users/camm/axiom/src/doc/axiom.sty.pamphlet
4 making /Users/camm/axiom/mnt/MACOSX/doc/src/clef/edible.c.dvi from /Users/camm/axiom/src/clef/edible.c.pamphlet
6 finished /Users/camm/axiom/src/clef
42 making /Users/camm/axiom/src/doc/Makefile from /Users/camm/axiom/src/doc/Makefile.pamphlet
41 making /Users/camm/axiom/src/doc
1 making /Users/camm/axiom/int/doc/axiom.bib from /Users/camm/axiom/src/doc/axiom.bib.pamphlet
3 making /Users/camm/axiom/mnt/MACOSX/doc/DeveloperNotes.dvi from /Users/camm/axiom/src/doc/DeveloperNotes.pamphlet
The root module <<*>> was not defined.
4 making /Users/camm/axiom/mnt/MACOSX/doc/book.dvi from /Users/camm/axiom/src/doc/book.pamphlet
/bin/sh: line 1: [: too many arguments
5 building /Users/camm/axiom/mnt/MACOSX/doc/Rosetta.dvi from /Users/camm/axiom/src/doc/Rosetta.pamphlet
/bin/sh: line 1: [: too many arguments
8 making /Users/camm/axiom/int/booklet.c from /Users/camm/axiom/src/doc/booklet.c.pamphlet
7 making /Users/camm/axiom/int/doc/booklet.o from /Users/camm/axiom/int/booklet.c
/Users/camm/axiom/int/booklet.c: In function 'url_dispatch':
/Users/camm/axiom/int/booklet.c:58: warning: pointer targets in passing argument 1 of 'strncmp' differ in signedness
/Users/camm/axiom/int/booklet.c:59: warning: pointer targets in passing argument 2 of 'recursive_parsing' differ in signedness
6 making /Users/camm/axiom/mnt/MACOSX/bin/booklet from /Users/camm/axiom/int/doc/booklet.o
9 finished /Users/camm/axiom/src/doc
46 making /Users/camm/axiom/src/graph/Makefile from /Users/camm/axiom/src/graph/Makefile.pamphlet
45 making /Users/camm/axiom/src/graph
2 making /Users/camm/axiom/src/graph/viewman/Makefile from /Users/camm/axiom/src/graph/viewman/Makefile.pamphlet
1 making /Users/camm/axiom/src/graph/viewman
2 /Users/camm/axiom/int/graph/viewman/viewman.c from /Users/camm/axiom/src/graph/viewman/viewman.c.pamphlet
3 making /Users/camm/axiom/obj/MACOSX/graph/viewman/viewman.o from /Users/camm/axiom/int/graph/viewman/viewman.c
/Users/camm/axiom/int/graph/viewman/viewman.c: In function 'main':
/Users/camm/axiom/int/graph/viewman/viewman.c:106: error: 'SIGCLD' undeclared (first use in this function)
/Users/camm/axiom/int/graph/viewman/viewman.c:106: error: (Each undeclared identifier is reported only once
/Users/camm/axiom/int/graph/viewman/viewman.c:106: error: for each function it appears in.)
/Users/camm/axiom/int/graph/viewman/viewman.c:171: warning: implicit declaration of function 'write'
make[4]: *** [/Users/camm/axiom/obj/MACOSX/graph/viewman/viewman.o] Error 1
make[3]: *** [viewmandir] Error 2
make[2]: *** [graphdir] Error 2
make[1]: *** [srcdir] Error 2
make: *** [all] Error 2


Anything else I should try to reproduce your error?

Take care,

Tim Daly writes:

> i took your suggestion and rewrote plttest.c to add the line:
> 
> long findstring(char *a, char *b);
> 
> but it had no effect. 
> 
> when you built axiom did you modify the makefiles to use 
> GCLVERSION=gcl-2.6.8pre
> 
> or did you build the lisp by hand and copy it over?
> or did you use your debian mod and compiler::link?

\start
Date: Fri, 16 Dec 2005 17:04:41 -0500
From: Bill Page
To: Martin Rubey
Subject: RE: Basic Algebra Hierarchy

On December 16, 2005 11:01 AM Martin Rubey wrote:
> 
> Why is there a link from Algebra to CharacteristicNonZero ?
> 

% asq -cc Algebra

says:

      (Join
        (Ring)
        (Module t#1)
        (CATEGORY domain
          (SIGNATURE coerce
            ($ t#1))))

So I think the link to CharacteristicNonZero is an error.

Note: The same error occurs on the front endpaper of the
original Axiom book.

\start
Date: Fri, 16 Dec 2005 16:35:44 -0600
From: Jay Belanger
To: list
Subject: Re: This sentence is not a Lie


Cliff Yapp writes:
...
>> Also, I seem to recall seeing a package to do Lie symmetry
>> analysis of PDEs in Axiom, but I can't come across it again.
>> (Googling "Axiom" and anything mathematical doesn't always
>> give results about the CAS.) What, if anything, is out there?
>
> Maybe you are thinking of JET?
> http://www.iwr.uni-heidelberg.de/groups/compalg/seiler/Papers/HTML/Axiom.html

No; I'll look around some more for what I was thinking of.

> If so, good news - the author of the JET environment recently gave me
> permission to release an older version of his code he was able to
> locate!

That is good news!  I've helped Werner a bit (a very little bit) with
his PDE stuff for MuPAD, it'll be nice to have something similar for
Axiom. 

> I'll try and get that code uploaded tomorrow, maybe on the Axiom wiki
> if I can find a good place.  This code isn't any kind of pamphlet file
> and I have no documentation to turn it into one, but it's a start.

I'll look at it when it gets up.
Also, that reminds me, I really need to learn noweb about now.

\start
Date: Sat, 17 Dec 2005 00:10:35 +0100
From: Michel Lavaud
To: list
Subject: Re: [AxiomProgramming] (new) This is a stub.

Hello,

On 16 Dec 2005 at 4:00, kratt6 wrote:

> Changes http://wiki.axiom-developer.org/AxiomProgramming/diff
> --
> Axiom's programming languages
>   LaTeX
> 
>     is the language we use for "documenting":LiterateProgramming
>     everything.

LaTeX is not a language, it is a library of commands. TeX is the language.

\start
Date: 16 Dec 2005 18:47:52 -0500
From: Camm Maguire
To: Paulo Jabardo
Subject: Re: [Gcl-devel] Problems compiling gcl-2.6.7 on ia64
Cc: list, gcl-devel@gnu.org

Greetings!  Please keep in mind the alternate build instructions for
axiom on this platform (no native object relocation in GCL).

Take care,

Paulo Jabardo writes:

> Thanks, it worked fine. Now I will try to compile axiom with this version
> Paulo Jabardo
> Camm Maguire escreveu:
>
>           Greetings!
>      I believe this is fixed in 2.6.8pre (cvs branch Version_2_6_8pre), s=
oon to be released as 2.6.8.
>      My recommendation:
>      export CVSROOT=:pserver:anonymous@cvs.sv.gnu.org:/sources/gcl cvs =
-z9 -q co -d gcl-2.6.8pre -r Version_2_6_8pre gcl cd gcl-2.6.8pre
>      && ./configure && make
>      Please let me know if problems persist.
>      Take care,
>      Paulo Jabardo @yahoo.com.br=""> writes:
>      > I get an error when compiling gcl-2.6.7 on an ia64 > with Linux (S=
uSe 9.3).  > > Thanks > > Paulo > > > The error messages are as
>      follows: > > make[1]: Leaving directory > `/home/pjabardo/misc/lang/=
lisp/gcl-2.6.7/o' > cd unixport && make saved_pre_gcl > ls:
>      ../lsp/*.o: No such file or directory > ls: ../cmpnew/*.o: No such f=
ile or directory > ls: ../mod/*.o: No such file or directory >
>      ls: ../pcl/*.o: No such file or directory > ls: ../clcs/*.o: No such=
 file or directory > ls: ../clcs/clcs_*.lisp: No such file or
>      directory > make[1]: Entering directory > `/home/pjabardo/misc/lang/=
lisp/gcl-2.6.7/unixport' > touch raw_pre_gcl_map > gcc -o
>      raw_pre_gcl \ > -L. -Wl,-Map raw_pre_gcl_map -lpre_gcl -lm > -lgmp -=
ldl -rdynamic -lreadline -lncurses -lc -lgclp >
>      ./libpre_gcl.a(regexpr.o)(.text+0x1dd2): In function > `fSstring_mat=
ch_static': > : undefined reference to `fScompile_regexp' >
>      collect2: ld returned 1 exit status > make[1]: *** [raw_pre_gcl] Err=
or 1 > make[1]: Leaving directory >
>      `/home/pjabardo/misc/lang/lisp/gcl-2.6.7/unixport' > make: *** [unix=
port/saved_pre_gcl] Error 2 > > > > > > > > > >
>      _______________________________________________________ > Yahoo! doc=
e lar. Fa=E7a do Yahoo! sua homepage.  >
>      http://br.yahoo.com/homepageset.html > > > > _______________________=
________________________ > Gcl-devel mailing list >
>      Gcl-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/gcl-devel =
> > >
>      -- Camm Maguire Camm Maguire ============
==========================
==========================
============= "The earth is but one
>      country, and mankind its citizens." -- Baha'u'llah
>
>
>
>
> -------------------------------------------------------------------------=
---------------------------------------------------------------------
>
> Yahoo! doce lar. Fa=E7a do Yahoo! sua homepage.

\start
Date: Fri, 16 Dec 2005 19:49:24 -0500
From: Tim Daly
To: Ralf Hemmecke
Subject: re: this is open source

> As simple as possible: Axiom has a kernel in written in C or LISP and 
> the rest is Aldor. Bill, would you consider that too simple?

AARRGGGHHH! C is one of the most non-portable languages I know.
an #ifdef here, an #ifdef there, here a #else, there #define,
under there 3 #includes with 17 subincludes, long, long long,
double long, uint_64, spanned doubles, ....

i've spent half my life moving C programs around and i just spent a
few days this past week moving 30 year old C programs to the MAC.
Half a million lines of lisp code move without one #+ or compiler
conditional. 500 lines of C take 3 days. Only the axiom C code
won't work on windows.

porting code has been a very large percentage of my professional life
and C has been the largest pain. The only issues I run into with lisp
is changing dialects (maclisp -> vmlisp -> common lisp) but now that
common lisp is widely avaiable as a standard language the porting 
issues have evaporated.

and you couldn't do axiom in C anyway. show me a C program that reads
data, creates a C program, compiles it, links it, and runs it to call
other C programs.... or one that can do a closure over the stack. and
not just in principle but in practice.

please, no more C code.

\start
Date: Sat, 17 Dec 2005 01:37:39 +0100
From: Michel Lavaud
To: list
Subject: Re: [FrontPage] same font on all pages?

<?xml  version="1.0" ?><html>
<head>
<title></title>
</head>
<body>
<div align="left"><font face="Arial"><span style="font-size:10pt">He=
llo Bill,</span></font></div>
<div align="left"><br/></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">On=
 16 Dec 2005 at 13:10, billpage wrote:</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; Changes http://wiki.axiom-developer.org/FrontPage/dif=
f</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; --</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; The font style is easily changed.</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; I changed the style so that the same font (verdana, a=
rial,</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; helvetica, sans-serif in order of preference) is used=
 on</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; all pages?</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; Does everyone agree that this looks better? Or does a=
nyone</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; have another suggestion for choice of fonts?</span></=
font></div>
<div align="left"><br/></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Ve=
ry nice and very readable, great !</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt"> I=
 have only a concern for French people : in the upper corner of the Home p=
age, I see 
&quot;derni?re ?dition il y a 4 heures par billpage&quot;, i.e. e with gra=
ve accent and e with acute 
accent are replaced by question mark. And in all other pages, I have the s=
ame phrase 
&quot;derni?re ?dition il y a ....&quot;</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Of=
 course, this is absolutely not important by itself, but I think it would =
be nevertheless 
important to correct it, because it could be misleading for beginning Fren=
ch users and 
could lead to incorrect display of some pages. Indeed, if I connect for th=
e first time and I 
see a part in French, but with question marks instead of accented letters,=
 the first 
reaction is to correct the encoding and to select &quot;Encodage des carac=
teres = occidental 
ISO 8859-1&quot;. And now I get the correct accented characters in the sma=
ll part in French, 
and the rest of the text in English is correct, so I am happy in a beautif=
ul multilingual 
world :-)</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Bu=
t if I go to the page http://wiki.axiom-developer.org/MathematicalAlgorith=
ms</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(a=
nd this is quite probable that&#160; I will go, since it is the first link=
 of the first sentence of the 
Home page :-)&#160; I see once again question marks in the upper corner, a=
nd&#160; I see also 
after &quot;math.e.mat.i.cal&quot; in parenthesis (supposed to be the pron=
unciation ?) other strange 
characters - the characters &quot;a&quot; and &quot;i&quot; with u accent =
on them, and question marks inside 
the word. So, the natural reaction again is to change encoding to ISO 8859=
-1. Then the 
upper part recovers French accents, and there appears a different display =
in 
parentheses for the pronunciation, with another set of strange characters.=
</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">So=
, what is the correct one ? The first one, the second one or none? </span>=
</font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Of=
 course, once again this is not at all important, as it is just a comment.=
 But it might be 
more annoying for more important information, or if (some day) MathAction =
would use 
jsmath or other fonts for math formulas ? I see from the the source code o=
f the pages 
that they use UTF-8 encoding, so I would suppose it would require just a s=
mall 
modification of the configuration of Plone for French on the server, writi=
ng accented 
letters in Unicode or something like that ? Or is it more complicated, and=
 there is also 
something to configure on the local machines ?</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Be=
st wishes,</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Mi=
chel.Lavaud@univ-orleans.fr</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">ht=
tp://www.univ-orleans.fr/EXT/ASTEX</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">ft=
p://ftp.univ-orleans.fr/pub/tex/PC/AsTeX</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">li=
ste de discussion: astex@univ-orleans.fr</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Ab=
onnement &#224; la liste: envoyer un message de contenu</span></font></div=
>
<div align="left"><font face="Arial"><span style="font-size:10pt">&q=
uot;sub astex Nom Prenom Etablissement&quot; &#224; sympa@univ-orleans.fr<=
/span></font></div>
<div align="left"></div>
</body>
</html>

\start
Date: Sat, 17 Dec 2005 02:04:59 +0100
From: Michel Lavaud
To: Bill Page
Subject: RE: Axiom guidance

Hello Bill,

On 16 Dec 2005 at 10:16, Bill Page wrote:

> web site. What we need most I think is for someone to explicitly
> take on the task of helping to maintain and develop the FAQ.
> It is easy for anyone who has a browser to do this from anywhere
> in the world.

Yes, I believe you, but it is not so easy for non English-speaking
people = to modify texts in English, as one (well, at least me :-) is
always frightened to introduce b= ad syntax, incorrect words so that
"improving" might appear "corrupting" to English-s= peaking readers
(even if the scientific contents is improved). BTW, is it possible=
easily with Plone to have bi(multi-)lingual pages, for example so that
one could switch from= English to French by clicking on a flag or
button in the current page ? This could so= lve partly the problem,
maybe?

\start
Date: Fri, 16 Dec 2005 18:37:22 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Papers on Axiom

Well, here's some sort of NAG/PDE work with Axiom:

http://www.cs.bath.ac.uk/~wn/Papers/symbInterface2.ps

and another Axiom related paper:

http://www.cs.bath.ac.uk/~wn/Papers/monteCarCat3.ps

Can't read them since I have no postscript viewer available, so I dunno
how good they might be :-/.  Is that first one what you were thinking
of by any chance Jay?

\start
Date: 17 Dec 2005 09:30:50 +0100
From: Martin Rubey
To: Bill Page
Subject: re: Local MathAction

Dear Bill,

> > I would be happy to have a local copy of all the information on my
> > computer.
> 
> I think that is an **excellect** question! 

you do realize that I asked for a snapshot of the contents of MathAction
already several times?

\start
Date: Sat, 17 Dec 2005 08:45:42 -0500
From: Bill Page
To: Martin Rubey
Subject: re: Local MathAction

Martin,

On December 17, 2005 3:31 AM you wrote:
> 
> > > I would be happy to have a local copy of all the information
> > > on my computer.
> > 
> > I think that is an **excellect** question! 
> 
> you do realize that I asked for a snapshot of the contents of 
> MathAction already several times?
> 

I did not know what you meant by "snapshot". I don't think
it is possible simply to take a snapshot of a wiki. It is
necessary to install all of the associated software in order
to view the contents.

I would be glad to help you do this.

\start
Date: Sat, 17 Dec 2005 19:40:28 +0100
From: Michel Lavaud
To: list
Subject: (Fwd)  Some news about MuPAD

Hello,

As there was interest about MuPAD on this list, I forward a message I 
received from Benno Fuchssteiner, for the latest news.

Best wishes

------- Forwarded message follows -------
Date sent:      	Sat, 17 Dec 2005 18:03:56 +0100
To:             	monitor@fuchssteiner.de
From:           	Benno Fuchssteiner
Subject:        	

Dear MuPAD friend,

At the occasion of the coming holiday season let me give you some
information about the state and the fate of MuPAD.

So far, nothing has changed fundamentally since I put my internet
documentation on the web. Here are some points which might find you
interest:

Fortunately I was able to find the resources for employing my MuPAD
colleagues for the time until end of March. After March the situation
looks very dim, however there are some signs of hope (and I am an
indestructible optimist).

The students of Paderborn University have started a campaign in order
to support MuPAD, which you may find under
<http://savemupad.neoforge.de/>http://savemupad.neoforge.de/ At that
web page they are collecting signatures.  The organizers of that
initiative (who are not personal known to me) however informed me that
they are surprised about the amount of political implications which
have arisen. I do not believe that this action will lead to much
success; however I am extremely grateful about that support since it
certainly helps us to keep up our spirit. I should also say, that my
confidence in the students of  Paderborn University has never wavered.

The German special interest group on computer algebra,  representing 
three of the most prestigious scientific unions, namely GI
(Gesellschaft f=FCr Informatik),  GAMM (Gesellschaft f=FCr Angewandte
Mathematik und Mechanik), and the DMV (Deutsche Mathematiker
Vereinigung)  has written an open letter on behalf of MuPAD to the
authorities of Paderborn University, the  government of
Northrhine-Westfalia and  a number of influential politicians.  So far
there is not yet any success of that action, apart from a mendacious
answer of UPB (Paderborn University).  This answer also was written to
a MuPAD friend who directly intervened with Paderborn University, at
that occasion I asked for permission of UPB to publish that answer on
my Web page, but permission was declined, which I have to take serious
since still I am under thread that UPB will sue me for damage.
However, UPB did not yet sue me for stating on my web page that they
employed criminal methods in order to finish the MuPAD project,
neither did they contradict to that statement yet, although they were
asked by many to contradict or at least to comment on that claim.

Recently in the news section of Heise-Online, a most influential news
service, there was a report on the present difficulties of MuPAD, for
the English version see:

<http://www.heise.de/english/newsticker/news/66442>http://www.heise.de
/english/newsticker/news/66442

To this news service many internet pages are linked, so in the week
after that news appeared more than 350 000 web pages were referring to
that headline.   By the same author an article in CT (Germanys most
prestigious Computer Journal, 440 000 sold copies)   appeared. I am
grateful for these articles which supported my efforts morally,
however knowing the system and realizing that the German public at the
moment is more interesting in other problems, I doubt that there will
be any effect.

Before the last election in our state (in Mai) I was impressed by the
promises of some of the politicians at that time in opposition to the
government. These promises made clear how much would change for 
MuPAD
once the election was won. Well it was, but nothing has happened so
far. However, some of these politicians work hard on fulfilling these
promises but also they are surprised to see how difficult things are
to move once some anonymous administration and bureaucracy has decided
on its course.

Of course, and that is the most important point, we received much
moral support by direct mail from old friends and new users throughout
the world, a fact for which I am very grateful, since it helps to keep
up spirits  when prospect is so grim.  Also, some of these users
convinced their institutions to buy a MuPAD copy, help which also was
welcome.

I will inform you from time to time about the state and eventually I
will put new information on my web page (although I did not definitely
decide on that).

Please accept my best wishes for the coming season and for the best in
2006 and let me thank that so many of you supported MuPAD in the past,
yours sincerely Benno Fuchssteiner

Prof. Dr. Benno Fuchssteiner                      mailto:
benno@fuchssteiner.de Obernheideweg 19                                
  http://mupad.de/ D 33106 Paderborn, Germany

\start
Date: Sat, 17 Dec 2005 14:52:38 -0500
From: Tim Daly
To: Benno Fuchssteiner
Subject: Re: (Fwd)  Some news about MuPAD
Cc: list, Michel Lavaud

Prof. Dr. Fuchssteiner,

I'm Tim Daly, the Axiom Lead Developer. 

Please let me know if there is anything I can do to help
with MuPad and the University situation.

\start
Date: Sun, 18 Dec 2005 03:35:46 +0100
From: Michel Lavaud
To: Tim Daly, Bill Page
Subject: RE: axiom conference funding?

<?xml  version="1.0" ?><html>
<head>
<title></title>
</head>
<body>
<div align="left"><font face="Arial"><span style="font-size:10pt">He=
llo,</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Ar=
e there any news for a future conference? Will it happen in Australia as p=
roposed by 
Mike Thomas, and did funding was asked / obtained for that? If not, and if=
 there is some 
interest, I would like to propose to organize a conference in Orleans (Fra=
nce) in the last 
week of august, like the one happened in Metz (France) 2 years ago, cf.:</=
span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">ht=
tp://2003.rencontresmondiales.org/program/view_topic.php?topic_id=5</spa=
n></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(i=
f the program appears in French, you can get the English version by going =
to home 
page of RMLL2003, then selecting &quot;English&quot; then &quot;Programs&q=
uot; then &quot;program&quot; on the line 
&quot;Free software and research).</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Th=
e idea was to allow researchers that produce free software for scientific =
research to 
meet together and discuss possible collaborations. It was not restricted t=
o Axiom, and 
not even to CAS, as you can see from the program, but I think that one of =
the 
advantages of free software over commercial ones is that we can collaborat=
e, so it might 
be useful to try to use fully this advantage.</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">I =
would propose in addition to invite colleagues from Scilab and MuPAD, as t=
hey do 
excellent work. Moreover, their software is very well known and largely us=
ed in France, 
so that it would probably be easier to get funding for a broad conference =
than for a 
conference restricted to Axiom. There are several conferences on CAS in Fr=
ance each 
year, but mainly on algorithms, not software, and not in Orleans region, s=
o I hope this 
might be doable. Before trying to see if we can get fund, would the Axiom =
community be 
interested in such a conference, despite its broader range ?</span></font>=
</div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Be=
st wishes,</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Mi=
chel</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; On November 19, 2005 12:25 PM Tim Daly (root) wrote:<=
/span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt;</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; C. Y wrote: </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; &gt; Premature question:&#160; Where would it be=
 held?</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; a more reasonable answer is another question:</s=
pan></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; who would be willing to host it.</span></font></=
div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; frankly i think it'd be a lot of fun to rent a b=
each house</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; somewhere and spend 3 days code hacking/designin=
g/lang-wars-ing on</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; the front porch. morning presentations, afternoo=
n debates, evening</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; code hacking. the scratchpad group used to do th=
is in the hamptons,</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; i believe. nobody said a conf HAS to be in a hug=
e building with</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; cinderblock walls.</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; &gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; I don't think it is premature to ask the question of =
location</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; and format. We should also ask when? I was thinking i=
n terms</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; of April or May - roughly one year from the last meet=
ing that</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; was hosted by City College in New York City last year=
.</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; I like Tim's suggestion about the format and location=
 however</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; I would be even more pleased if we could find a venue=
 like</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; this in Europe. Open source Axiom is already supporte=
d by an</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; international group of developers and the Axiom web s=
ite</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; regularly records frequent access to the web site fro=
m more</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; than 80 countries around the world. I think we should=
 try to</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; organize face-to-face meetings in several different p=
arts of</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; the world. But of course we do need a host organizati=
on.</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; I also think that very soon we should advertise for w=
ritten</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; contributions to the Axiom meeting and plan to publis=
h these</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; papers in some manner - perhaps in co-operation with =
a</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; recognized journal. Real publications count for a lot=
 of the</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; people who are potential contributors to Axiom.</span=
></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; Finally, I think we should establish an organizing co=
mmittee.</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; I am certainly willing to be part of such a committee=
. Who</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; else would like to volunteer? Or perhaps you might wi=
sh it</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&gt; nominate someone else?</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">Michel.Lavaud@univ-orleans.fr</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">http://www.univ-orleans.fr/EXT/ASTEX</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">ftp://ftp.univ-orleans.fr/pub/tex/PC/AsTeX</span></font></=
div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">liste de discussion: astex@univ-orleans.fr</span></font></=
div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">Abonnement &#224; la liste: envoyer un message de contenu<=
/span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="=
font-size:10pt">&quot;sub astex Nom Prenom Etablissement&quot; &#224; symp=
a@univ-orleans.fr</span></font></div>
<div align="left"></div>
</body>
</html>

\start
Date: Sun, 18 Dec 2005 01:03:26 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: axiom conference funding?

On December 17, 2005 9:36 PM Michel Lavaud

> Are there any news for a future conference? Will it happen
> in Australia as proposed by Mike Thomas, and did funding was
> asked / obtained for that?

I think there is no progress beyond just the suggestion.

> If not, and if there is some interest, I would like to propose
> to organize a conference in Orleans (France) in the last week
> of august, like the one happened in Metz (France) 2 years ago,
> ...

I think this is a good proposal. Thank you for the suggestion.

> Before trying to see if we can get fund, would the Axiom community
> be interested in such a conference, despite its broader range ?

I am very interested in such a conference. If the duration of
the conference is long enough, then I think there can be some
sessions devoted just to Axiom. But I also think that it is
good to discuss Axiom in the context of a more general conference
because this allows Axiom to be more visible to other people who
might not otherwise have the time or sufficient motivation to
attend an Axiom-only meeting.

Note: There is a web page on the Axiom Wiki where some notes
about the next Axiom meeting are collected. Please feel free
to update it.

http://wiki.axiom-developer.org/NextAxiomMeeting

Here also is a short report from the last meeting:

http://wiki.axiom-developer.org/AxiomMeeting2005

\start
Date: Sun, 18 Dec 2005 00:16:41 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [build Axiom] Re: noting a change in Savannah setup

On 2005-12-17 Ed Borasky wrote:

> > You can download the source as a tarball in AxiomDownload or
> > download the source tree via CVS::
> > export CVS_RSH="ssh"
> > cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/axiom co axiom
>
> This has stopped working ... the Savannah folks moved some things around

According to the page:

http://savannah.nongnu.org/cvs/?group=axiom

the correct command for anonymous cvs is now::

  export CVS_RSH="ssh"
  cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/axiom co axiom

Can you confirm that this works?

\start
Date: Sun, 18 Dec 2005 02:10:14 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: Axiom guidance

On December 16, 2005 8:05 PM Michel Lavaud wrote:

> ... it is not so easy for non English-speaking people to
> modify texts in English, as one (well, at least me :-) is
> always frightened to introduce bad syntax, incorrect words
> so that "improving" might appear "corrupting" to English-
> speaking readers (even if the scientific contents is
> improved).

My opinion is that it is highest priority to improve the
scientific contents even if the quality of the English is not
perfect. You will notice that even though English is my first
language, I still manage occasionally to introduce bad syntax
and incorrect words. :) Please do not let that stop you from
making improvements to the content. If there is some concern
then someone else can make improvements to your English.

> BTW, is it possible easily with Plone to have bi(multi-)lingual
> pages, for example so that one could switch from English to 
> French by clicking on a flag or button in the current page ? 

Yes this is possible in Plone. Plone has a feature called I18N
support which enables correct translations of fixed text such
as menus and headings as well as multi-lingual documents, i.e.
one document that appears in multiple versions - one version
for each language. The version shown to the user depends on
the language setting of the browser.

http://www.contentmanagementsoftware.info/plone/I18NLayer
http://www.contentmanagementsoftware.info/plone/I18NFolder
http://www.contentmanagementsoftware.info/plone/LinguaPlone

> This could solve partly the problem, maybe?

Yes. The axiom-developer.org sever has two different websites
that support Axiom: one is called the Axiom Wiki and it is based
only on Zope and ZWiki (with extensions for LaTeX and Axiom).
The Axiom Wiki has only limited support for translations of some
of the fixed text such as menus and headings.

http://wiki.axiom-developer.org

The other website is called the Axiom Portal and it is based on
Plone and Zwiki (with the same extensions).

http://portal.axiom-developer.org

Right now the I18N product for Plone have not yet been installed.
But if you or anyone else would like to experiment with multi-
lingual documents on the Axiom Portal, I would be glad to install
the I18N package. I would also be happy to try to contribute to
such documents.

\start
Date: Sun, 18 Dec 2005 02:36:51 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: [FrontPage] same font on all pages?

On December 16, 2005 7:38 PM Michel Lavaud wrote:

> I have only a concern for French people : in the upper
> corner of the Home page, I see "derni?re ?dition il y
> a 4 heures par billpage", i.e. e with grave accent and e
> with acute accent are replaced by question mark. And in
> all other pages, I have the same phrase "derni?re ?dition
> il y a ...."
>
> Of course, this is absolutely not important by itself, but
> I think it would be nevertheless important to correct
> it, because it could be misleading for beginning French
> users and could lead to incorrect display of some pages.
> Indeed, if I connect for the first time and I see a part in
> French, but with question marks instead of accented letters,
> the first reaction is to correct the encoding and to select
> "Encodage des caracteres = occidental ISO 8859-1". And now
> I get the correct accented characters in the small part in
> French, and the rest of the text in English is correct, so
> I am happy in a beautiful multilingual world :-)

I agree that this is important. But this is not so easy
because it seems the world is not so multilingual (yet) as
it should be...

The correct encoding is uft-8 as the html source code says.
But there seems to be some problem with the encoding of the
translated fixed text.

> Of course, once again this is not at all important, as it is
> just a comment. But it might be more annoying for more important
> information, or if (some day) MathAction would use jsmath or
> other fonts for math formulas ? I see from the source code
> of the pages that they use UTF-8 encoding, so I would suppose
> it would require just a small modification of the configuration
> of Plone for French on the server, writing accented letters in
> Unicode or something like that?

Yes, I think you are correct. Note however that the Axiom Wiki
does not use Plone, as such. Plone is used only for the Axiom
Portal. The Axiom Wiki is based on Zwiki.

I have found the file in ZWiki that contains this text, but to
my surprise the encoding in the file seems to be correctly
written in utf-8, yet when it appears on the web page it is
clearly iso-8859-1. So perhaps this is a more subtle problem
of incorrect re-encoding. I will continue to look for a solution.

BTW I notice that this also happens in other languages that use
accents such as German.

> Or is it more complicated, and there is also something to
> configure on the local machines?

No, the only setting on the local machine is the language
setting of the browser. The rest should be automatic.

\start
Date: Sun, 18 Dec 2005 12:30:47 -0500
From: Eitan Gurari
To: Martin Rubey
Subject: RE: tex4ht and jsmath

Dear all,

I have much of the core work done to configure tex4ht to output
ams/la/tex dialects for math.  I'm stuck with the jsmath tex side due
to a lack of a testing environment, because I'm failing somewhere to
correctly deal with the jsmath software requirements.

Specifically,  when I point a firefox mozilla browser from a mac or ms
pc to the sample files

     http://www.math.union.edu/~dpvc/jsMath/examples/welcome.html

of the jsmath distribution I get (impressive) rendering of the
content.  On the other hand, when I try my file

    http://www.cse.ohio-state.edu/~gurari/temp/jstest.html

I just get a display of the source `{a}^{b}' without redering for the
visual effect.  My installed jsmath files can be reviwed at

    http://www.cse.ohio-state.edu/~gurari/temp/js.txt

The jsamth examples use the code `jsMath.Process(document);'. The
instructions ask for the code `jsMath.Process();'.  I tried both.

I wonder whether I can get help resolving this problem.

Martin Rubey writes:
 > Dear Bill, Dear Eitan,
 > 
 > Page, Bill writes:
 >  > Eitan
 >  > 
 >  > On Thursday, October 20, 2005 1:37 AM you wrote:
 >  > > 
 >  > > I'll provide a jsmath mode. Probably during the winter break.  Maybe
 >  > > before that.
 > 
 > This would be wonderful!

\start
Date: Sun, 18 Dec 2005 11:45:53 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [#238 displaymath environment gives LaTeX error] (new) 

Unnumbered equations can be written according to the amstex extension::

 !\begin{equation*}
 ...
 \end{equation*}

but the base LaTeX environment::

 !\begin{displaymath}
 ...
 \end{displaymath}

does not work.

Originally reported by Michel Lavaud on December 18, 2005 8:08 AM.

\start
Date: Sun, 18 Dec 2005 13:01:09 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: Bug in LaTeX page on MathAction

On December 18, 2005 8:08 AM Michel Lavaud wrote:
>...
> Bill Page wrote:
> > In this case I changed the {displaymath} to {equation*} and
> > the page works again. I do not know the correct rule about
> > when to use {displaymath} or {equation*} in LaTeX. Are they
> > exactly the same?
> 
> displaymath is defined in the "LaTeX de base", equation* is 
> defined in the amstex extension for LaTeX. So equation* ought
> to make an error if compiled with LaTeX de base (i.e. without
> any \usepackage in the preamble of the document), displaymath
> ought to make no error.

Ok, that is clear and I see why displaymath is preferred. I
will submit this as an bug report in IssueTracker and as time
permits, I will see if there is a solution. See Issue #238.

> ...
> I had the feeling that the whole page was compiled by
> LaTeX, but in fact it seems it is only formulas and what
> is inside of a finite set of environments, defined in a
> table internal to the wiki software, is it?

Yes that is correct. The original LaTeXWiki extension of ZWiki
that was developed by Bob McElrath implemented two special
"page types" in ZWiki that have the ability to process a
finite set of LaTeX constructs and display them as an image
in an HTML page. The two types are HTML+LaTeX and Structured
Text+LaTeX.

The extensions that I made provided an additional "pseudo-
environment" written:

\begin{axiom}
...
\end{axiom}

and now also {spad}, {aldor}, {boot}, {lisp} and {reduce},
which are not really processed by LaTeX at all but which
produce output which include the original LaTeX constructs -
specifically equations and symbols.

Most recently I implemented a new page type called "Pamphlet"
which combines the ability to process a full LaTeX document
(more more generally, a file in Axiom pamphlet format which
includes noeb literate programming code chunks) which can be
displayed in 'pdf', 'dvi', or 'ps' format. The pamphlet page
type is also compatible with the older StructuredText+LaTeX
format.

> 
> Just for the sake of curiosity (and it the answer takes only 
> a few lines) : did you try to use the software used in
> planetmath?

I did not know about this website when I designed MathAction.

> And if yes, what reasons led you to use wiki rather than this
> software? As far as I remember, it uses TeX everywhere, and
> the accompanying document comparing it to wiki software 
> seemed very interesting to me. This software ought to avoid 
> such problems, in the same way as TeX4ht avoids them by making
> use of TeX rather than finite conversion tables, as other LaTeX
> to html converters (I repeat it is just for the sake of curiosity,
> I do not suggest to switch from wiki software to planetmath
> software just because wiki did not deal with displaymath :-)
> 

I understand. Thankyou for the reference. I will more closely
at PlanetMath and the associated software.

\start
Date: Sun, 18 Dec 2005 14:12:39 -0500
From: Tim Daly
To: Eitan Gurari
Subject: re: tex4ht and jsmath

Just saw planetmath.org.
interesting site.
must be some way to collaborate with them from axiom.

\start
Date: Sun, 18 Dec 2005 15:26:08 -0500
From: Eitan Gurari
To: Tim Daly
Subject: re: tex4ht and jsmath

Tim, If collaboration refers to how pages are created, then please
note that the planetmath.org site uses the LaTeX2HTML tool for
translating latex into html.  LaTeX2HTML uses a different approach
than tex4ht for translating latex into hypertext, and I do think the
axiom people should consider the option of using LaTeX2HTML instead of
tex4ht. -eitan

 > Just saw planetmath.org.
 > interesting site.
 > must be some way to collaborate with them from axiom.

\start
Date: Sun, 18 Dec 2005 14:36:44 -0600
From: MathAction (unknown)
To: MathAction
Subject: [AxiomDownload] Axiom RPMs do not install on Fedora Core 3

# I'm running a Fedora Core 3 system, fairly up-to-date.
# I got the RPMs:
djg:~/axiom/rpm:$ ls -1 *.rpm
axiom-20050901-3.i386.rpm
axiom-databases-20050901-3.noarch.rpm
axiom-doc-20050901-3.noarch.rpm
axiom-graphics-20050901-3.i386.rpm
axiom-graphics-data-20050901-3.noarch.rpm
axiom-hypertex-20050901-3.i386.rpm
axiom-hypertex-data-20050901-3.noarch.rpm
axiom-source-20050901-3.noarch.rpm
axiom-test-20050901-3.noarch.rpm
axiom-tex-20050901-3.noarch.rpm
djg:~/axiom/rpm:$ sudo rpm -Uvh *.rpm
Password:
error: Failed dependencies:
        libreadline.so.5 is needed by axiom-20050901-3.i386
djg:~/axiom/rpm:$ rpm -q readline
readline-4.3-13
djg:~/axiom/rpm:$ rpm -q readline --provides
libhistory.so.4
libreadline.so.4
readline = 4.3-13
djg:~/axiom/rpm:$
# Looking around, I find that lots of packages require libreadline.so.4,
# but there is no mention of libreadline.so.{1,2,3,5}.
# I'll try the source.

# D.J.Griffiths

\start
Date: Sun, 18 Dec 2005 15:50:30 -0500
From: Bill Page
To: Eitan Gurari
Subject: re: tex4ht and jsmath

Eitan,

On December 18, 2005 3:26 PM you wrote:

> ...
> LaTeX2HTML uses a different approach than tex4ht for translating
> latex into hypertext, and I do think the axiom people should
> consider the option of using LaTeX2HTML instead of tex4ht.

Could you please explain why you think we should consider LaTeX2HTML
instead of tex4ht? It seems to me that tex4ht supports more LaTeX
then LaTeX2HTML in a more flexible manner. As the author of tex4ht
do you see some inherent limitation that is not obvious to me?

\start
Date: Sun, 18 Dec 2005 16:54:25 -0500
From: Eitan Gurari
To: Bill Page
Subject: re: tex4ht and jsmath

 > > LaTeX2HTML uses a different approach than tex4ht for translating
 > > latex into hypertext, and I do think the axiom people should
 > > consider the option of using LaTeX2HTML instead of tex4ht.
 > 
 > Could you please explain why you think we should consider LaTeX2HTML
 > instead of tex4ht? It seems to me that tex4ht supports more LaTeX
 > then LaTeX2HTML in a more flexible manner. As the author of tex4ht
 > do you see some inherent limitation that is not obvious to me?

If the interest is to follow the model of planetmath.org with regard
to math representation, then there is no point to start from scratch
with tex4ht.  Instead one might just use their tools.  The
planetmath.org site uses bitmaps for math, and the developers of that
site for reasons I'm not familiar with decided to go with LaTeX2HTML.

My understanding was that some axiom people preferred to use jsmath
instead of mathml or bitmaps, and tex4ht was brought into
consideration to try doing the job.  I believe tex4ht is capable to
provide good outcome.  I successfully roughly tested the approach the
past few days with tex4ht on the testmath.tex file of the amsmath
society for non-normalized latex output.  The outcome can be viewed at

   http://www.cse.ohio-state.edu/~gurari/temp/testmath.html

by inspecting the html source of the file (or employing a text base
editor that shows CDATA sections).  For jsmath the high level math
configurations in use should be replaced with low level tex
configurations that abide to the capabilities of jsmath.  I currently
can't finish this last step because I don't know how to enable jsmath.

\start
Date: Sun, 18 Dec 2005 17:04:30 -0500
From: Bill Page
To: Eitan Gurari
Subject: RE: tex4ht and jsmath

Eitan,

On December 18, 2005 12:31 PM you wrote:
> 
> I have much of the core work done to configure tex4ht to output
> ams/la/tex dialects for math.

Wonderful!

> I'm stuck with the jsmath tex side due to a lack of a testing
> environment, because I'm failing somewhere to correctly deal
> with the jsmath software requirements.
> 
> Specifically,  when I point a firefox mozilla browser from a
> mac or ms pc to the sample files
> 
>    http://www.math.union.edu/~dpvc/jsMath/examples/welcome.html
> 
> of the jsmath distribution I get (impressive) rendering of the
> content.  On the other hand, when I try my file
> 
>     http://www.cse.ohio-state.edu/~gurari/temp/jstest.html
> 
> I just get a display of the source `{a}^{b}' without redering for the
> visual effect.  My installed jsmath files can be reviwed at
> 
>     http://www.cse.ohio-state.edu/~gurari/temp/js.txt
> 
> The jsamth examples use the code `jsMath.Process(document);'. The
> instructions ask for the code `jsMath.Process();'.  I tried both.
> 
> I wonder whether I can get help resolving this problem.
> 

When I try to access:

http://www.cse.ohio-state.edu/~gurari/temp/jsMath/jsMath/jsMath.js

I get a 403:

Forbidden
You don't have permission to access /~gurari/temp/jsMath/jsMath/jsMath.js
on this server.

-------

But if I try that same thing on the jsMath site, e.g.

http://www.math.union.edu/~dpvc/jsMath/examples/Henrici.html

http://www.math.union.edu/~dpvc/jsMath/jsMath/jsMath.js

I see the javascript code as expected.

Maybe you have a configuration problem on your server?
Do you have a suitable alias defined?

\start
Date: Sun, 18 Dec 2005 17:13:18 -0500
From: Bill Page
To: Eitan Gurari
Subject: re: tex4ht and jsmath

Eitan,

Further to your earlier email, here is your example page
loaded on the axiom-developer.org site where I know that
the jsMath directory is accessible:

http://page.axiom-developer.org/jstest.html

It seems to work fine.

Regards,
Bill Page.

On December 18, 2005 5:05 PM Bill Page wrote:
> ... 
> Maybe you have a configuration problem on your server?
> Do you have a suitable alias defined?

\start
Date: Sun, 18 Dec 2005 18:10:31 -0500
From: Eitan Gurari
To: Bill Page
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

Bill, Thanks! I changed the accessible modes to be also executable
besides readable and the rendering now works. -eitan

 > Further to your earlier email, here is your example page
 > loaded on the axiom-developer.org site where I know that
 > the jsMath directory is accessible:
 > 
 > http://page.axiom-developer.org/jstest.html
 > 
 > It seems to work fine.

 > > ... 
 > > Maybe you have a configuration problem on your server?
 > > Do you have a suitable alias defined?

\start
Date: Sun, 18 Dec 2005 18:46:59 -0500
From: Tim Daly
To: Bill Page
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

wow. i must say that i'm really out of my element here but
a few things are apparent.

first, by "cooperation" i meant that i'd like to figure out
how to work with the authors of pages on PlanetMath, perhaps
by setting up links that would contain axiom demonstrations
of some of the math concepts.

second, by "cooperation" i meant that we in the axiom community
use the resources of PlanetMath authors to help us create
documentation for the existing axiom mathematics. 

in order to accomplish these two goals it seems we need to
do some explanation of literate programming to the PlanetMath
community.

third, jsMath clearly seems the way to go. at some point we
can certainly generate jsMath just like we generate tex code
from axiom. perhaps this could be a "summer of code" project.
(added)

fourth, this whole font thing is something i'm going to have to
get a handle on. :-)
 
\start
Date: Sun, 18 Dec 2005 19:20:23 -0500
From: Tim Daly
To: Bill Page
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

Bill,

I installed the fonts per the jsMath home page and all
of their pages render properly.

But http://page.axiom-developer.org/jstest.html 
fails to render with the warning about not finding fonts.

i reinstalled the fonts on both linux and windows but no luck.

\start
Date: Sun, 18 Dec 2005 20:48:09 -0500
From: Tim Daly
To: Bill Page
Subject: jsMath
Cc: Eitan Gurari

well, I downloaded and read jsMath.js

man, THIS guy did a lot of work. i'm impressed.

i see how it works (sort-of, i don't speak javascript).
he has a hack to detect fonts based on size and it
appears that it isn't working on your page but works
on the jsMath page. i haven't figured out why yet as
i have no javascript debugging tools.

\start
Date: Sun, 18 Dec 2005 17:18:03 -0800
From: Bob McElrath
To: Tim Daly
Subject: Re: jsMath
Cc: Eitan Gurari

FYI, 3.0 was just released, including a pile of patches I sent Davide
that help make jsMath XHTML-compatible.

I hope that we can now work on hacking in a MathML backend.

root [Tim Daly] wrote:
> well, I downloaded and read jsMath.js
> 
> man, THIS guy did a lot of work. i'm impressed.
> 
> i see how it works (sort-of, i don't speak javascript).
> he has a hack to detect fonts based on size and it
> appears that it isn't working on your page but works
> on the jsMath page. i haven't figured out why yet as
> i have no javascript debugging tools.

\start
Date: Sun, 18 Dec 2005 21:07:50 -0500
From: Bill Page
To: Tim Daly
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

On December 18, 2005 7:20 PM Tim Daly (root) wrote:
> 
> I installed the fonts per the jsMath home page and all
> of their pages render properly.
> 
> But http://page.axiom-developer.org/jstest.html 
> fails to render with the warning about not finding fonts.
> 
> i reinstalled the fonts on both linux and windows but no
> luck.
> 

It works fine for me on Windows with both FireFox 1.5 and
with Microsoft Explorer.

You must still have a problem with fonts.

What browser and what version of browser are you using?

\start
Date: Sun, 18 Dec 2005 21:17:29 -0500
From: Bill Page
To: Tim Daly
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

On December 18, 2005 6:47 PM Tim Daly (root) wrote:

> 
> third, jsMath clearly seems the way to go. at some point we
> can certainly generate jsMath just like we generate tex code
> from axiom. perhaps this could be a "summer of code" project.
> (added)
> 

I am not sure what you mean by "generate jsMath" since the
language of jsMath is just (a subset of) LaTeX. Axiom already
generates compatible output (with a few minor exceptions) that
can be rendered by jsMath. jsMath is just an alternative to
running LaTeX on the server - instead of rendering LaTeX
equations and symbols as images embedded in HTML, jsMath
allows the LaTeX codinging itself to be embedded in the HTML
and then rendered by the browser on the client workstation.

That is exactly how Kai Kaminski's AxiomUI works already works.
That already was our "summer of code" project, remember? :)

\start
Date: Sun, 18 Dec 2005 21:24:54 -0500
From: Eitan Gurari
To: Bob McElrath
Subject: Re: jsMath

 > FYI, 3.0 was just released, including a pile of patches I sent Davide
 > that help make jsMath XHTML-compatible.

Not yet. The content of the <div class="math">...</div> and <span
class="math">...</span> elements should be enclosed by the delimiters
`<![CDATA[' and ']]>'.  That is, the math entries should look like

     <div class="math"><![CDATA[  ...  ]]></div>

and 

     <span class="math"><![CDATA[ ... ]]></span>

Without such delimiters, the characters &, < , and > of latex make the
code invalid, and make it impossible to validate and post process the
html code and.

\start
Date: Sun, 18 Dec 2005 22:23:48 -0500
From: Tim Daly
To: Bill Page
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

the third point was written before i sat down and read
the jsMath source code. i have a better understanding
of it now. 

i'm WAY behind the curve on the browser-based technologies.
i have been considering the browser as a "front-end" technology
and it is more of a "platform" technology.

it's a very glacial head-shift that's taking me a lot longer to
learn than it should. what is obvious to you is painfully slow
going for me.

i'm having trouble making the shift from "Axiom driving a browser"
to "a browser driving axiom". so i keep searching for an API that
will allow me to "call" the browser, get a canvas, and write to it.
it is slowly dawning on me that this is completely wrong thinking.
unfortunately the only language i CAN find to drive a browser is
javascript. 

we do need to make the wiki technology "local" and get the 
setup process clearly documented. ultimately it should probably 
be just another debian apt-get (or axiom zips-fork :-)

\start
Date: Sun, 18 Dec 2005 22:07:54 -0500
From: Bill Page
To: Tim Daly
Subject: re: tex4ht and jsmath

> -----Original Message-----

Previously you wrote:

> > But http://page.axiom-developer.org/jstest.html 
> > fails to render with the warning about not finding fonts.
> ...
> 
> Firefox 1.0.6
> 

I think FireFox 1.0.6 should work fine. FireFox 1.5 has some
significant improvements especially with MathML, but jsMath does
not require these.

Does Eitan's original link work for you?

http://www.cse.ohio-state.edu/~gurari/temp/jstest.html

The version of jstest.html page on axiom-developer is identical
to Eitan's but the version of jsMath itself on axiom-developer
is the older version. If Eitan's page works but the one on
axiom-developer does not then it might be because you need the
"BaKoMa versions" of the fonts as explained here:

http://www.math.union.edu/~dpvc/jsMath/download/fonts.html

for jsMath v2.x. If this is the case, then don't worry about it
because that version of jsMath is out of date and if/when we
start using jsMath on MathAction, I will update it to the newer
version.

Otherwise you can check the following:

On Windows did you follow **exactly** the instructions here?

http://pubpages.unh.edu/~jsh3/jsMath

especially the instructions to exit the browser and restart?

One way to check that you have the correct fonts installed
is to click Start/ControlPanel/Fonts. You should see the font
cmex10 used by jsmath listed there. If it's not there, try the
procedure in the above link.

\start
Date: Sun, 18 Dec 2005 22:23:57 -0500
From: William Sit
To: Bill Page
Subject: re: tex4ht and jsmath
Cc: Eitan Gurari

Bill Page wrote:
 
> It works fine for me on Windows with both FireFox 1.5 and
> with Microsoft Explorer.

Hi Bill: Unlike Tim, I did not add ANYTHING to my computer except to visit the
page

http://www.math.union.edu/~dpvc/jsMath/examples/Henrici.html

and related links there.  I tried this in Firefox (under Windows XP), got
warning about fonts, and got displays via stored images. Looked nice. I then
tried the same pages in IE and I got the LateX rendered, much slower, but
equally impressive.

I then tried 

http://page.axiom-developer.org/jstest.html

on IE, got a warning box (in red) and a^b. Don't know if that is what is all
there should be.

Then I tried 

http://wiki.axiom-developer.org/jsMathExperiment

in IE, got the same warning box (in red), and the display was ok but not as fine
(like broken square root signs).

Strange thing is: I saved the Struik.html page, and tried it locally, the page
displays but the LaTeX was not rendered. Then I tried the web page original
link, and now it rendered! (and I don't mean using stored images because a
Process ... box with percent running is visible at the lower left corner of the
screen). The Henrici.html also rendered.

This encouraged me to try jsMathExperiment page again. Same result though: red
box and good but not perfect rendering. The page never finished loading (waiting
for wiki.axiom...).
(Saving the page and redo locally displays only the tex.)

Could this be due to the missing "![CDATA[[ ...]]" wrap?

> What browser and what version of browser are you using?

Firefox 1.0 (Windows) and IE 6.0.2900.2180

So I think it is more like a path problem than a font problem. (I have Miktex
installed, but did not do anything to tell IE where these are). It seemed that
by forcing a local display, Firefox finally woke up (I honestly do not know the
reason).

I was quite impressed at the quality of the jsMath rendering and also that I can
resize the window (to very narrow width) and all the math breaks well (even if
they overflowed the line).

Great job, Bill, and thanks to your inexhaustible energy and ideas that improve
the sites (not to mention enliven the debates)!

\start
Date: Sun, 18 Dec 2005 23:17:57 -0500
From: Tim Daly
To: Bill Page
Subject: re: tex4ht and jsmath

http://www.math.union.edu/~dpvc/jsMath/examples all work perfectly

http://www.cse.ohio-state.edu/~gurari/temp/jstest.html fails

i followed the directions on pubpages.unh.edu/~jsh3/jsMath

\start
Date: Sun, 18 Dec 2005 23:04:54 -0500
From: William Sit
To: Bill Page
Subject: re: tex4ht and jsmath

Bill Page wrote (to Tim):

> Does Eitan's original link work for you?
> 
> http://www.cse.ohio-state.edu/~gurari/temp/jstest.html
> 
> The version of jstest.html page on axiom-developer is identical
> to Eitan's but the version of jsMath itself on axiom-developer
> is the older version. 

I (not Tim) got the same: a warning box and then correctly displayed for $a^b$.
Can you describe what should be expected?

> If Eitan's page works but the one on
> axiom-developer does not then it might be because you need the
> "BaKoMa versions" of the fonts as explained here:
> 
> http://www.math.union.edu/~dpvc/jsMath/download/fonts.html
> 
> for jsMath v2.x. If this is the case, then don't worry about it
> because that version of jsMath is out of date and if/when we
> start using jsMath on MathAction, I will update it to the newer
> version.

As indicated in previous email, I did not download these fonts. But I have
Mathematica and Maple installed and so maybe the cmex10 font somewhere there
under Windows ControlPanel/Fonts. My Miktex fonts are in a different drive
partition! But jsMath is working (except for the wiki jsMathExperiment page).
 
> Otherwise you can check the following:
> 
> On Windows did you follow **exactly** the instructions here?
> 
> http://pubpages.unh.edu/~jsh3/jsMath
> 
> especially the instructions to exit the browser and restart?


Not to say you shouldn't try to exit and restart, but for me, that was not
needed.
 
> One way to check that you have the correct fonts installed
> is to click Start/ControlPanel/Fonts. You should see the font
> cmex10 used by jsmath listed there. If it's not there, try the
> procedure in the above link.
 
I have no filename that has cmex10 in that directory. The path (DOS) for Miktex
only points to ../miktex/bin.

Now I downloaded the fonts from above, installed jsMath-cmex fonts in the Fonts
directory of ControlPanel. Same problem with the jsMathExperiment page.

This time the Henrici.html page produced a darker font (I downloaded the
thicker, 25, fonts).

\start
Date: Sun, 18 Dec 2005 23:21:41 -0500
From: Bill Page
To: William Sit
Subject: re: tex4ht and jsmath

On December 18, 2005 11:05 PM William Sit wrote:
>
> Bill Page wrote (to Tim):
>
> > Does Eitan's original link work for you?
> >
> > http://www.cse.ohio-state.edu/~gurari/temp/jstest.html
> >
> > The version of jstest.html page on axiom-developer is identical
> > to Eitan's but the version of jsMath itself on axiom-developer
> > is the older version.
>
> I (not Tim) got the same: a warning box and then correctly
> displayed for $a^b$. Can you describe what should be expected?

Yes you should see exactly they same thing as if you had typed
$a^b$ in LaTeX, processed it and viewed the dvi.

If you have the correct fonts installed, you should not get the
warning box.

\start
Date: Sun, 18 Dec 2005 23:39:05 -0500
From: Bill Page
To: Martin Rubey
Subject: re: Local MathAction

Martin,

I thought a little more about your request and I also saw that
planetmath.org does offer a "static snapshot" download based
on wget. Is this what you meant? If so, you can create such a
snapshot via the command:

  wget --mirror --convert-links --backup-converted \
                        --html-extension \
                        http://wiki.axiom-developer.org

Or, with less typing:

  wget -m -k -K -E http://www.gnu.org

For more information see the wget documentation (man wget
or http://www.gnu.org/software/wget/manual/wget.html)

But you should note that this could take a very long time
depending on the speed of your internet connection!

If this format is what you mean by "snapshot" and you do think
that this would be useful, then we can do the same thing as is
done on planetmath - create a compressed tarball, say once per
week, and provide a link for people to download it. But even
compressed this is likely to be quite large - my guess: about
250 Mbytes. I will let you know once my current download
completes and I create the actual compressed file.

What this would allow people to do is to have a local copy
of all the pages on the Axiom Wiki as they existed at the
time the snapshot was taken, but of course it would not allow
any editing or running of Axiom etc.

I still think installing MathAction locally is the better
choice.

On December 17, 2005 8:46 AM I wrote:
> 
> On December 17, 2005 3:31 AM you wrote:
> > 
> > > > I would be happy to have a local copy of all the information
> > > > on my computer.
> > > 
> > > I think that is an **excellect** question! 
> > 
> > you do realize that I asked for a snapshot of the contents of 
> > MathAction already several times?
> > 
> 
> I did not know what you meant by "snapshot". I don't think
> it is possible simply to take a snapshot of a wiki. It is
> necessary to install all of the associated software in order
> to view the contents.
> 
> I would be glad to help you do this.

\start
Date: Mon, 19 Dec 2005 00:43:00 -0500
From: William Sit
To: Bill Page
Subject: re: tex4ht and jsmath

Bill Page wrote:
> 
> On December 18, 2005 11:05 PM William Sit wrote:
> >
> > Bill Page wrote (to Tim):
> >
> > > Does Eitan's original link work for you?
> > >
> > > http://www.cse.ohio-state.edu/~gurari/temp/jstest.html
> > >
> > > The version of jstest.html page on axiom-developer is identical
> > > to Eitan's but the version of jsMath itself on axiom-developer
> > > is the older version.
> >
> > I (not Tim) got the same: a warning box and then correctly
> > displayed for $a^b$. Can you describe what should be expected?
> 
> Yes you should see exactly they same thing as if you had typed
> $a^b$ in LaTeX, processed it and viewed the dvi.
> 
> If you have the correct fonts installed, you should not get the
> warning box.
> 
OK, again, without doing anything more than the last time (after installing the
jsMath fonts and restarting Firefox):

http://www.cse.ohio-state.edu/~gurari/temp/jstest.html

works without a warning. However the 

http://page.axiom-developer.org/jstest.html

still does. The same happens on IE. The page:

http://wiki.axiom-developer.org/jsMathExperiment

still issues a warning box on both browsers.
Can you make that page editable?

Actually, I downloaded the page jstest.html page and changed the src to

<script type="text/javascript" 

src="http://www.math.union.edu/~dpvc/jsMath/jsMath/jsMath.js"></script> 

and now it works! (after a warning about accessing a js which is not local) No
red box warning about fonts.

I then tried downloading jsMath.js to the local drive and edit src to:

<script type="text/javascript" 

src="jsMath.js"></script> 

and then everything works without warning of fonts (but IE gives a  security
block).

Since I don't see the red box warning message:

Warning: It looks like you don't have the TeX math fonts installed. The
mathematics on this page may not look right without them. The jsMath Home Page
has information on how to download the needed fonts. In the meantime, we will do
the best we can with the fonts you have, but it may not be pretty and some
equations may not be rendered correctly.

in the source html, I don't know where it comes from. May be you can try to code
the source jsMath.js with a full path? (users probably will still get a warning
on security, but it should work).

\start
Date: Mon, 19 Dec 2005 02:08:47 -0500
From: Tim Daly
To: William Sit
Subject: re: tex4ht and jsmath

William,

> Since I don't see the red box warning message:

> Warning: It looks like you don't have the TeX math fonts
> installed. The mathematics on this page may not look right without
> them. The jsMath Home Page has information on how to download the
> needed fonts. In the meantime, we will do the best we can with the
> fonts you have, but it may not be pretty and some equations may not
> be rendered correctly.

> in the source html, I don't know where it comes from. May be you can
> try to code the source jsMath.js with a full path? (users probably
> will still get a warning on security, but it should work).

jsMath is a javascript program that gets downloaded but does not
show up in the source page. the warning is issued by the jsMath
javascript program. it is looking at the size of a particular
character in your tex fonts and deciding that you don't have the
right fonts installed. it is, at best, a buggy heuristic.

\start
Date: Mon, 19 Dec 2005 00:30:36 -0600
From: MathAction (znmeb)
To: MathAction
Subject: [WishList] Wish list -- integration with R -- Ed Borasky

While we're on the subject of numerical packages, I do nearly all of
my number crunching in R. I'd like to be able to access some kind of
symbolic package from R, although I'm not sure yet what sort of
interface I'd use. At the moment, the most promising way to add
symbolic capabilities to R seems to be using the R facilities for
calling C++ code to call the open source Ginac library.

Going the other way, calling a number crunching package from Axiom,
seems un-necessary, but given a choice between SciLab, Octave and R,
I'd take R hands-down! As noted above, SciLab is not truly open
source/free as in speech, and Octave isn't well supported. R is both
open source and well supported.

\start
Date: Mon, 19 Dec 2005 01:40:58 -0500
From: Bill Page
To: Tim Daly
Subject: re: tex4ht and jsmath
Cc: Davide P.Cervone

On December 19, 2005 2:09 AM Tim Daly (root) writes:
> ... 
> jsMath is a javascript program that gets downloaded but does not
> show up in the source page. the warning is issued by the jsMath
> javascript program.

That is correct.

> it is looking at the size of a particular character in your tex
> fonts and deciding that you don't have the right fonts installed.
> it is, at best, a buggy heuristic.
>

Are you sure about that?

This sounds like a reasonable approach to me since jsMath must
depend on the detailed characteristics of the fonts it uses. If
you think there is a better approach perhaps you should discuss
this with the program's author Davide Cervone:

http://www.math.union.edu/~dpvc/welcome.html

\start
Date: Mon, 19 Dec 2005 01:44:45 -0500
From: Bill Page
To: William Sit
Subject: re: tex4ht and jsmath

On December 19, 2005 12:43 AM William Sit wrote:
> OK, again, without doing anything more than the last time
> (after installing the jsMath fonts and restarting Firefox):
>
> http://www.cse.ohio-state.edu/~gurari/temp/jstest.html
>
> works without a warning. However the
>
> http://page.axiom-developer.org/jstest.html
>
> still does. The same happens on IE. The page:
>
> http://wiki.axiom-developer.org/jsMathExperiment
>
> still issues a warning box on both browsers.
> Can you make that page editable?
>
> Actually, I downloaded the page jstest.html page and changed
> the src to
>
> <script type="text/javascript"
>
> src="http://www.math.union.edu/~dpvc/jsMath/jsMath/jsMath.js">
> </script>
>
> and now it works! (after a warning about accessing a js which
> is not local) No red box warning about fonts.

That is expected because axiom-developer.org site is running the
older version of jsMath but the www.math.union.edu site has the
newer version of jsMath. As explained (at least implied :) on the
jaMath home page, these two versions require different font files.
If you install the fonts for the older version, they should work
with both the old and new versions, I think.

\start
Date: Mon, 19 Dec 2005 01:47:16 -0500
From: Bill Page
To: Martin Rubey
Subject: re: Local MathAction

Martin,

On December 18, 2005 11:39 PM I wrote:
> 
> I thought a little more about your request and I also saw that
> planetmath.org does offer a "static snapshot" download based
> on wget. Is this what you meant? If so, you can create such a
> snapshot via the command:
> ... 
>   wget -m -k -K -E http://wiki.axiom-developer.org
> 
> For more information see the wget documentation (man wget
> or http://www.gnu.org/software/wget/manual/wget.html)
> 
> But you should note that this could take a very long time
> depending on the speed of your internet connection!
> 
> If this format is what you mean by "snapshot" and you do think
> that this would be useful, then we can do the same thing as is
> done on planetmath - create a compressed tarball, say once per
> week, and provide a link for people to download it. But even
> compressed this is likely to be quite large - my guess: about
> 250 Mbytes. I will let you know once my current download
> completes and I create the actual compressed file.
>

Running locally on the axiom-developer.org server (no network
delays), the above wget command took about 2 hours to complete!

The tarball turns out to be 197.7 Mbytes - about a 40 minute
download at 80 KB/sec. You can download it here:

http://page.axiom-developer.org/axiom-snapshot.tar.gz

Use

 % mkdir snapshot
 % cd snapshot
 % tar xzf axiom-snapshot.tar.gz

to expand the archive into a convenient directory, e.g. snapshot

Then use a browser to access the local file:

  .../snapshot/wiki.axiom-developer.org/FrontPage.html

Most of the links have been converted to local links. The
exceptions are things that produce dynamic results such as
search, edit, etc. These still link to the Axiom Wiki.

Please let me know if you think this might be useful. If it
is, then we can provide a link on the wiki to download it
and I can also arrange to have it updated once per week.

\start
Date: Mon, 19 Dec 2005 02:40:41 -0500
From: Tim Daly
To: Bill Page
Subject: re: tex4ht and jsmath
Cc: Davide P.Cervone

> Are you sure about that?

The source code comment labels it "HACK".

\start
Date: 19 Dec 2005 13:05:12 +0100
From: Martin Rubey
To: Tim Daly
Subject: Re: jsMath
Cc: Eitan Gurari

Dear Tim,

> We need to develop a jsMath output format for browsers.

NOOOOO! I couldn't disagree more.

The idea -- well, at least mine -- is to use jsMath as long as mathml is not
widely supported, in order to have nice output on browsers, BUT

not only for Axiom output, but also for the pamphlet/ALLPROSE files.

Thus, Eitan said he would write a jsmath backend for TeX4ht. Then we would be
able to display *any* TeX (well, nearly) in a browser, and we could also have
our own "styles" to, for example, have tex4ht split latex sections into
individual pages, and so on.

Displaying axiom output on browsers is not such a problem. MathAction does this
already.

Martin

(PLEASE correct me if I'm on the wrong track)

\start
Date: Mon, 19 Dec 2005 08:59:54 -0500
From: Bill Page
To: Martin Rubey
Subject: RE: jsMath
Cc: Eitan Gurari

On December 19, 2005 7:05 AM Martin Rubey wrote:
> Tim Daly (root): wrote:
> > We need to develop a jsMath output format for browsers.
> 
> NOOOOO! I couldn't disagree more.
> 
> The idea -- well, at least mine -- is to use jsMath as long 
> as mathml is not widely supported, in order to have nice
> output on browsers, BUT
> 
> not only for Axiom output, but also for the pamphlet/ALLPROSE
> files.
> 
> Thus, Eitan said he would write a jsmath backend for TeX4ht. 
> Then we would be able to display *any* TeX (well, nearly) in
> a browser, and we could also have our own "styles" to, for
> example, have tex4ht split latex sections into individual
> pages, and so on.
> ... 
> (PLEASE correct me if I'm on the wrong track)
> 

I think that is it exactly. We are on the same track!

On MathAction the immediate use would be as a replacement for
the current "thumbnail" image of the first page of the pamphlet
file. This should really be the title page and table of contents
of the pamphlet file. In most cases this would allow us to avoid
the 'pdf', 'dvi' and 'ps' formats except for printing.

Besides support for jsMath, there are also a few extensions
of tex4ht required to support the particular noweb.sty LaTeX
embedded in the pamphlet files by 'noweave'. Eitan has also
said (and I agree) that some of the LaTeX in the current Axiom
pamphlet files is a little crufty and we should not expect
necessarily that all LaTeX constructions processed by the
latex command will necessarily produce valid html. In some
cases we may need to update the LaTeX coding to more modern
standards - something we should be prepared to do anyway.

\start
Date: Mon, 19 Dec 2005 08:06:01 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [FrontPage] enail

What are you talking about? What is not fixed?
I cannot find the word "enail" anywhere on the
website except here in your comment.

\start
Date: Mon, 19 Dec 2005 08:23:01 -0600
From: MathAction (unknown)
To: MathAction
Subject: [FrontPage] enail

In the popin help text, as I said in my first email.    It seems to come from:

title="to comment (and enail subscribers) enter text here and click Save"

I'd fix it myself if the system would let me...

\start
Date: 19 Dec 2005 15:32:52 +0100
From: Martin Rubey
To: Michel Lavaud
Subject: Re: axiom conference funding?

Well, it seems that it's time for me to admit that I was planning a small
workshop on such things at RISC, Linz, Austria, together with Ralf Hemmecke.

I did already contact Michael Joswig from Polymake and Nicolas Thiery / Florent
Hivert from MuPAD Combinat and they seemed to be interested. Bernhard
Gittenberger also signalled interest. Note that I would like to put emphasis on
the maths surrounding the packages, which means: I asked the (prospective)
speakers to explain a little what the field of research in which the package
might be used is about, and only in a second part speak about the package
itself.

I do not yet however have a date. We proposed May. There will be no funding,
which means, everybody would have to pay his bed and his tickets. No conference
fee either, though. If I don't get confirmation from Michael Joswig or Florent
Hivert until mid-January, there won't be a workshop, I suppose.

Personally I would not be able to come to Orleans, because I work in the wrong
institute and my Prof. surely won't allow me to go.

\start
Date: 19 Dec 2005 15:38:59 +0100
From: Martin Rubey
To: Bill Page
Subject: Re: jsMath

Bill Page writes:

> > (PLEASE correct me if I'm on the wrong track)
> 
> I think that is it exactly. We are on the same track!

So I suppose we can revert your recent edit of SummerOfCode, Tim?

\start
Date: Mon, 19 Dec 2005 08:55:03 -0600
From: MathAction (kratt6)
To: MathAction
Subject: [#239 'Algebra' does not have	'CharacteristicNonZero', but the book says so] (new) 

There is link connecting 'Algebra' and 'CharacteristicNonZero' in the
endpaper diagram, but there shouldn't be.

\start
Date: 19 Dec 2005 15:58:34 +0100
From: Martin Rubey
To: Ed Borasky
Subject: Axiom and R

Dear Ed,

in fact, a connection between R and Axiom would be wonderful and this was
already stated a few times.

I also do not really know which way to go, embed Axiom in R or embed R in
Axiom...

Do you have ideas?

\start
Date: Mon, 19 Dec 2005 10:57:24 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: jsMath

> So I suppose we can revert your recent edit of SummerOfCode, Tim?

yes

\start
Date: Mon, 19 Dec 2005 09:18:26 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Axiom ScreenCast] 

Axiom on Windows. Author: Bill Page.

more -- Please upload your own Axiom ScreenCast here!

The screen video and balloon markup was created with

-Alternate Tools

Tools

  - "Wink":http://www.debugmode.com/wink

  - "Audacity":http://audacity.sourceforge.net

  - "SWFtools":http://www.swftools.org.

See also: http://www.debugmode.com/userforums/viewtopic.php?t80

Other Tools

Ok, people, we're clearly missing a trend here...
 
The latest idea i've seen in documentation is movies.

Once we can figure out that technology we can each make movies of
our portions. I could make a movie of the steps needed to build a

It would be a fast and effective way to communicate user interaction.

Anybody know how to do this?

\start
Date: Mon, 19 Dec 2005 07:26:45 -0800 (PST)
From: Cliff Yapp
To: list
Subject: Possible approach/tools for graphing code relations

This might be relevant to the ongoing discussion about generating dot
graphs of the Axiom source code.  I suspect it would be more work to
make the jump to the Spad code but Lisp is probably up to it.

Gary King recently released a set of common lisp libraries (I believe
under the MIT Style License) which help him work with graphs (graphviz
still generates the output.)

Saw it mentioned here: http://lemonodor.com/archives/001288.html

Tutorial/eaxmple is here: 
http://www.metabang.com/unclog/publisha/atinybit.html

That "make-filtered-graph" bit looks quite interesting.

With Bill having solved the hyperlinked graphviz output problem,
perhaps these tools could server as the "other half" of the problem -
generating trees from the Axiom source code.

I'll try and play around with this when (if, on my cynical days) I get
time - maybe something like "per-category" or "per-domain" graphs could
be achieved.

\start
Date: Mon, 19 Dec 2005 10:54:28 -0500
From: Tim Daly
To: Martin Rubey
Subject: Re: jsMath
Cc: Eitan Gurari

>> We need to develop a jsMath output format for browsers.

>NOOOOO! I couldn't disagree more.

> (PLEASE correct me if I'm on the wrong track)

you're not wrong, i am.

\start
Date: 19 Dec 2005 11:27:26 -0500
From: Camm Maguire
To: Tim Daly
Subject: re: noweb "bug" (was: article "standard" header/footer)

Greetings!

Just wondering if there were any ideas or progress on this front.

Take care,

Camm Maguire writes:

> Greetings!
> 
> With current cvs 2.6.8pre, I just took your patch, and changed the
> GCLVERSION to gcl-system in both Makefile and Makefile.pamphlet.  Then
> I pointed the PATH to ~/gcl-2.6.8pre/bin:$PATH, set the AXIOM env
> variable as you instructed, and make AWK=awk.
> 
> I get down to the following:
> 
> tangling xpoly.spad.pamphlet to xpoly.spad
> tangling ystream.spad.pamphlet to ystream.spad
> tangling zerodim.spad.pamphlet to zerodim.spad
> make[3]: *** No rule to make target `/Users/camm/axiom/int/algebra/ABELGRP.o', needed by `src'.  Stop.
> make[2]: *** [algebradir] Error 2
> make[1]: *** [srcdir] Error 2
> make: *** [all] Error 2
> 
> 
> Above this I see:
> 
> start address -T 0xc30f80 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cattable.o
> Loading /Users/camm/axiom/obj/MACOSX/interp/cformat.o
> start address -T 0xccf500 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cformat.o
> Loading /Users/camm/axiom/obj/MACOSX/interp/cfuns.o
> start address -T 0xc41880 Finished loading /Users/camm/axiom/obj/MACOSX/interp/cfuns.o
> Loading /Users/camm/axiom/obj/MACOSX/interp/clam.o
> start address -T 0xc5d580 Finished loading /Users/camm/axiom/obj/MACOSX/interp/clam.o
> Loading /Users/camm/axiom/obj/MACOSX/interp/clammed.o
> start address -T 0xc1b000 Finished loading /Users/camm/axiom/obj/MACOSX/interp/clammed.o
> Loading /Users/camm/axiom/obj/MACOSX/interp/comp.o
> start address -T 0xc56fe0 Finished loading /Users/camm/axiom/obj/MACOSX/interp/comp.o
> 
> 
> I also did a build with my debian patches on top of yours, and got
> further, down to
> 
>       IntegerLinearDependence 
>    Loading /Users/camm/axiom/int/algebra/ZMOD.NRLIB/code for domain 
>       IntegerMod 
> 
> "building browse.daase" 
> "building category.daase" 
> "building interp.daase" 
> Value = 0
> (1) -> 5 making /Users/camm/axiom/mnt/MACOSX/bin/asq from /Users/camm/axiom/obj/MACOSX/etc/asq.c
> 4 making /Users/camm/axiom/mnt/MACOSX/bin/asq from /Users/camm/axiom/obj/MACOSX/etc/asq.c
> 2 making /Users/camm/axiom/mnt/MACOSX/lib/summary from /Users/camm/axiom/src/etc/summary
> 3 making /Users/camm/axiom/mnt/MACOSX/lib/copyright from /Users/camm/axiom/src/etc/copyright
> 1 making /Users/camm/axiom/mnt/MACOSX/bin/axiom from /Users/camm/axiom/src/etc/axiom
> 6 finished /Users/camm/axiom/src/etc
> 6 making /Users/camm/axiom/src/clef/Makefile from /Users/camm/axiom/src/clef/Makefile.pamphlet
> 5 making /Users/camm/axiom/src/clef
> 2 making /Users/camm/axiom/obj/MACOSX/clef/edible.c from /Users/camm/axiom/src/clef/edible.c.pamphlet
> 3 making /Users/camm/axiom/obj/MACOSX/clef/edible.o from /Users/camm/axiom/obj/MACOSX/clef/edible.c
> edible.c: In function 'main':
> edible.c:182: warning: implicit declaration of function 'fork'
> edible.c:191: warning: implicit declaration of function 'setsid'
> edible.c:198: warning: implicit declaration of function 'dup2'
> edible.c:209: warning: implicit declaration of function 'close'
> edible.c:224: warning: implicit declaration of function 'execvp'
> edible.c:234: warning: implicit declaration of function 'execlp'
> edible.c:234: warning: incompatible implicit declaration of built-in function 'execlp'
> edible.c:234: warning: missing sentinel in function call
> edible.c:247: warning: implicit declaration of function 'getppid'
> edible.c:299: warning: implicit declaration of function 'read'
> edible.c:310: warning: implicit declaration of function 'write'
> edible.c: In function 'hangup_handler':
> edible.c:399: warning: implicit declaration of function 'kill'
> edible.c:408: warning: implicit declaration of function 'unlink'
> edible.c: In function 'alarm_handler':
> edible.c:501: warning: implicit declaration of function 'alarm'
> 1 linking clef
> 5 making /Users/camm/axiom/mnt/MACOSX/doc/src/clef/axiom.sty from /Users/camm/axiom/src/doc/axiom.sty.pamphlet
> 4 making /Users/camm/axiom/mnt/MACOSX/doc/src/clef/edible.c.dvi from /Users/camm/axiom/src/clef/edible.c.pamphlet
> 6 finished /Users/camm/axiom/src/clef
> 42 making /Users/camm/axiom/src/doc/Makefile from /Users/camm/axiom/src/doc/Makefile.pamphlet
> 41 making /Users/camm/axiom/src/doc
> 1 making /Users/camm/axiom/int/doc/axiom.bib from /Users/camm/axiom/src/doc/axiom.bib.pamphlet
> 3 making /Users/camm/axiom/mnt/MACOSX/doc/DeveloperNotes.dvi from /Users/camm/axiom/src/doc/DeveloperNotes.pamphlet
> The root module <<*>> was not defined.
> 4 making /Users/camm/axiom/mnt/MACOSX/doc/book.dvi from /Users/camm/axiom/src/doc/book.pamphlet
> /bin/sh: line 1: [: too many arguments
> 5 building /Users/camm/axiom/mnt/MACOSX/doc/Rosetta.dvi from /Users/camm/axiom/src/doc/Rosetta.pamphlet
> /bin/sh: line 1: [: too many arguments
> 8 making /Users/camm/axiom/int/booklet.c from /Users/camm/axiom/src/doc/booklet.c.pamphlet
> 7 making /Users/camm/axiom/int/doc/booklet.o from /Users/camm/axiom/int/booklet.c
> /Users/camm/axiom/int/booklet.c: In function 'url_dispatch':
> /Users/camm/axiom/int/booklet.c:58: warning: pointer targets in passing argument 1 of 'strncmp' differ in signedness
> /Users/camm/axiom/int/booklet.c:59: warning: pointer targets in passing argument 2 of 'recursive_parsing' differ in signedness
> 6 making /Users/camm/axiom/mnt/MACOSX/bin/booklet from /Users/camm/axiom/int/doc/booklet.o
> 9 finished /Users/camm/axiom/src/doc
> 46 making /Users/camm/axiom/src/graph/Makefile from /Users/camm/axiom/src/graph/Makefile.pamphlet
> 45 making /Users/camm/axiom/src/graph
> 2 making /Users/camm/axiom/src/graph/viewman/Makefile from /Users/camm/axiom/src/graph/viewman/Makefile.pamphlet
> 1 making /Users/camm/axiom/src/graph/viewman
> 2 /Users/camm/axiom/int/graph/viewman/viewman.c from /Users/camm/axiom/src/graph/viewman/viewman.c.pamphlet
> 3 making /Users/camm/axiom/obj/MACOSX/graph/viewman/viewman.o from /Users/camm/axiom/int/graph/viewman/viewman.c
> /Users/camm/axiom/int/graph/viewman/viewman.c: In function 'main':
> /Users/camm/axiom/int/graph/viewman/viewman.c:106: error: 'SIGCLD' undeclared (first use in this function)
> /Users/camm/axiom/int/graph/viewman/viewman.c:106: error: (Each undeclared identifier is reported only once
> /Users/camm/axiom/int/graph/viewman/viewman.c:106: error: for each function it appears in.)
> /Users/camm/axiom/int/graph/viewman/viewman.c:171: warning: implicit declaration of function 'write'
> make[4]: *** [/Users/camm/axiom/obj/MACOSX/graph/viewman/viewman.o] Error 1
> make[3]: *** [viewmandir] Error 2
> make[2]: *** [graphdir] Error 2
> make[1]: *** [srcdir] Error 2
> make: *** [all] Error 2
> 
> 
> Anything else I should try to reproduce your error?
> 
> Take care,
> 
> Tim Daly writes:
> 
> > i took your suggestion and rewrote plttest.c to add the line:
> > 
> > long findstring(char *a, char *b);
> > 
> > but it had no effect. 
> > 
> > when you built axiom did you modify the makefiles to use 
> > GCLVERSION=gcl-2.6.8pre
> > 
> > or did you build the lisp by hand and copy it over?
> > or did you use your debian mod and compiler::link?

\start
Date: Mon, 19 Dec 2005 19:29:06 +0100
From: Michel Lavaud
To: Bill Page
Subject: RE: Axiom guidance

On 18 Dec 2005 at 2:10, Bill Page wrote:

> My opinion is that it is highest priority to improve the
> scientific contents even if the quality of the English is not
> perfect. You will notice that even though English is my first
> language, I still manage occasionally to introduce bad syntax
> and incorrect words. :) Please do not let that stop you from
> making improvements to the content. If there is some concern
> then someone else can make improvements to your English.

OK, thanks a lot for the encouragements, I tried my bad English :-)
 
> > BTW, is it possible easily with Plone to have bi(multi-)lingual
> > pages, for example so that one could switch from English to French
> > by clicking on a flag or button in the current page ? 
> 
> Yes. The axiom-developer.org sever has two different websites
> that support Axiom: one is called the Axiom Wiki and it is based
> only on Zope and ZWiki (with extensions for LaTeX and Axiom).
> The Axiom Wiki has only limited support for translations of some
> of the fixed text such as menus and headings.

I created SandBoxLaTeX and tried to put some accented letters in it,

http://wiki.axiom-developer.org/SandBoxLaTeX#bottom

could you tell me if they are correctly displayed on English configuration=
?
 
> The other website is called the Axiom Portal and it is based on
> Plone and Zwiki (with the same extensions).
> 
> http://portal.axiom-developer.org
> 
> Right now the I18N product for Plone have not yet been installed. But
> if you or anyone else would like to experiment with multi- lingual
> documents on the Axiom Portal, I would be glad to install the I18N
> package. I would also be happy to try to contribute to such documents.

Great. Yes, I would be very happy to experiment it, if you were so kind to=
 install it

\start
Date: Mon, 19 Dec 2005 10:57:16 -0800
From: Bob McElrath
To: Martin Rubey
Subject: Re: jsMath
Cc: Eitan Gurari

Martin Rubey [Martin Rubey] wrote:
> Dear Tim,
> 
> > We need to develop a jsMath output format for browsers.
> 
> NOOOOO! I couldn't disagree more.
> 
> The idea -- well, at least mine -- is to use jsMath as long as mathml is not
> widely supported, in order to have nice output on browsers, BUT

I agree.

I see having a MathML backend, so that we can use jsMath to *generate*
the MathML (which would be quite fast) with a fallback to its current
rendering mode.  In particular this is good for dynamic content (e.g.
AxoimUI in the browser).  Of course, for static pages we can also store
rendered MathML pages on the server and negotiate with the browser to
send it.

The danger I see in widespread use of jsMath is that it is quite slow.
(and, this is a fairly fundamental issue that requires optimization in
the browser itself to improve)  So, a non-MathML enabled browser viewing
a page with a lot of math can take quite a long time to render.  And, at
least firefox is totally unresponsive and appears to be hung when it's
running heavy javascript.

I have a page in my notes that takes ~5s to render using jsMath.  I
imagine there are pamphlet files that will be much worse than that.

\start
Date: Mon, 19 Dec 2005 21:13:02 +0100
From: Pierre Doucy
To: Martin Rubey
Subject: Re: Axiom and R

Martin,

depending on what you actually want to do, you might just want to make
them talk to each other through, for instance, a pipe (and some
translation in between) that might do the trick if what you want to do
just needs basic types.
That might also be a good start to understand what are the constraints
and what needs to be done to actually embed axiom in R (or the other
way around).

Pierre


On 19 Dec 2005 15:58:34 +0100, Martin Rubey wro=
te:
> Dear Ed,
>
> in fact, a connection between R and Axiom would be wonderful and this was
> already stated a few times.
>
> I also do not really know which way to go, embed Axiom in R or embed R in
> Axiom...

\start
Date: Mon, 19 Dec 2005 19:33:40 +0100
From: Michel Lavaud
To: Bill Page
Subject: RE: [FrontPage] same font on all pages?

On 18 Dec 2005 at 2:36, Bill Page wrote:

> On December 16, 2005 7:38 PM Michel Lavaud wrote:
> 
> > Of course, once again this is not at all important, as it is
> > just a comment. But it might be more annoying for more important
> > information, or if (some day) MathAction would use jsmath or other
> > fonts for math formulas ? I see from the source code of the pages
> > that they use UTF-8 encoding, so I would suppose it would require
> > just a small modification of the configuration of Plone for French
> > on the server, writing accented letters in Unicode or something like
> > that?
> 
> Yes, I think you are correct. Note however that the Axiom Wiki
> does not use Plone, as such. Plone is used only for the Axiom
> Portal. The Axiom Wiki is based on Zwiki.
> 
> I have found the file in ZWiki that contains this text, but to
> my surprise the encoding in the file seems to be correctly
> written in utf-8, yet when it appears on the web page it is
> clearly iso-8859-1. So perhaps this is a more subtle problem
> of incorrect re-encoding. I will continue to look for a solution.

Thank you very much for trying!

 
> BTW I notice that this also happens in other languages that use
> accents such as German.
> 
> > Or is it more complicated, and there is also something to
> > configure on the local machines?
> 
> No, the only setting on the local machine is the language
> setting of the browser. The rest should be automatic.

Ah OK, fine.

\start
Date: Mon, 19 Dec 2005 19:20:34 -0800
From: Ed Borasky
To: Cliff Yapp
Subject: Re: Possible approach/tools for graphing code relations

There are tools to develop the "call graph" of C/C++ code. Mel Gorman 
used one to diagram the Linux kernel. See

http://www.skynet.ie/~mel/projects/codeviz/

for the details. I have no idea whether this would work for any of the 
languages Axiom uses, since I don't know the syntax or semantics of any 
of them (except Lisp, of course).

C Y wrote:

>This might be relevant to the ongoing discussion about generating dot
>graphs of the Axiom source code.  I suspect it would be more work to
>make the jump to the Spad code but Lisp is probably up to it.
>
>Gary King recently released a set of common lisp libraries (I believe
>under the MIT Style License) which help him work with graphs (graphviz
>still generates the output.)
>
>Saw it mentioned here: http://lemonodor.com/archives/001288.html
>
>Tutorial/eaxmple is here: 
>http://www.metabang.com/unclog/publisha/atinybit.html
>
>That "make-filtered-graph" bit looks quite interesting.
>
>With Bill having solved the hyperlinked graphviz output problem,
>perhaps these tools could server as the "other half" of the problem -
>generating trees from the Axiom source code.
>
>I'll try and play around with this when (if, on my cynical days) I get
>time - maybe something like "per-category" or "per-domain" graphs could
>be achieved.

\start
Date: Mon, 19 Dec 2005 23:13:52 -0500
From: Tim Daly
To: Alfredo Portes
Subject: Re: Doyen
Cc: list

Jose,

good to hear from you and good to see that you're still interested.
doyen has been discussed on the mailing list and we're hoping to
have enough support put together to get it ready to distribute 
at ISSAC 2006 (Genova Italy http://issac2006.dima.unige.it/call2.html)
i normally get asked to put together the CD in late may and it needs
to happen in about 1 week so doyen has to be ready to go by that time.

i'd like to see a simple literate program that we can include as a
running example of the idea.

i'm currently working my way thru a book called "Ajax in Action"
by Dave Crane, Eric Pascarello, and Darren James looking for details
of how to enhance a locally running browser/server/axiom. in a local
situation we can use modified versions of the hypertex browser pages
directly; we can call back to axiom to compute results, etc.

> the discussions and possible future work. We managed to have Zwiki-Latex
> working on the CD (the Fedora version). Some problems in the lab stopped us
> from uploading it. We will do that as soon as possible, with the proper
> documentation. I saw that wiki has now support for pamphlet files. I would
> like to know if this is merged in the latest latexwiki. We created a little
> prototype of an application in which you can drop a pamphlet file in a text
> Bfield and the source and documentation will be extracted and compiled.
> However the display is done using xdvi or other tool.
> http://toolbox1.sytes.net/doyen/dragdrop/index.html . Another thing is that
> Knoppix has made changes to its structure. It uses UNIONFS now, which allows
> to install software in any part of the system, not only in the home
> directory. Our version of the Fedora Live CD can do this. We were able to
> have knoppix remastered using the new structure, which also has a better
> hardware support. I were thinking that this is important given the fact that
> the goal is to give Doyen in conferences, in which the hardware
> configurations for each machine can vary drastically.


Bill Page has recently talked about writing the instructions 
necessary to install the whole zwiki/plone pile locally which
we could adapt to the doyen CD. we've already done the work to
set up a local server.

please copy list so others can help and 
please update the build instructions. your userid on axiom-developer.org
should still be active. 

there ia a page at http://wiki.axiom-developer.org/Doyen
which you can modify to post the Doyen build instructions.
try publishing them there and i'll try to build a doyen from them.

\start
Date: Mon, 19 Dec 2005 19:36:32 -0800
From: Ed Borasky
To: Pierre Doucy
Subject: Re: Axiom and R

What do Axiom users want from a numerical package? Given that Axiom was 
once "married" to the NAG library, I'd expect such things as basic 
linear algebra, ordinary and partial differential equations, digital 
signal processing, and statistics. R has all of these, but it is more -- 
it's a complete environment all by itself. And quite a lot of the wisdom 
of R is embedded in contributed packages rather than in the base 
environment.

R can function as a command line interpreter, a shared library (DLL on 
Windows as well), a DCOM server on Windows, a CGI interpreter, and even 
a web application server! There are lots of ways to quickly get some 
kind of interface up, especially if you're willing to do "inelegant" 
things like spawn a process, open up a command line interpreter and pipe 
R language to it.

As an R programmer, I think what *I* would use most would be the ability 
to use Axiom as a high-level language to generate R code, just like the 
"ancient" CAS systems did with FORTRAN code. The R language is a lot 
better than FORTRAN as a target language. And I don't have enough 
experience with Axiom (or any other CAS except Derive) to know what 
sorts of problems I could pose that I couldn't get solved in a timely 
manner in Axiom alone, without a numerical "assistant" like R.

Looking at the other way around -- embedding a CAS in R -- of course, R 
can spawn an Axiom process and pipe code to its standard input. I'm not 
sure I'd take that approach, since R is capable of directly linking to 
C, C++ and Fortran code. I'd be more inclined to take the Ginac symbolic 
calculator library (written in C++) and just do a straighforward and 
largely mechanical integration.

Pierre Doucy wrote:

>Martin,
>
>depending on what you actually want to do, you might just want to make
>them talk to each other through, for instance, a pipe (and some
>translation in between) that might do the trick if what you want to do
>just needs basic types.
>That might also be a good start to understand what are the constraints
>and what needs to be done to actually embed axiom in R (or the other
>way around).
>
>Pierre
>
>
>On 19 Dec 2005 15:58:34 +0100, Martin Rubey wrote:
>  
>
>>Dear Ed,
>>
>>in fact, a connection between R and Axiom would be wonderful and this was
>>already stated a few times.
>>
>>I also do not really know which way to go, embed Axiom in R or embed R in
>>Axiom...
>>
>>Do you have ideas?

\start
Date: Tue, 20 Dec 2005 09:42:36 -0500
From: Bill Page
To: list
Subject: FW: RE: tex4ht and jsmath

-----Original Message-----

Bill:

Thanks for CCing me on the conversation about jsMath in the Axiom-
Developer mailing list.  I read through the recent postings, and I 
might be able to shed some light on the subject.  Could you pass 
these comments on to the list?  I'd appreciate it.

There are several things involved with the font issues that some of 
you are having.  One of them is the font change that occurred with 
the v3.0 release of jsMath.  This release has new fonts that use a 
different encoding from the original BaKoMa fonts, and so I have 
named them with a "jsMath-" prefix to differentiate them, and avoid 
name collisions with the original ones.  Older versions of jsMath 
will not recognize or use these new fonts, so if you have downloaded 
fonts starting with "jsMath-", you will still get the font warning 
message if you view the jsMathExperiment site or http://page.axiom-
developer.org/jstest.html (which use jsMath v1.8, which is now quite 
old), but will NOT get a font warning message on the jsMath examples 
page (which uses jsMath v3.0).  Those who reported bad rendering in 
MSIE are probably suffering from the older version of jsMath; v2.0 is 
where the image-based fallback was introduced.  With 1.8 if the TeX 
fonts were not available, jsMath would use unicode characters, and 
these were not entirely successful with things like roots and other 
delicate spacing (since jsMath doesn't know what font they will be 
taken from, so can't really know how they should line up).

If you want to test things with jsMath versions 2.x or 1.x, you need 
to get the BaKoMa versions of the fonts, still available on the 
jsMath font page (http://www.math.union.edu/locate/jsMath/download/
fonts.html).  You can install both sets of fonts if you want (the 
original BaKoMa fonts and the newer jsMath-specific ones).

Someone mentioned that he had not installed any fonts but still 
didn't get the font warning.  That is probably because the BaKoMa 
fonts are the ones that Firefox uses as part of their font suite for 
MathML.  If you installed the fonts for MathML, then jsMath will use 
them without your needing to install anything else.

Someone else talked about MikTeX installations, but these are not the 
fonts that jsMath uses.  It does not use the .mf or .pk files from a 
TeX installation, but rather .ttf fonts, which are not usually part 
of TeX itself.  (Some previewers may use these, but not a native TeX 
installation.)  In general, jsMath will not have any connection to a 
native TeX installation.

There was some concern over the method of testing for the TeX fonts.  
I admit that it is a hack, in the sense that it is not a guaranteed 
method of detecting the presence of the fonts, but in practice it has 
worked remarkably well.  The CMEX10 font has unusually large depth, 
and this is so unusual that it is pretty indicative of having the 
right font.  So far there has only been one complaint that I have 
received about not properly recognizing the fonts, and that was very 
early on, and the test has been adjusted since then.  In fact, it has 
worked well enough that similar test can be used to detect the 
presence of other fonts (like those in the extra-fonts area of the 
jsMath download site).  So I'm pretty satisfied with that method of 
detecting the fonts.  The problems that you all are facing are not 
due to that, but to the change in the fonts used by jsMath.  Sorry 
about the complication that has introduced.

A second issue is with the jsMath installations on your servers.  I 
am not able to access the ohio-state site, but the conversation 
indicates that someone at least had tried to make a page that sourced 
the copy of jsMath.js from the jsMath home page, and they got warning 
messages about not taking jsMath from the local server.  This is not 
an idle warning, and is not because I didn't want you to be able to 
do that; it is a restriction based on the browsers' javascript 
security model, and it will prevent jsMath from working properly.  In 
particular, jsMath consists of more than one javascript file (not 
just jsMath.js), and jsMath loads additional components as it needs 
them.  For example, the image fallback mode is not downloaded unless 
you need it.  But the method used to obtain these files relies on the 
other files coming from the same server as the main page (otherwise 
the browser won't let jsMath look at the files since they come from a 
different security domain).  The upshot is, if you load jsMath.js 
from a different server, it will be crippled and won't be able to 
function fully.  If you have the TeX fonts installed, jsMath will run 
OK in this situation (but the user will not be able to open the 
control panel, for example), however, if you DON'T have the TeX fonts 
installed, jsMath will not be able to download the code for the 
fallback method, and so you will not have your mathematics rendered 
properly (or at all).  This may account for why some of you can see 
it OK and some of you can't: those WITH the TeX fonts would see 
properly rendered math, and those without would see the TeX source 
code unrendered.

The same thing goes for those who downloaded one of the jsMath 
example files and tried to run it locally.  First, in those examples, 
the SCRIPT tag that calls in jsMath has a relative URL not an 
absolute one, so you would need to change that to point to a local 
copy of jsMath.  Second, if you pointed this to the jsMath.js on my 
server, you will run into the problems I mentioned above of taking 
jsMath from a non-local server.  Some browsers are less secure than 
others, and some will let you do this, but not all.  Finally, you 
can't just copy jsMath.js to the local machine, but must get a 
complete installation of jsMath, otherwise files that jsMath needs 
will be missing, and things like the fallback method for when the 
fonts are unavailable will not work.  Unfortunately, the lack of TeX 
fonts and the incomplete jsMath installation have combined to make 
matters worse for you.  If you download the complete jsMath 
distribution, you should be able to run a local copy just fine.

Finally, a note about the image mode for jsMath.  This does not use a 
single image of the complete equation (as is the case with most image-
based mathematics).  Rather it uses separate images of the individual 
characters in the TeX fonts and creates the typeset mathematics from 
those just as though they were a real font.  So even when jsMath is 
using its image fallback mode, you will still get the progress 
message for the math being typeset.

I hope you are able to get this working for you.  Let me know if you 
have additional questions.

Davide

PS, it is possible to extend jsMath to include additional LaTeX 
environments that you may need.  The changes in v3.0 will make this 
sort of thing easier to do.  If Axiom uses a limited number of 
environments that are not currently supported by jsMath, I might be 
able to add them in for you.

\start
Date: Tue, 20 Dec 2005 09:57:00 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: Axiom guidance

On Monday, December 19, 2005 1:29 PM Michel Lavaud wrote:
> ...
> I created SandBoxLaTeX and tried to put some accented letters
> in it,
>
> http://wiki.axiom-developer.org/SandBoxLaTeX#bottom
>
> could you tell me if they are correctly displayed on English
> configuration?
>

Yes, the text looks fine to me with FireFox 1.5 and IE 6 sp2 on
Windows XP.

> > The other website is called the Axiom Portal and it is based on
> > Plone and Zwiki (with the same extensions).
> >
> > http://portal.axiom-developer.org
> >
> > Right now the I18N product for Plone has not yet been installed.
> > But if you or anyone else would like to experiment with
> > multi-lingual documents on the Axiom Portal, I would be glad to
> > install the I18N package. I would also be happy to try to
> > contribute to such documents.
>
> Great. Yes, I would be very happy to experiment it, if you
> were so kind to install it
>

Ok, I will let you know as soon as it is available.

\start
Date: Tue, 20 Dec 2005 11:33:04 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: [FrontPage] same font on all pages?

Michel,

I found the solution to the problem of the display of accented
characters buried deep down inside the ZWiki source code. As I
expected it has to do with a subtle interaction between the
underlying Zope application server and the ZWiki application.
Luckly, the source code itself contained the necessary
documentation for a work-a-round. All I had to do was to enable
a section of the code that the author thought was no longer
necessary and had commented-out of this version. Then restart
the Zope server.

I have checked both French and German and the accents now seem
correct in both FireFox and IE on Windows XP. Please let me know
if this is working for you.

Regards,
Bill Page.

On Monday, December 19, 2005 1:34 PM Michel Lavaud wrote:
> Bill Page wrote:
> > I have found the file in ZWiki that contains this text, but to
> > my surprise the encoding in the file seems to be correctly
> > written in utf-8, yet when it appears on the web page it is
> > clearly iso-8859-1. So perhaps this is a more subtle problem
> > of incorrect re-encoding. I will continue to look for a solution.
>
> Thank you very much for trying!
>
> 
> > BTW I notice that this also happens in other languages that use
> > accents such as German.
> >
> > > Or is it more complicated, and there is also something to
> > > configure on the local machines?
> >
> > No, the only setting on the local machine is the language
> > setting of the browser. The rest should be automatic.
>
> Ah OK, fine.

\start
Date: Tue, 20 Dec 2005 19:54:06 -0500
From: Bill Page
To: Michel Lavaud
Subject: RE: Axiom guidance

On Monday, December 19, 2005 1:29 PM Michel Lavaud wrote:
> ...
> Bill Page wrote: 
> > The other website is called the Axiom Portal and it is based on
> > Plone and Zwiki (with the same extensions).
> >
> > http://portal.axiom-developer.org
> >
> > Right now the I18N product for Plone have not yet been
> > installed. But if you or anyone else would like to experiment
> > with multi-lingual documents on the Axiom Portal, I would be
> > glad to install the I18N package. I would also be happy to try
> > to contribute to such documents.
>
> Great. Yes, I would be very happy to experiment it, if you
> were so kind to install it

Ok, I have now installed the so called I18NLayer in Plone. Here
is an example of bi-lingual document.

http://portal.axiom-developer.org/Members/billpage/i18Ntest

It will appear in French if your browser language is set to
French, E.g. in FireFox click:

  Tools/Options/Advanced/General/Edit Languages

and French (fr) is the top language. Or in English if (en) is
the top language on the list. Note: If you wonder about the
quality of the translations :), they were created from the
English via Altavista BabelFish. Please feel free to correct
and improve it.

Notice the select-box in the bottom-left corner of the page.
This allows you to select another translation, e.g. German.

If you are logged into the Axiom Portal then you will also
be able to create new translations of this document in other
languages.

After logging in, you can create new multi-lingual documents
in your "Mes documents' folder. Click "Ajout d'un =E9l=E9ment" and
choose "I18NLayer" and just fill-in the blanks.

Please let me know if you have any questions about this. I will
try to answer, but I have to admit that I do not have a lot of
experience with this feature of Plone.

\start
Date: Tue, 20 Dec 2005 21:12:49 -0500
From: Bill Page
To: Tim Daly
Subject: re: Doyen
Cc: list, Alfredo Portes

On Monday, December 19, 2005 11:14 PM Tim Daly (root) wrote:
> ...
> Jose wrote:
> > the discussions and possible future work. We managed to
> > have Zwiki-Latex working on the CD (the Fedora version).
> > Some problems in the lab stopped us from uploading it.
> > We will do that as soon as possible, with the proper
> > documentation.

Excellent!

> > I saw that wiki has now support for pamphlet files. I would
> > like to know if this is merged in the latest latexwiki.

Do you mean in the darcs repository on MathAction?

http://wiki.axiom-developer.org/MathActionRepository

I don't think it is quite up to date. But if you want it
I can update it ASAP.

> > We created a little prototype of an application in which
> > you can drop a pamphlet file in a text Bfield and the source
> > and documentation will be extracted and compiled.
> > However the display is done using xdvi or other tool.
> > http://toolbox1.sytes.net/doyen/dragdrop/index.html .

That sounds VERY interesting. I would like to know more.
I would be glad to try to help add this functionality to
the Axiom Wiki.

> ...
> Bill Page has recently talked about writing the instructions
> necessary to install the whole zwiki/plone pile locally which
> we could adapt to the doyen CD. we've already done the work to
> set up a local server.
>

Yes, I am working on this.

> please copy list so others can help and
> please update the build instructions. your userid on
> axiom-developer.org should still be active.
>
> there ia a page at http://wiki.axiom-developer.org/Doyen
> which you can modify to post the Doyen build instructions.
> try publishing them there and i'll try to build a doyen from
> them.

Yes, please keep in touch.

\start
Date: Wed, 21 Dec 2005 10:18:08 +0100
From: Ralf Hemmecke
To: list
Subject: [Fwd: Re: noweb: unclosed module name]

This is a multi-part message in MIME format.
--------------060104040607070209010106

I think, you might find this useful.

Ralf

--------------060104040607070209010106
 name="Re: noweb: unclosed module name"
 filename="Re: noweb: unclosed module name"

\start
Date: Tue, 20 Dec 2005 17:52:44 -0500
From: Norman Ramsey
To: Ralf Hemmecke
Subject: Re: noweb: unclosed module name 

 > Dear Norman,
 > 
 > I think, I have found the problem in markup.nw.

Thanks for prodding me on this.
Enclosed find a patch, which will become part of noweb 2.11.

Norman

===================================================================
RCS file: RCS/markup.nw,v
retrieving revision 2.17
diff -r2.17 markup.nw
25c25
< static char rcsname[] = "$Name:  $";
---
> static char rcsname[] = "$Name: v2_10c $";
150c150,154
< beginning of a code chunk is easy.
---
> beginning of a code chunk is easy.  The only tricky bit is that if we
> see an unclosed, unescaped [[<<]] in a code chunk, this should be acceptable.
> Because in a documentation chunk, an unclosed, unescaped [[<<]] will
> already be caught with a ``module name doesn't end'' message, the
> right thing to do here is silently to let an unclosed [[<<]] pass.
161,162c165
<     if (tail == NULL) <<error exit from [[starts_code]]>>
<     if (*tail++ != '=') return 0;
---
>     if (tail == NULL || *tail++ != '=') return 0;
178,182d180
< <<error exit from [[starts_code]]>>=
< {
<     errorat(filename, lineno, Error, "Module name doesn't end", line);
<     return 0;
< }

--------------060104040607070209010106--

\start
Date: Thu, 22 Dec 2005 00:34:35 -0500
From: Tim Daly
To: list
Subject: doyen

slashdot has an article about running linux as a screensaver.
http://www-128.ibm.com/developerworks/linux/library/l-scrnsave

perhaps this would be a good way to package doyen.
should be interesting to see axiom running as a screensaver :-)

\start
Date: Thu, 22 Dec 2005 02:03:39 -0500
From: Tim Daly
To: list
Subject: hyperdoc on windows

this seems to have gotten lost....

i got hyperdoc running on a windows platform.

there is a program called Xming (wiki.freedesktop.org/wiki/Xming)
that is a standalone X11 server running on windows.
it installs cleanly.

i compiled hyperdoc to run standalone and it runs without changes.
i'm now trying to get the graphics working.

\start
Date: Thu, 22 Dec 2005 01:46:48 -0500
From: Bill Page
To: Tim Daly
Subject: RE: hyperdoc on windows

On December 22, 2005 2:04 AM Tim Daly (root) wrote:
> 
> i got hyperdoc running on a windows platform.
>

!!! Fantastic !!!
 
> there is a program called Xming (wiki.freedesktop.org/wiki/Xming)
> that is a standalone X11 server running on windows.
> it installs cleanly.
> 
> i compiled hyperdoc to run standalone and it runs without
> changes.

Great.

Can you give me a few more hints about how to do this?

> i'm now trying to get the graphics working.
> 

Anything I can do to help?

\start
Date: Wed, 21 Dec 2005 23:12:28 -0800
From: Bob McElrath
To: list
Subject: Integral challenge

I don't know whether to file this as a bug or not, since it seems the
solution to this integral is not known.  (None of Maple, Mathematica,
Maxima can do it, and in addition it does not seem to be in G&R)

So, any integral experts want to take a crack at it?  In the problem I
am interested in, a is real and a>0, b is real and 0 <= b <= 1, and I
need the integral over theta=0..2*Pi, in case the definite integral is
easier.

(3) -> integrate(exp(-a*sqrt(1-b*cos(theta))), theta)
 3) -> 
   >> Error detected within library code:
   Function not supported by Risch d.e.

This has arisen in a quantum mechanical calculation involving the
Hydrogen atom.  

Since the integrand is well-behaved, I have chosen to do this
numerically for my paper, however an analytic solution would be
desirable.  I'm having to carry out a 3-dimensional numeric integral
using the Cuhre method because the above integral is not known, and the
second of the three integrals is over things inside 'b' above, and is in
general quite complicated.  The third is even more nasty, and I think
I'd have to do numerically anyway.

But, I'm surprised to find that such a simple integral has no known
solution.

\start
Date: Thu, 22 Dec 2005 05:54:41 -0800
From: Ed Borasky
To: Bob McElrath
Subject: Re: Integral challenge

There are unanswered questions about the hydrogen atom in 2005? :)

Seriously, though, have you thrown this at Derive? An HP or TI handheld? 
Those pesky "student grade" tools sometimes surprise people. I've 
actually got all three, so I could do it if you haven't. Have you tried 
Reduce?

Bob McElrath wrote:

>I don't know whether to file this as a bug or not, since it seems the
>solution to this integral is not known.  (None of Maple, Mathematica,
>Maxima can do it, and in addition it does not seem to be in G&R)
>
>So, any integral experts want to take a crack at it?  In the problem I
>am interested in, a is real and a>0, b is real and 0 <= b <= 1, and I
>need the integral over theta=0..2*Pi, in case the definite integral is
>easier.
>
>(3) -> integrate(exp(-a*sqrt(1-b*cos(theta))), theta)
> 3) -> 
>   >> Error detected within library code:
>   Function not supported by Risch d.e.
>
>This has arisen in a quantum mechanical calculation involving the
>Hydrogen atom.  
>
>Since the integrand is well-behaved, I have chosen to do this
>numerically for my paper, however an analytic solution would be
>desirable.  I'm having to carry out a 3-dimensional numeric integral
>using the Cuhre method because the above integral is not known, and the
>second of the three integrals is over things inside 'b' above, and is in
>general quite complicated.  The third is even more nasty, and I think
>I'd have to do numerically anyway.
>
>But, I'm surprised to find that such a simple integral has no known
>solution.

\start
Date: Thu, 22 Dec 2005 07:19:20 -0800
From: Bob McElrath
To: Ed Borasky
Subject: Re: Integral challenge

Ed Borasky [Ed Borasky] wrote:
> There are unanswered questions about the hydrogen atom in 2005? :)

I'm using Hydrogen because it's a simpler (solvable) example.  But
nonetheless, trust me I'm more surprised than you.  ;)

> Seriously, though, have you thrown this at Derive? An HP or TI handheld? 
> Those pesky "student grade" tools sometimes surprise people. I've 
> actually got all three, so I could do it if you haven't. Have you tried 
> Reduce?

I don't have Derive or an HP or TI handheld, but REDUCE also fails.

\start
Date: Thu, 22 Dec 2005 21:54:51 -0800
From: Richard Harke
To: list
Subject: Re: Integral challenge

On Thu December 22 2005 05:54, Ed Borasky wrote:
> There are unanswered questions about the hydrogen atom in 2005? :)
>
> Seriously, though, have you thrown this at Derive? An HP or TI handheld?
> Those pesky "student grade" tools sometimes surprise people. I've
> actually got all three, so I could do it if you haven't. Have you tried
> Reduce?
I didn't really expect this to work but I tried anyway on a
HP 28C. But as the manual says " It can return an exact inegral
(indefinite) of an expression that is a polynomial in the variable
of integration. Otherwise it can give an approximation based on
the Taylor series. But when I tried it, I just got "out of memory"
(Degree of polynomial set to 3)

Richard harke

>
> Bob McElrath wrote:
> >I don't know whether to file this as a bug or not, since it seems the
> >solution to this integral is not known.  (None of Maple, Mathematica,
> >Maxima can do it, and in addition it does not seem to be in G&R)
> >
> >So, any integral experts want to take a crack at it?  In the problem I
> >am interested in, a is real and a>0, b is real and 0 <= b <= 1, and I
> >need the integral over theta=0..2*Pi, in case the definite integral is
> >easier.
> >
> >(3) -> integrate(exp(-a*sqrt(1-b*cos(theta))), theta)
> > 3) ->
> >
> >   >> Error detected within library code:
> >
> >   Function not supported by Risch d.e.
> >
> >This has arisen in a quantum mechanical calculation involving the
> >Hydrogen atom.
> >
> >Since the integrand is well-behaved, I have chosen to do this
> >numerically for my paper, however an analytic solution would be
> >desirable.  I'm having to carry out a 3-dimensional numeric integral
> >using the Cuhre method because the above integral is not known, and the
> >second of the three integrals is over things inside 'b' above, and is in
> >general quite complicated.  The third is even more nasty, and I think
> >I'd have to do numerically anyway.
> >
> >But, I'm surprised to find that such a simple integral has no known
> >solution.

\start
Date: Fri, 23 Dec 2005 11:48:31 -0600
From: Jay Belanger
To: Cliff Yapp
Subject: Re: This sentence is not a Lie

Cliff Yapp writes:
...
>> Also, I seem to recall seeing a package to do Lie symmetry
>> analysis of PDEs in Axiom, but I can't come across it again.
>> (Googling "Axiom" and anything mathematical doesn't always
>> give results about the CAS.) What, if anything, is out there?
>
> Maybe you are thinking of JET?
> http://www.iwr.uni-heidelberg.de/groups/compalg/seiler/Papers/HTML/Axiom.html
>  If so, good news - the author of the JET environment recently gave me
> permission to release an older version of his code he was able to
> locate!

I can't seem to find the project that I was thinking of, but you've
managed to (here and in the other message) come up with stuff better
than what I was looking for.  Pretty neat.

\start
Date: Fri, 23 Dec 2005 18:45:44 -0500
From: Tim Daly
To: Camm Maguire
Subject: xgcl-2

Camm,

can you make xgcl-2 work?

general.h fails to compile.

general.lsp generates general.h and general.c

general.h contains invalid function prototype syntax.
general.c contains invalid function definitions.

i tried hacking these by hand without success.

\start
Date: Fri, 23 Dec 2005 23:12:57 -0500
From: Tim Daly
To: Bill Page
Subject: re: Doyen
Cc: Alfredo Portes

Bill,

1) get the files
     save hyperdoc from http://daly.axiom-developer.org/hyperwin.tgz 

2) start the X server
    get Xming from http://freedesktop.org/wiki/Xming
    install Xming (just run the exe)

    in a command prompt window
    cd C:\Program Files\Xming
    xlaunch 
      (use multiple-windows option, use no startups, and click until exit)

3) start hypertex
    in cygwin do:

      mkdir /cygdrive/c/page
      cd  /cygdrive/c/page
      tar -zxf hyperwin.tgz
      cd hyper
      export AXIOM=/cygdrive/c/page/int/hyper
      ./hypertex

(note that hypertex uses $AXIOM and appends doc/hypertex/pages to find ht.db
 if you can't find ht.db then the AXIOM variable is wrong)

and you get the browser in a window.

\start
Date: Fri, 23 Dec 2005 23:49:04 -0500
From: Tim Daly
To: Bill Page
Subject: re: Doyen
Cc: Alfredo Portes

Note1: i forgot to mention that you have to set some shell variables
       to run under cygwin (HTPATH is optional)

set DISPLAY=127.0.0.1:0.0
set AXIOM=/cygwin/c/page/int/hyper
set HTPATH=doc/hypertex

Note2: the hyperdoc compiled below will also run OUTSIDE of cygwin:
       (be careful about / vs \

cd c:\page\nt\hyper
cp from cygwin the following dlls:
  cygX11-6.dll
  cygXpm-4.dll
  cygwin1.dll

set DISPLAY=127.0.0.1:0.0
set AXIOM=\page\int\hyper
set HTPATH=doc\hypertex

hyperdoc


=================================================================
Bill,

1) get the files
     save hyperdoc from http://daly.axiom-developer.org/hyperwin.tgz 

2) start the X server
    get Xming from http://freedesktop.org/wiki/Xming
    install Xming (just run the exe)

    in a command prompt window
    cd C:\Program Files\Xming
    xlaunch 
      (use multiple-windows option, use no startups, and click until exit)

3) start hypertex
    in cygwin do:

      mkdir /cygdrive/c/page
      cd  /cygdrive/c/page
      tar -zxf hyperwin.tgz
      cd int/hyper
      export AXIOM=/cygdrive/c/page/int/hyper
      ./hypertex

(note that hypertex uses $AXIOM and appends doc/hypertex/pages to find ht.db
 if you can't find ht.db then the AXIOM variable is wrong)

and you get the browser in a window.

\start
Date: Sat, 24 Dec 2005 17:23:55 -0500
From: Alfredo Portes
To: Tim Daly
Subject: Doyen

Tim,

I had problems today in the Open Source Lab while revising the instructions
(internet went down).  My approach is to revise one more time the building
instructions for the Doyen Fedora Live CD. Then, I will add the
ZWiki-Latexwiki to the building instructions of the Doyen Knoppix Live CD. =
I
will be in the lab early in the morning, hopefully the internet will be
working.

I will keep you updated.

Regards,

Jose Alfredo Perez

------=_Part_537_13721309.1135463035900

Tim,<br>
<br>
I had problems today in the Open Source Lab while revising the
instructions (internet went down).&nbsp; My approach is to revise one
more time the building instructions for the Doyen Fedora Live CD. Then,
I will add the ZWiki-Latexwiki to the building instructions of the
Doyen Knoppix Live CD. I will be in the lab early in the morning,
hopefully the internet will be working. <br>
<br>
I will keep you updated.<br>
<br>
Regards,<br>
<br>
Jose Alfredo Perez<br>


\start
Date: Mon, 26 Dec 2005 12:57:09 -0500
From: Bill Page
To: Tim Daly
Subject: RE: [Alfredo Portes: Doyen]
Cc: Alfredo Portes

On December 26, 2005 1:26 AM Tim Daly (root) wrote:

> 
> Can you tell Alfredo how to upload files to the wiki?
> Or set up a directory? It would be good to have the
> instructions for creating a doyen cd on the wiki.

For the instructions I suggest adding a new link to the
page:

http://wiki.axiom-developer.org/Doyen

Just click edit and add a short introductory paragraph that
includes a wiki page name (any word having more than one uppercase
letter) suchs as DoyenCD. Then Save the page and there will be
an "empty" link with a blue ? question mark beside it. Click on
the ? to create a new page. Add the instructions there (usually
cut and paste from somewhere else) and click save.

If you want to practice first, you can start instead at the
SandBox page:

http://wiki.axiom-developer.org/SandBox

Edit and create a page here using the same method as above.
The difference is just that anything you do "in the SandBox"
is not broadcast to the list.


On Sun, 25 Dec 2005 22:35:12 -0500 Alfredo Portes wrote:
> 
> I have a request for you. Is it possible to have a directory
> in axiom-developer.org called Doyen, where I can put files to 
> download when doing the instructions (eg. wget .....). This is
> because files that are being used in the instructions keep being
> moved, and the links dont work anymore. In this way, we can have
> when needed.

Generally I would discourage you from creating a secondary
distribution for common software such as 'wget'. I don't think
it has moved from it's home in a long time:

http://www.gnu.org/software/wget/wget.html

Perhaps you just need to choose the links more carefully?

If you are sure that you want to do this, we could however do it
several different ways. One would be for you to have a developer
account on axiom-developer.org. A second way would be for you to
register for access to the Axiom Portal. On the portal you have
your own private workspace where you can upload whatever you want
and let people download it from there.

> 
> I am just finishing revising the instructions, (the problem of
> the internet in the lab continues, so I am working at home).
> You told me that you wanted to have a version that can display
> a latex file. What about a pamphlet file? I emailed Mr. Page to
> have some information on the way MathAction can support pamphlets.
> 

I am sorry that the holidays have delayed my intention to update
the latexwiki repository with the newest version of the pamphlet
support code. If you already have LatexWiki working with Axiom
support, then adding the pamphlet support should be quite easy.
I will let you know as soon as it is available. In the mean time
you might want to read the page:

http://wiki.axiom-developer.org/210PamphletSupportOnMathAction

for some background information on how it works.

\start
Date: Mon, 26 Dec 2005 16:12:00 -0600
From: MathAction (alfredo)
To: MathAction
Subject: [DoyenCD] (new) 

\documentclass{article}
\usepackage{axiom}
\usepackage{graphics}
\begin{document}
\title{Doyen Build Instructions}
\author{Tim Daly, Jose Alfredo Perez,  Wilken Rivera}
\maketitle
\begin{abstract}

This document shows the explicit steps necessary to create a
Doyen LiveCD from Red Hat's Fedora Core 3 distribution. 

The Doyen CD is a scientific platform which can be distributed
at various science conferences. It enables scientific software
to be distributed as literate programs.

The Doyen CD has a local wiki and a set of scientific packages
which can be scripted from the wiki pages. The scientific packages
can be tailor to the specific conference.

\end{abstract}

\section{Prepare a clean Fedora Core 3 System}
\subsection{Overview}

\begin{itemize}

\item Obtain Fedora Core 3 iso images from the Fedora Website. 
\item Disk 1 and Disk 2 should be enough for a basic installation. 
\item Create installation CDs from the iso images downloaded.
\item Boot up you system with the installation disk 1 to begin the Fedora
installation process.

\end{itemize}

In the first screen, you will be presesented with some bootoptions. Press Enter to continue.

\subsection{CD Media test}

For the option to test the media CD before installation, select skip. Once the welcome screen comes up, proceed to click next.

\subsection{Language Selection}

In the language selection, select your prefered language and click next.

\subsection{Keyboard Configuration}

In the keyboard configuration, select your keyboard configuration.

\subsubsection{Special Case}

At this point depending if your system is not clean, an upgrade examine window will appear. Please select "Install Fedora Core"

\subsection{Installation Type}

In the installation type window, select "Custom".

\subsection{Disk Partioning Setup}

In the Disk Partioning Setup, select Manually partition with Disk Druid.

\subsection{Disk Setup}

Note: For our base distribution, only three partitions should be created.
A boot partition of 100 MB, a swap space generally the double of your amount of RAM,
and a root partition which size depends on the programs to be installed in the system.

\subsubsection{Boot Partition}

In the Disk setup, select new. In mount point select /boot. File system type ext3. Size 100 MB. 

\subsubsection{Swap Partition}

Create a swap partition. Select new. Select file system type swap, and size 512 MB.

\subsubsection{Root Partition}

Select new. Select mount point /. Select the file system type to be: ext3. Select "Fill to maximum allowable size" or the size you would like for the root partition. 2GB should be enough. Click Ok. Click Next to finish with the Disk Setup menu.

\subsection{Boot Loader Configuration}

Leave the default boot loader configuration.

\subsection{Network Configuration}

Leave the DHCP option for the eth0 by default. For the Hostname, select manually and in the text box type doyen.

\subsection{Firewall Configuration}

Select enable firewall and enable Remote Login (SSH) and Web Server(HTTP, HTTPS). Also, select disable for SELinux.

\subsection{Additional Language Support}

Select your prefer language.

\subsection{Time Zone Selection}

Select your time zone location.

\subsection{Set Root Password}

Select the desire password for the root account. In our base CD the password by default is doyen@org

\subsection{Package Group Selection}

\begin{itemize}

\item Select default selections for X Window System section and the Gnome section.

\item In the editors section, select Emacs and Vim-Enhanced.

\item Select Graphical Internet and remove all packages except Firefox.

\item Select and remove all packages in text-based internet.

\item Remove all Office/Productivity packages.

\item In the Sound and video packages remove everything except cdrecord and mkisofs packages.

\item Remove all packages in the Graphics section.

\item Leave all the other sections unchanged and click next.

\end{itemize}

Click next to begin installation. Follow the proper prompts when asked to insert other media CDs. When the installation is complete, remove the CD and reboot your computer.

\subsection{Finishing System Installation}

\subsubsection{Welcome}

At the new Welcome screen, click next.

\subsubsection{License Agreement}

Proceed to accept the license agreement. Click next.

\subsubsection{Date and Time}

Set the proper date and time. Click next.

\subsubsection{Display}

In Display configuration, click configure and select "Generic CRT Display" with 1024x768 resolution and color depth of Millions of colors. Click next.

\subsubsection{System User}

For the System User options, provide this information:

\begin{itemize}

\item Username: doyen.
\item Full name: Doyen user.
\item Password: doyen@org.
\item Confirm Password: doyen@org.

\end{itemize}

\subsubsection{Sound Card}

You can skip the sound card testing and click next.

\subsubsection{Additional CDs}

Leave this section unchanged and click next.

\subsection{Finish Setup}

Click next to complete the installation.

\subsubsection{Login Screen}

Login as root user.

\subsubsection{Services Configuration}

You need to disable unwanted system services from autoloading.

\begin{verbatim}
Click on Applications -->  System Settings --> Server Settings --> Services
\end{verbatim}

Uncheck all except: 

\begin{itemize}
\item acpid
\item anacron 
\item apmd
\item atd
\item autofs
\item crond
\item gpm
\item hadaemon
\item iptables
\item netfs
\item netplugd
\item network
\item pcmcia
\item sshd
\item syslog
\item xinetd
\end{itemize}

Click save and close the window.

\section{Customizing Live CD}
\subsection{Software Installation}

The package installation for the Doyen distribution are done by using Yum and Wget to obtain all the required rpm files from various locations.
The next step configures a file required for yum to search and install packages. Do not skip this step.
Open a terminal window.

<<step>>=

rpm --import /usr/share/rhn/RPM-GPG-KEY-fedora

@

\subsection{Update System}

You need to update the current packages installed in your system. Proceed to do a yum update. This step may take a while.

<<step>>=

yum -y update

@

\subsubsection{Latex}

To install the Latex software package you need to use yum and install tetex, tetex-latex, and tetex-xdvi packages.

<<step>>=

yum -y install tetex

yum -y install tetex-latex

yum -y install tetex-xdvi

@

\subsubsection{Noweb Software Package}

Create a /tmp/pkgs directory which will contain those packages that are not available using Yum, but that are going to be obtained using Wget.

<<step>>=

mkdir /tmp/pkgs

cd /tmp/pkgs

wget ftp://ftp.sylvan.com/pub/noweb/noweb-2.10a-1.i386.rpm

wget ftp://ftp.sylvan.com/pub/noweb/Icon2-9.3.2-7.i386.rpm

rpm -ivh Icon2-9.3.2-7.i386.rpm

rpm -ivh noweb-2.10a-1.i386.rpm

@

\subsubsection{Installing Zope, Python-Imaging, and ZWiki}

In this section you will install and configure the ZWiki server. First,  download the Zope 2.8 rpm package from the rpmfind.net server and the zwiki package.

<<step>>=

wget ftp://rpmfind.net/linux/fedora/extras/3/i386/python-imaging-1.1.4-7.i386.rpm

wget ftp://rpmfind.net/linux/fedora/extras/3/i386/zope-2.8.0-2.fc3.i386.rpm

wget http://zwiki.org/releases/ZWiki-0.43.0.tgz

@

Next, proceed to install the Zope and Python-imaging rpm packages.

<<step>>=

rpm -ivh python-imaging-1.1.4-7.i386.rpm
rpm -ivh zope-2.8.0-2.fc3.i386.rpm

@

Add Zwiki to Zope server.

<<step>>=

tar -xzf ZWiki-0.43.0.tgz -C /usr/lib/zope/lib/python/Products/

@

Configure root user for Zwiki access.

<<step>>=

/usr/bin/zopectl adduser root doyen@org

@

Test and deploy Zwiki server.

<<step>>=

/etc/init.d/zope start

@

\subsubsection{Axiom}

Download the Axiom software package from axiom.developer server.

<<step>>=

wget http://axiom.axiom-developer.org/axiom-website/DOWNLOADS/axiom-Feb2005-Fedora3.bin.tgz

tar -xzf axiom-Feb2005-Fedora3.bin.tgz -C /etc/

@

In order to use Axiom, you  must include Axiom in the user path. Open the Vi editor and edit the .bash\_profile file in the root directory and the doyen user home directory with the next set of changes. You can also copy the .bash\_profile provided in the appendix of this document into the /root and /home/doyen directories.

<<step>>=

vi .bash_profile
export AXIOM=/etc/axiom/mnt/fedora3
append AXIOM to PATH:
PATH=\$PATH:\$HOME/bin:\$AXIOM/bin

@

Activate the changes to the current session.

<<step>>=

source ~/.bashrc
source ~/.bash_profile

@

\subsubsection{LatexWiki}

Download the LatexWiki package from mcelrath.org webpage. LatexWiki is a patch to the ZWiki package that allows rendering of in-line Latex.

<<step>>=

cd /tmp/pkgs

wget http://www.easyleading.org/Downloads/LocalFS-1.3-andreas.tar.gz

@

Unpack the LatexWiki distribution into the Zope installation's Products directory.

<<step>>=

tar -xvf LocalFS-1.3-andreas.tar.gz -C /usr/lib/zope/lib/python/Products/

@

Download and install darcs

<<step>>=

wget http://download.fedora.redhat.com/pub/fedora/linux/extras/3/i386/darcs-1.0.3-2.fc3.i386.rpm

rpm -ivh darcs-1.0.3-2.fc3.i386.rpm

@

<<step>>=

darcs get http://bob.mcelrath.org/darcs/latexwiki

@

\subsubsection{Xorg file configuration}

Use Vi to properly configure the video support.

<<step>>=

vi /etc/X11/xorg.conf

@

For multiple video card support change the driver name for the video card indentifier. Set driver value to "vesa".

\subsubsection{Generic mouse configuration}

Create the moused file that is in the appendix or copy the one generated for you by this document and place in the /etc/init.d directory:
Add the script to the run levels 3, 4, and 5.

<<step>>=

ln -s /etc/init.d/moused /etc/rc3.d/S01moused

ln -s /etc/init.d/moused /etc/rc4.d/S01moused

ln -s /etc/init.d/moused /etc/rc5.d/S01moused

ln -s /etc/init.d/moused /etc/rc6.d/K01moused

ln -s /etc/init.d/moused /etc/rc0.d/K01moused

@

\subsubsection{Build Live CD scritps}

Download the scripts necessary to build the CD from the Linux-Live webpage.

<<step>>=

cd /tmp/pkgs

wget http://www.linux-live.org/dl/linux-live-5.0.16.tar.gz

@

Get the precompiled 2.6.11.8 kernel with SquashFS and UnionFS module support.

<<step>>=

wget http://ftp.linux.cz/pub/linux/slax/kernel/linux-kernel-2.6.11.8-i486-4.tgz

tar -xzf linux-kernel-2.6.11.8-i486-4.tgz -C /

tar -xzf linux-live-5.0.16.tar.gz -C /tmp

@

Edit the config file and make these changes: Change KERNEL name to KERNEL="2.6.11.8". Save and close the config file.

<<step>>=

cd /tmp/linux-live-5.0.16/

vi config

@

Create module dependecies for newly installed kernel.

<<step>>=

depmod -b / 2.6.11.8

@

\subsubsection{Clean Up and ISO creation and burnning}

Finally, proceed to delete temporary files created by the package installation process to reduce the size of the CD to be created. Then, run the runme.sh script that will create the ISO image.

<<step>>=

rm -rf /tmp/pkgs
rm -rf /var/cache/yum/base/pakcages/*
rm -rf /var/cache/yum/updates-released/packages/*

@

Run the runme.sh script, which will create the distribution iso.

<<step>>=

sh runme.sh

@

If you have a CD recorder unit, you can create the Doyen CD by running:

\section{Appendix}

\subsection{MOUSED}

<<moused>>=
                                                                                                                                                             
#!/bin/sh
# Linux
                                                                                                                                                             
DAEMON=moused
KERNEL=`uname -r`
MODULE=psmouse.ko
prog=mouse
config () {
        # Is this a printconf system?
        if [ -f /lib/modules/\$KERNEL/kernel/drivers/input/mouse/\$MODULE ]
        then
               \# run printconf-backend to set up the configuration.
                /sbin/modprobe psmouse
        fi
}
                                                                                                                                                             
start () {
        echo -n $"Starting $prog: "
        config
}
stop () {
        \# stop daemon
        echo -n $"Stopping $prog: "
        rmmod psmouse
}
                                                                                                                                                             
case $1 in
        start)
                start
        ;;
        stop)
                stop
        ;;
 *)
                                                                                                                                                             
        echo $"Usage: $prog {start|stop|restart|condrestart|reload|status}"
        exit 1
esac
                                                                                                                                                             
@

\subsection{XORG.CONF}

<<xorg>>=

# XFree86 4 configuration created by pyxf86config

Section "ServerLayout"
	Identifier     "Default Layout"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"

# RgbPath is the location of the RGB database.  Note, this is the name of the 
# file minus the extension (like ".txt" or ".db").  There is normally
# no need to change the default.
# Multiple FontPath entries are allowed (they are concatenated together)
# By default, Red Hat 6.0 and later now use a font server independent of
# the X server to render fonts.
	RgbPath      "/usr/X11R6/lib/X11/rgb"
	FontPath     "unix/:7100"
EndSection

Section "Module"
	Load  "dbe"
	Load  "extmod"
	Load  "fbdevhw"
	Load  "glx"
	Load  "record"
	Load  "freetype"
	Load  "type1"
	Load  "dri"
EndSection

Section "InputDevice"

# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
#	Option	"Xleds"		"1 2 3"
# To disable the XKEYBOARD extension, uncomment XkbDisable.
#	Option	"XkbDisable"
# To customise the XKB settings to suit your keyboard, modify the
# lines below (which are the defaults).  For example, for a non-U.S.
# keyboard, you will probably want to use:
#	Option	"XkbModel"	"pc102"
# If you have a US Microsoft Natural keyboard, you can use:
#	Option	"XkbModel"	"microsoft"
#
# Then to change the language, change the Layout setting.
# For example, a german layout can be obtained with:
#	Option	"XkbLayout"	"de"
# or:
#	Option	"XkbLayout"	"de"
#	Option	"XkbVariant"	"nodeadkeys"
#
# If you'd like to switch the positions of your capslock and
# control keys, use:
#	Option	"XkbOptions"	"ctrl:swapcaps"
# Or if you just want both to be control, use:
#	Option	"XkbOptions"	"ctrl:nocaps"
#
	Identifier  "Keyboard0"
	Driver      "keyboard"
	Option	    "XkbModel" "pc105"
	Option	    "XkbLayout" "us"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5"
	Option	    "Emulate3Buttons" "yes"
EndSection

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "ViewSonic E70"
	HorizSync    30.0 - 70.0
	VertRefresh  50.0 - 120.0
	Option	    "dpms"
EndSection

Section "Device"
	Identifier  "Videocard0"
	Driver      "radeon"
	VendorName  "Videocard vendor"
	BoardName   "ATI Radeon 9200SE"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Videocard0"
	Monitor    "Monitor0"
	DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Depth     24
		Modes    "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
	EndSubSection
EndSection

Section "DRI"
	Group        0
	Mode         0666
EndSection

@

<<bashprofile>>=

# .bash_profile
                                                                                                                                                             
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
                                                                                                                                                             
# User specific environment and startup programs
                                                                                                                                                             
export AXIOM=/etc/axiom/mnt/fedora3
                                                                                                                                                             
PATH=$PATH:$HOME/bin:$AXIOM/bin
                                                                                                                                                             
export PATH
unset USERNAME

@


\section{Makefile}

<<*>>=
notangle=/usr/bin/notangle
noweave=/usr/bin/noweave

all: extract do latex
	@echo done

extract: steps.pamphlet
	${notangle} -Rstep steps.pamphlet >steps.sh
	${notangle} -Rmoused steps.pamphlet >moused
	${notangle} -Rxorg steps.pamphlet >xorg.conf
	${notangle} -Rbashprofile steps.pamphlet >.bash_profile
	${noweave} -delay steps.pamphlet >steps.tex
	
do: steps.pamphlet
	@echo executing

latex: steps.tex
	@echo making steps.dvi from steps.tex
	latex steps.tex
	latex steps.tex
	pdflatex steps.tex

remake: steps.pamphlet
	@echo extracting makefile
	${notangle} -t8 steps.pamphlet >Makefile

@
\end{document}

\start
Date: Mon, 26 Dec 2005 18:01:54 -0500
From: Bill Page
To: Alfredo Portes
Subject: RE: Wiki

On December 26, 2005 5:21 PM Alfredo Portes wrote:

> Thanks Mr. Page. It works now.
> http://wiki.axiom-developer.org/DoyenCD . This is first draft.
> I need to upload a new revision (some problems at CCNY are
> stopping me).
>
> I really like the functionality of your server to display
> pamphlet files. This is just what I expect to have in the
> Doyen Live CD.
>
> I have a question regarding the display, is it possible to see
> the whole document? Can I go to all the pages? if so, how? 

Yes, of course. Just click 'pdf', 'dvi' or 'ps' to see the
complete document. For 'pdf' you need Acrobat Reader or equivalent
(acroread or xpdf). For 'dvi' you need a dvi viewer (xdvi etc)
and for 'ps' you can use Ghostview.

\start
Date: Mon, 26 Dec 2005 19:42:49 -0500
From: Tim Daly
To: Alfredo Portes
Subject: Re: Wiki

cool. i've downloaded a copy and will try to build it.
i'll be on the road for 3 weeks starting tomorrow
so my connection might be a bit spotty. i'll try 
the build as soon as i can. there are a few typos
in the instructions we need to clean up.

\start
Date: Tue, 27 Dec 2005 18:52:21 -0600
From: Tim Daly
To: list
Subject: Axiom Volume 1: Tutorial

There is a new book "Axiom Volume 1: Tutorial" ISBN 1-4116-6597-X

It was printed and approved today.
It should be available at Amazon, Barnes & Noble, Borders, etc. shortly.

\start
Date: Tue, 27 Dec 2005 17:44:12 -0800
From: Ed Borasky
To: Tim Daly
Subject: Re: Axiom Volume 1: Tutorial

How different is the "hard copy" from the draft on the web site? I just 
downloaded the draft last week.

Tim Daly wrote:

>There is a new book "Axiom Volume 1: Tutorial" ISBN 1-4116-6597-X
>
>It was printed and approved today.
>It should be available at Amazon, Barnes & Noble, Borders, etc. shortly.

\start
Date: Tue, 27 Dec 2005 21:17:35 -0500
From: Bill Page
To: Stephen Watt
Subject: open source license for Aldor

Dear Stephen Watt,

It's been more than two months since your email concerning the
possible open source license for Aldor. I have not heard any
news of any sort about Aldor since then.

When you have a few moments to spare, could you please let me
know the status of the Aldor source license? I am anxious to
resolve this issue since I think it would be of great benefit
to both the Aldor project and the open source Axiom project.

I am hoping to hear from you soon.

Sincerely,
Bill Page.

> -----Original Message-----
> From: Stephen Watt [mailto:Stephen Watt] 
> Sent: October 20, 2005 11:07 PM
> To: Bill Page
> Subject: Re: compiling Aldor from source for x86-64
> 
> 
> Dear Bill,
> 
> This is to let you know that I got your message.  I've taken 
> a bit longer to respond than planned because we are now
> contemplating adopting a complete open source license for
> everyone.  This might take a bit of time, however, so it
> might make sense to go ahead on an individual basis with
> you beforehand.

\start
Date: Wed, 28 Dec 2005 12:21:16 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Axiom Volume 1] (new) 

<P STYLE="margin-bottom: 0.2in"><A HREF="http://www.lulu.com/"><FONT COLOR="#000080"><IMG SRC="http://www.lulu.com/images/logo_lulu.gif" NAME="graphics1" ALT="Lulu.com" ALIGN=BOTTOM WIDTH=115 HEIGHT=54 BORDER=1></FONT></A>
</P>
<P>Axiom Developers,<BR><BR>Axiom Volume 1: Tutorial on Lulu.com Here
is a link to the first volume of the new Axiom book on Lulu.com.
Thanks Tim!<BR><BR>Bill Page</P>
<TABLE CELLPADDING=2 CELLSPACING=2>
	<TR>
		<TD>
			<P><IMG SRC="http://www.lulu.com/items/volume_8/190000/190827/2/preview/detail_190827.jpg" NAME="graphics2" ALT="Axiom Volume 1: Tutorial" ALIGN=BOTTOM WIDTH=110 HEIGHT=142 BORDER=0>

						</P>
		</TD>
		<TD>
			<H2><A HREF="http://www.lulu.com/content/190827" TARGET="_blank">Axiom
			Volume 1: Tutorial</A></H2>
			<P STYLE="margin-bottom: 0.2in">by <A HREF="http://www.lulu.com/daly">Timothy
			Daly </A>
			</P>
			<P STYLE="margin-bottom: 0.2in">This is a tutorial introduction to
			the Axiom Computer Algebra system. It includes examples that
			illustrate some of the basic abilities.</P>

			<P><A HREF="http://www.lulu.com/content/190827"><IMG SRC="http://www.lulu.com/images/button_buy.gif" NAME="graphics3" ALT="Buy Now!" ALIGN=BOTTOM WIDTH=62 HEIGHT=18 BORDER=0></A>
						</P>
		</TD>
	</TR>
</TABLE>
<P>Lulu.com provides the creators and owners of digital content with
control over how they use and share their work. Individuals,
companies, and groups can use Lulu to publish and sell a variety of
digital content, including books, photos, images, and music.</P>
<P><A HREF="http://www.lulu.com/help/node/view/1699">Lulu Privacy
Pledge</A></P>

\start
Date: Wed, 28 Dec 2005 12:24:00 -0600
From: MathAction (Bill Page)
To: MathAction
Subject: [Axiom Volume 1] (new) 

<P STYLE="margin-bottom: 0.2in"><A HREF="http://www.lulu.com/"><FONT COLOR="#000080"><IMG SRC="http://www.lulu.com/images/logo_lulu.gif" NAME="graphics1" ALT="Lulu.com" ALIGN=BOTTOM WIDTH=115 HEIGHT=54 BORDER=1></FONT></A>
</P>
<P>Axiom Developers,<BR><BR>Axiom Volume 1: Tutorial on Lulu.com Here
is a link to the first volume of the new Axiom book on Lulu.com.
Thanks Tim!<BR><BR>Bill Page</P>
<TABLE CELLPADDING=2 CELLSPACING=2>
	<TR>
		<TD>
			<P><IMG SRC="http://www.lulu.com/items/volume_8/190000/190827/2/preview/detail_190827.jpg" NAME="graphics2" ALT="Axiom Volume 1: Tutorial" ALIGN=BOTTOM WIDTH=110 HEIGHT=142 BORDER=0>

						</P>
		</TD>
		<TD>
			<H2><A HREF="http://www.lulu.com/content/190827" TARGET="_blank">Axiom
			Volume 1: Tutorial</A></H2>
			<P STYLE="margin-bottom: 0.2in">by <A HREF="http://www.lulu.com/daly">Timothy
			Daly </A>
			</P>
			<P STYLE="margin-bottom: 0.2in">This is a tutorial introduction to
			the Axiom Computer Algebra system. It includes examples that
			illustrate some of the basic abilities.</P>

			<P><A HREF="http://www.lulu.com/content/190827"><IMG SRC="http://www.lulu.com/images/button_buy.gif" NAME="graphics3" ALT="Buy Now!" ALIGN=BOTTOM WIDTH=62 HEIGHT=18 BORDER=0></A>
						</P>
		</TD>
	</TR>
</TABLE>
<P>Lulu.com provides the creators and owners of digital content with
control over how they use and share their work. Individuals,
companies, and groups can use Lulu to publish and sell a variety of
digital content, including books, photos, images, and music.</P>
<P><A HREF="http://www.lulu.com/help/node/view/1699">Lulu Privacy
Pledge</A></P>

\start
Date: Wed, 28 Dec 2005 22:30:40 -0600
From: Tim Daly
To: list
Subject: tutorial image

the source .pamphlet file as well as an exact pdf image
will be available in the src/doc subdirectory the next
time i upload axiom (--patch-47). the cover art will also
be there but unless you have a bookbinding mechanism or a
lot of glue and patience you're not likely to have a
hardcopy. it's about 250 pages and is much changed from the
--patch-46 or other versions. 

i'm away on vacation at the moment with very spotty network
connection but i have a parallel build/test cycle running at
home which should all complete cleanly and be ready when i
return (likely on saturday). i plan to upload --patch-47
on sunday if the tests go cleanly.

\start
Date: 29 Dec 2005 07:35:24 -0500
From: Camm Maguire
To: Tim Daly
Subject: Re: xgcl-2

Greetings, and thanks for pointing this out.  I should have a solution
checked in soon.  What ideas do you have for using xgcl-2?

Take care,

Tim Daly writes:

> Camm,
> 
> can you make xgcl-2 work?
> 
> general.h fails to compile.
> 
> general.lsp generates general.h and general.c
> 
> general.h contains invalid function prototype syntax.
> general.c contains invalid function definitions.
> 
> i tried hacking these by hand without success.

\start
Date: Thu, 29 Dec 2005 09:58:48 -0500
From: Lulu
To: list
Subject: Check this out at Lulu.com!

 <http://www.lulu.com> Lulu.com

Axiom Developers,

Axiom Volume 1: Tutorial on Lulu.com Here is a link to the first volume =
of the new Axiom book on Lulu.com. Thanks Tim!

Bill Page

 Axiom Volume 1: Tutorial =
<http://www.lulu.com/author/display_thumbnail.php?fCID=190827&fSize=d=
etail_&1135790447> =09

Axiom Volume 1: Tutorial <http://www.lulu.com/content/190827>


by Timothy Daly  <http://www.lulu.com/daly>

This is a tutorial introduction to the Axiom Computer Algebra system. It =
includes examples that illustrate some of the basic abilities.

 <http://www.lulu.com/content/190827> Buy Now!

This e-mail was sent by Lulu on behalf of Bill Page =
(Bill Page).

Lulu.com provides the creators and owners of digital content with =
control over how they use and share their work. Individuals, companies, =
and groups can use Lulu to publish and sell a variety of digital =
content, including books, photos, images, and music.

Lulu Privacy Pledge <http://www.lulu.com/help/node/view/1699>


<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; =
charset=UTF-8">

	<title>Something cool at Lulu from Bill Page</title>
=09
	<style type="text/css">
		<!--
/*** Common ***/

h1 { display: inline; }
body,td,th { font-family: verdana, sans-serif; font-size: small; }
a { color: #157ab4; }
img { border: 0; }
table { width: 100%; border-collapse: collapse; border-spacing: 0; =
margin-bottom: 1em; }
ol, ul { list-style: none; margin-left: 0; padding-left: 0; }
ol li+li { margin-top: 1em; }

/*** Order Receipt ***/

#headlinks { text-align: right; }
#paymentInfo th { text-align: left; padding: 10px 10px; }
#paymentInfo td { text-align: left; padding: 0 10px 10px; =
vertical-align: top; }
#paymentInfo td+td { border-left: 1px solid #ccc; }
#paymentInfo th+th { border-left: 1px solid #ccc; }
#paymentInfo { background: #eee; }
.cartHeader th { background: #ccc; padding: 3px; font-size: x-small; =
white-space: nowrap; }
.cartPricing th { background: #fff; text-align: right; }
.cartRow td { border-bottom: 1px solid #ccc; padding: 5px 0; }
.cartIcon { vertical-align: top; width: 3%; }
.cartqty { text-align: center; }
.cartPricing td { text-align: right; padding: 5px 0;  }
.cartItem { text-align: left; width: 100%; }
.cartPrice { text-align: right; }
.fineprint,.thanks,.replyonly { text-align: left; }
.replyonly { font-style: italic; }

/*** Email to a Friend ***/

.emailItem td { border-top: 1px solid #aaa; border-bottom: 1px solid =
#aaa; padding: 10px 5px; }
-->	</style>
<body>

<a href="http://www.lulu.com"><img =
src="http://www.lulu.com/images/logo_lulu.gif" alt="Lulu.com"/></a>


<p>Axiom Developers,<br/><br/>Axiom Volume 1: Tutorial on Lulu.com

Here is a link to the first volume of the new Axiom
book on Lulu.com.

Thanks Tim!<br/><br/>Bill Page</p>



<table class="emailItem">
	<tr>
		<td>
			<img border="0" =
src="http://www.lulu.com/author/display_thumbnail.php?fCID=190827&fSi=
ze=detail_&1135790447" alt="Axiom Volume 1: Tutorial"/>
		</td>
		<td>
			<h2><a href="http://www.lulu.com/content/190827" =
target="_blank">Axiom Volume 1: Tutorial</a></h2>	=09
			<p>by <a href="http://www.lulu.com/daly">Timothy Daly </a></p>
			<p>This is a tutorial introduction to the Axiom
Computer Algebra system. It includes examples
that illustrate some of the basic abilities.</p>
			<p><a href="http://www.lulu.com/content/190827"><img =
src="http://www.lulu.com/images/button_buy.gif" width="62" =
height="18" border="0" alt="Buy Now!"/></a>
</p>
		</td>
	</tr>
</table>

	=09

<p>This e-mail was sent by <a href="www.lulu.com">Lulu</a> on behalf =
of Bill Page (<a =
href="mailto:Bill Page">bill.page1@synthesis.anik=
ast.ca</a>).</p>

<p>Lulu.com provides the creators and owners of digital content with =
control over how they use and share their work. Individuals, companies, =
and groups can use Lulu to publish and sell a variety of digital =
content, including books, photos, images, and music.</p>	=09

<p class="fineprint"><a =
href="http://www.lulu.com/help/node/view/1699">Lulu Privacy =
Pledge</a></p>
		=09
</body>
</html>




------=_NextPart_000_0049_01C60C5E.7DF67200--





