

This file describes the domains contained in realalg.spad. To compile just type
)co realalg 
under the axiom prompt

This version was  compiled on May  26 1992 and  should be considered  as  a 0.9
version offered  to  the  sagacity  of Axiom  gurus.  If anyone has   comments,
suggestions, corrections please contact me  via  e-mail at : "rr@posso.ibp.fr".
Feel  free to rewrite or change  any part of  this code, just  let me know your
improvements. My postal address is :

		Renaud Rioboo
		LITP- Boite 168
		Institut Blaise Pascal
		Universite Pierre et Marie Curie
		F75252 Paris CEDEX 05
------------------------------------------------------------------------------

First domain is :
)ab domain ROINT RightOpenInterval

Takes   as  argument   an  ordered field   and  constructs   intervals   [a,b[,
Representation is a two fields record left : Afield and right :A field. This is
much  like the old version of SEGMENT. It exports a function  SEGMENT to easily
contruct terms like a..b.

In fact I  rewrote the SEGMENT  domain only  because the new version of SEGMENT
didn't suit  my  needs with  the new "incr"  field in  its representation. This
should be part of more general interval manipulations domains.


Second domain is :
)ab domain SOAE SimpleOrderedAlgebraicExtension

Takes as arguments:
        - an ordered field  TheField ; in fact  Field should be archimedean for
things to work correctly, but there is no such notion in Axiom for now.

        - a  univariate square free polynomial pol  of  type SUP(TheField). pol
should describe  a real algebraic  number. WARNING :  in current inplementation
pol is PHYSICALLY MODIFIED whenever a factor is found.

        - a left close right  open  interval seg  of type ROINT(TheField).  seg
should isolate one single root of pol (order  of parameters is  not very good I
will change that  soon). seg  should also  be  such that  : pol(hi(seg)) <>  0.
WARNING : seg is PHYSICALLY MODIFIED whenever a smaller one is found.

        - a   printing form extvar of  type  OUTFORM to  type out the algebraic
numbers. 

SOAE  implements the notion  of  ordered algebraic extension, i.e.  computation
modulo a specific real algebraic number.  Algorithms are usually well-known and
described in my thesis. Some improvements were done  for  linear terms to speed
up some "simple" computations.

Operations are those of an ordered field plus a certain number of constructors,
access functions, ... As for now all  functions are  exported ; future versions
should hide some like : changePoly, changeSegment, chooseFactor, ... Please see
the code if you want to know more.

General considerations : 

        - side effect on parameters implies that a user  should make a  copy of
"seg" or "pol" if he wants to see a non updated version of them. 

        - this code is "crude" code, many global variables can be set  to avoid
recomputations, this will be done in future versions.

        - strategy to split interval during sign computations is simply  to cut
it in two  equal  parts  and select the   correct   one, a smarter  version  is
currently being designed.

Third domain is :

)ab domain RECLOS RealClosure

Takes  as argument an ordered  field (as above, it  should  be archimedian) and
enables to work in the real closure of the  field.  Elements are represented as
either in the  field either as a  tower of algebraic  terms. An  algebraic term
contains  information necessary to  define a simple   extension where effective
computations  are done. Please see my  submission to  Issac   92 for details or
e-mail me to have the paper.

Operations  are  those  of an  ordered  field    plus constructors and  utility
functions used mainly  to  manipulate the tower of  a  number ; some should  be
hidden to the user and will be in future versions.

General considerations : 

        - most of the time is spend making and unmaking towers, current code is
far from optimized since all  operations check  for algebraicity. It is not yet
clear to me which one should check and which one should not.

        - since RECLOS use SOAE side effects  are reflected here ; constructors
which copy  their argumentsmay be  needed. I  think I will  include this future
versions leaving an "unsafe" version to the programmer using pretend. 

        - constructors are reduced to their simplest form and take as arguments
a polynomial and an  interval. I don't know  whether constructors  like  "sqrt"
should be provided. To  actually produce an element one has to use the function
"algebraicOf". It  takes as arguments a  polynomial,  an isolating interval for
the polynomial   and a symbol name  for  the number.  Functions to produce this
initial interval are written in isolation packages that will be included later.


Generaly speaking, I think that some new Axiom categories could be written to
clarify the different notions of ordered rings and fields. This would allow
more general packages dealing with the usual "real numbers". I still have to
clarify what is really needed for general puposes.