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-cummutative polynomials, Groebner bases, factorization, power series, real roots and applications. By the use of Java as implementation language JAS is 64-bit and multi-core cpu ready.
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
GroebnerBaseDistributed
. 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 5 (JDK 1.5). It will also compile on Java 6 (JDK 1.6). Older versions (no more supported) can be found here: 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. An index of algorithms from the book Gröbner bases and their JAS equivalents can be found here. An index of algorithms from the book Algorithms for Computer Algebra and their JAS equivalents can be found here.
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 as jas-doc.jar). Some design considerations for the new generic version.
README and COPYING.jas (GPL) or COPYING.lgpl.jas (LGPL)
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 .: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: Sat Dec 1 18:34:51 CET 2012