Introduction. The Java Algebra System (JAS) is an object oriented, type safe and multi-threaded approach to computer algebra. JAS provides a well designed software library using generic types for algebraic computations implemented in the Java programming language using the JVM runtime infrastructure. The library can be used as any other Java software package or it can be used interactively or interpreted through a jython (Java Python) or jruby (Java Ruby) front end, there is also an Android App based on Ruboto (jruby for Android). The focus of JAS is at the moment on commutative, solvable and non-commutative polynomials, power series, Groebner bases, factorization, real and complex roots and applications. By the use of Java as implementation language JAS is 64-bit and multi-core CPU ready and can make use of mutiple CPUs where available.
The library contains at the moment of the following packages:
RingElem and RingFactory.
BigRational, BigInteger,
  ModInteger, BigDecimal or
  BigComplex.
GenPolynomial, GenSolvablePolynomial,
  GenWordPolynomial and others such as
  AlgebraicNumber and a polynomial parser
  GenPolynomialTokenizer.
GenVector or GenMatrix.
ReductionSeq, GroebnerBaseAbstract,
  GroebnerBaseSeq, GroebnerBaseParallel and
  GroebnerBaseDistributedHybridEC.  There are also Gröbner
  bases in polynomial rings over principal ideal domains and Euclidean
  domains, so called D- and E-Gröbner bases,
  e.g. EGroebnerBaseSeq. New are Gröbner bases in
  free non-commutative polynomial rings over (skew) fields,
  see WordGroebnerBaseSeq.
ModGroebnerBase or SolvableSyzygy.
Ideal
  or SolvableIdeal. Comprehensive Gröbner bases for
  polynomial rings over parameter rings are contained in class
  ComprehensiveGroebnerBaseSeq.  Latest additions are
  zero and arbitrary dimensional radical-, irreducible-, prime- and
  primary-decomposition implemented in class Ideal.
GreatestCommonDivisor, the abstract class
  GreatestCommonDivisorAbstract and various
  implementations, e.g. polynomial remainder sequences and modular
  algorithms.  The package now contains factorization algorithms for
  univariate polynomials over several coefficient rings: modulo primes
  in class FactorModular, over integers in class
  FactorInteger, over rational numbers in class
  FactorRational and over algebraic numbers in class
  FactorAlgebraic<C>.
PseudoReduction, PseudoReductionSeq and
  greatest common divisors computation on coefficients
  GroebnerBasePseudoSeq. Multiplicative sets of
  polynomials with several simplifications, e.g. maintaining co-prime
  factors or co-prime and squarefree factors, are contained in classes
  MultiplicativeSet, MultiplicativeSetCoPrime 
  or MultiplicativeSetSquarefree.  Also contained are
  Gröbner bases for polynomial rings over regular rings (direct
  products of fields or integral domains) in
  RGroebnerBaseSeq and RGroebnerBasePseudoSeq.
RealRoots, the abstract class
  RealRootsAbstract and at the moment of a single 
  implementation based on Sturm sequences RealRootsSturm.
  The package further contains an implementation for real algebraic numbers 
  RealAlgebraicNumber with a corresponding factory
  RealAlgebraicRing.
  For complex root isolation there are ComplexRoots interface,
  ComplexRootsAbstract and ComplexRootsSturm classes.
  The implementation provides an exact infallible method which follows
  the numeric method of Wilf.  It uses Sturm sequences following the
  Routh-Hurwitz Method to count the number of complex roots within a
  rectangle in the complex plane.
  There is also an implementation for complex algebraic numbers 
  ComplexAlgebraicNumber with a corresponding factory
  ComplexAlgebraicRing.
FactorRealAlgebraic.
UnivPowerSeries and MultiVarPowerSeries.
  There is an initial implementation of Mora's tangent cone reduction algorithm 
  in class ReductionSeq and a standard bases computation in 
  StandardBaseSeq with method STD().
ElementaryIntegration with method 
  integrate(). 
ThreadPool, DistThreadPool or
  DistHashTable. Part of this package has become obsolete
  with JDK 1.5.
This page contains documentation and the implementation for the new version which is designed using type parameters and requires at least Java 6 (JDK 1.6). It will also compile on Java 7 (JDK 1.7). Older versions (no more supported) can be found here: JAS 2.4, JAS 2.3, JAS 2.2, JAS 2.1, JAS 2.0, JAS using JDK 1.5 and JAS using JDK 1.4.
For informations on how to get started with JAS see the users guide. For frequently asked question see FAQ. There is an index of algorithms for the book Gröbner bases and their JAS equivalents. An index of algorithms for the book Algorithms for Computer Algebra and their JAS equivalents is also available.
The JAS API guide describes the interface and class design considerations and contains an overview of the most important classes and methods. An online Javadoc documentation of the API together with source code is contained in the API documentation (also available as jas-doc.jar). Some design considerations for the new generic version.
README and COPYING.jas (GPL) or COPYING.lgpl.jas (LGPL)
Design and experiences using MPJ and high speed InfiniBand networking for algebraic computations are described in Heinz Kredel, Distributed Gröbner bases computation with MPJ, to appear in proceedings of the EOOPS Workshop at AINA-2013, March 25-28, 2013, Barcelona, Spain (slides)
Some ideas on categories and mixin composition in ScAS and JAS are presented in the poster Raphael Jolly, Heinz Kredel, Categories as classes and mixin composition, Poster at CASC 2012, September 3-6, 2012, Maribor, Slovenia
A comparison of API interfaces for computer algebra is presented in the paper Heinz Kredel, Fostering Interoperability in Java-Based Computer Algebra Software, Proceedings FINA Workshop AINA-2012, March 26-29, 2012, Fukuoka, Japan (slides)
The design of algebraic extension structures in JAS and ScAS is presented in the talk Raphael Jolly, Heinz Kredel, Algebraic Structures as Typed Objects, at the Workshop on Computer Algebra in Scientific Computing CACS 2011, Kassel, Germany, 2011. (slides)
An early description of the JAS package for unique factorization domains (greatest common divisors, square-free decomposition, factorization) is contained in the article Heinz Kredel, Unique Factorization Domains in the Java Computer Algebra System, Special issue on Automated Deduction in Geometry, Lecture Notes in Computer Science volume 6301, pages 86-115, Springer, 2011
The design of JAS and ScAS is presented together with examples in the talk Raphael Jolly, Heinz Kredel, Generic, Type-safe and Object Oriented Computer Algebra Software, at the Workshop on Computer Algebra in Scientific Computing CACS 2010, Tsakhkadzor, Armenia, 2010. (slides)
Performance meassurements for the distributed hybrid Gröbner bases implementation are contained in the paper Parallel and distributed Gröbner bases computation in JAS, avaliable as arxiv:1008.0011, 2010.
The new distributed hybrid Gröbner bases implementation is explained in the talk Distributed hybrid Groebner bases computation, at the CISIS 2010 Workshop on Engineering Complex Distributed Systems (ECDS 2010), Krakow. (slides)
A description of the JAS comprehensive Gröbner bases package is be contained in the talk Comprehensive Gröbner bases in a Java Computer Algebra System, at the Asian Symposium on Computers and Mathematics (ASCM 2009), Fukuoka.
Some unique factorization domain algorithms in JAS are contained in the seminar presentation Tools for the integration of rational functions in Java, during the Computer-Algebra Seminar, University of Mannheim, FMI 2009
More background information on the python scripting interface for JAS and ScAS can be found in the article Raphael Jolly, Heinz Kredel, Symbolic Script Programming for Java, avaliable as arXiv:0906.2315v2, 2009.
The parallel and distributed Gröbner bases implementations are explained in the talk Distributed parallel Groebner bases computation, at the CISIS 2009 Workshop on Engineering Complex Distributed Systems (ECDS 2009), Fukuoka. (slides)
The Gröbner bases implementation of JAS is explained in the seminar presentation Gröbner bases and applications in Java, during the Computer-Algebra Seminar, University of Mannheim, FMI 2008
A description of the JAS greatest common divisor package is contained in the talk Multivariate Greatest Common Divisors in the Java Computer Algebra System, at the International Workshop on Automated Deduction in Geometry (ADG 2008), Shanghai.
Some background information on the python scripting interface for JAS can be found in the article Raphael Jolly, Heinz Kredel, How to turn a scripting language into a domain specific language for computer algebra, avaliable as arXiv:0811.1061v1, 2008. Previous title was Computer algebra in Java: libraries and scripting.
A comparison of JAS to other Computer Algebra Systems is contained 
   in the talk 
   Evaluation of a Java Computer Algebra System,
   at the 
   Asian Symposium on Computer Mathematics (ASCM 2007), Singapore. 
   
   It has been published as paper in
   Heinz Kredel,
   Evaluation of a Java Computer Algebra System,
   Special issue Computer Mathematics 
   of ASCM 2007 Revised and Invited Papers in
   Lecture Notes in Computer Science, volume 5081/2008, pages 121-138,
   Springer Berlin / Heidelberg
An article On a Java Computer Algebra System, its Performance and Applications, in Science of Computer Programming (2008).
At the PPPJ 2006 conference in Mannheim I presented the design of the JAS types, classes and implementation "On the Design of a Java Computer Algebra System" (slides).
At the A3L conference in Passau, 2005 I gave some background information on the development from MAS to JAS "A Systems Perspective on A3L" (slides).
The history of the JAS project can be found in the Web-Log. See also the related projects and credits.
See Download page.
See Download page.
See Download and Users guide pages.
Commutative: trinks.py, katsura.py
Solvable: wa_32.py, u_sl_3_prod.py, u_sl_3.py
Modules: armbruster.py, syz.py, syzy2.py
See Download.
Commutative: trinks.rb, all_rings.rb, gbs.rb
See Download. As the Android app is based on Ruboto (jruby IRB for Android) the usage is the same as with JRuby. There is a "Scripts" button in the app where all ruby examples can be accessed.
The main Ruboto screen with the "trinks.rb" example and its output looks as follows.
The following are examples which can be executed with 
the class edu.jas.application.RunGB. E.g. 
java -cp .:log4j.jar:jas.jar:... edu.jas.application.RunGB <args>
Commutative: gbks.jas, katsura2.jas, katsura3.jas, katsura4.jas, katsura5.jas, katsura5s.jas, katsura5w.jas, katsura6.jas, katsura6w.jas, katsura7.jas, katsura8.jas, rose.jas, trinks6.jas, trinks7.jas, vw.jas,
Solvable: kw_18.jas, ore_t.jas, sgb.jas, u_sl_3.jas, wa_1.jas, wa_32.jas, wa_34.jas, wa_39.jas, wa_41.jas, wa_61.jas
Last modified: Tue Apr 30 00:24:21 CEST 2013