# Java Algebra System (JAS) Project

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 an jython (Java Python) or jruby (Java Ruby) front ends. The focus of JAS is at the moment on commutative and solvable 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:

edu.jas.structure:
  contains interfaces for the most general algebraic structures like `RingElem` and `RingFactory`.
edu.jas.arith:
  contains classes for arithmetic in the basic coefficient rings like `BigRational`, `BigInteger`, `ModInteger`, `BigDecimal` or `BigComplex`.
edu.jas.poly:
  contains classes for polynomial and solvable polynomial arithmetic like `GenPolynomial`, `GenSolvablePolynomial` and others such as `AlgebraicNumber` and a polynomial parser `GenPolynomialTokenizer`.
edu.jas.vector:
  contains classes for vectors and lists of polynomials and solvable polynomials like `GenVector` or `GenMatrix`.
edu.jas.gb:
  contains classes for polynomial and solvable polynomial reduction, Gröbner bases over fields and ideal arithmetic as well as thread parallel and distributed versions of Buchbergers algorithm like `ReductionSeq`, `GroebnerBaseAbstract`, `GroebnerBaseSeq`, `GroebnerBaseParallel` and `GroebnerBaseDistributed`. New are Gröbner bases in polynomial rings over principal ideal domains and Euclidean domains, so called D- and E-Gröbner bases, e.g. `EGroebnerBaseSeq`.
edu.jas.gbmod:
  contains classes for module Gröbner bases and syzygies over polynomials and solvable polynomials like `ModGroebnerBase` or `SolvableSyzygy`.
edu.jas.application:
  contains classes with applications of Gröbner bases such as ideal intersections and ideal quotients implemented in `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`.
edu.jas.ufd:
  contains classes for unique factorization domains. Like the interface `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>`.
edu.jas.gbufd:
  contains classes for Gröbner base computation using classes from the edu.jas.ufd package for polynomial coefficients. The main classes deal with pseudo reduction `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`.
edu.jas.root:
  contains classes for real root computations. Like the interface `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`.
edu.jas.ufdroot:
  contains classes for factorization in structures used in root computation, for example `FactorRealAlgebraic`.
edu.jas.ps:
  contains univariate and multivariate power series arithmetic in classes `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()`.
edu.jas.integrate:
  contains methods for the elementary integration of univariate rational functions. The main class is `ElementaryIntegration` with method `integrate()`.
edu.jas.util:
  contains further utilities for parallel and distributed computations like `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.

## Documentation

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)

### Published papers and talks about JAS

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.

## Download, installation and unit tests

See Download page.

## Usage with the JEclipse IDE

See Download page.

## Usage with the Jython interpreter

See Download and Users guide pages.

#### jython examples

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

## Usage with the JRuby interpreter

See Download.

#### jruby examples

Commutative: trinks.rb, all_rings.rb, gbs.rb

## RunGB Examples

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: Sun Feb 5 20:26:43 CET 2012