PARI/GP

**PARI/GP**は計算機代数アプリケーションであり、数論に関する様々な演算を行うために開発された。バージョン2.1.0からは自由ソフトウェアとしてGNU General Public Licenseにしたがって米フリーソフトウェア財団から公開、配布されている。PARI/GPはマルチプラットフォームであり、多くのプラットフォームで実行することができる。

特に、整数論 (因数分解、 代数的数理論、楕円曲線等) 、行列、多項式、冪級数、代数的数を扱う分野においては有用になるようにできている。

## 開発の経緯
PARI/GPはもともと1985年に仏ボルドー大学 Laboratoire A2X のアンリ・コーエンのチームで開発され、現在は同大学のカリム・ベラバス(en)が多くのボランティア開発者とともに管理、開発している。コーエンと仏ボルドー第一大学のフランソワ・ドレス(en)が高度な代数計算を行うために開発したISABELLEというプログラムが元になっている。

## 概要
PARI/GPは再帰的な数式処理を高速に行うことのできるプログラムのパッケージである。当初は数論の研究者の利用を想定して開発された。演算が高速である、数学者になじみの深いデータ型を直接操作できる、数論における演算を行うための優れたモジュールを備えている、と言う特徴がある。

PARI/GPは標準で、以下の二つのプログラムを備えている。

***PARI** - C言語のライブラリで、高速な演算を行う関数を提供する。C言語以外にもC++、Pascal、Fortran、Perl、Pythonからも使うことができる。
****gp*** - 対話型に動作するコマンドラインインタフェイスのプログラム。これを実行することでPARIの機能を使うことができる。C言語のような制御構文を備えた高度な電卓プログラムとしても使うことができる。*gp* プログラムが理解して実行するスクリプト言語を**GP** と呼ぶ。

また**gp2c**と呼ばれるプログラムもパッケージに含まれている。これは GP 言語で書かれたスクリプトをC言語に変換するプログラムである。これにより、gp でスクリプトを実行するよりも3〜4倍高速に実行することができるようになる。しかし現時点では GP 言語のすべてをサポートしてはいない。

PARI/GPは任意の精度で多倍長演算を行うことができる。百万桁、64bitの計算機なら10億桁の精度を扱うことができる。また素因数分解、楕円曲線、各種の代数演算を行うことができる。行列、多項式、冪級数、代数的数の演算ができ、特殊関数も多数実装されている。

PARI/GPは独自のプロット機能を備えている。また多項式の操作や積分などにおいて記号計算を行うこともできるが、その機能はたとえばMathematicaのような計算機代数プログラムに比べるとまだ限定的である。

PARI/GPのコンパイル時にGMP (GNU Multiple Precision Arithmetic Library) を使うと、より高速に演算を行うことができる。

## PARI/GPの名前の由来
PARIという名前は、開発が始まった当時に開発者たちがPascalで実装したライブラリ"Pascal ARIthmetic" (早期にC言語に移行したが)に、また*"pari de Pascal"* (パスカルの賭け). に由来している。

*gp* の最初のバージョンは Great Programmable Calculator、GPC と呼ばれていた。なにかの理由で C がとれて今の名前になった。

## 実行例

*gp* の実行例をいくつか以下に示す。

 ? \p 212
 realprecision = 221 significant digits (212 digits displayed)
 ? 148.7^0.3721
 time = 0 ms.
 %1 = 6.4315686761687428232463963595991663095614617461851330959022336592679249
 83664424375749173149713566544671777981026987042189396584904780584382369995989
 2470992868949783084618518182456887849078305105083627437215091767

 ? 123456! + 0.
 time = 1,656 ms.
 %2 = 2.6040699049291378729513930560926568818273270409503019584610185579952057
 37967683415793560716617127908735520017061666000857261271456698589373086528293
 4317244121152865814030204645985573419251305342231135573491050756 E574964

 ? sin(x)
 time = 0 ms.
 %3 = x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 - 1/39916800*x^11
 + 1/6227020800*x^13 - 1/1307674368000*x^15 + O(x^17)

 ? for(z=25,30, print (factor(2^z-1)))
 [31, 1; 601, 1; 1801, 1]
 [3, 1; 2731, 1; 8191, 1]
 [7, 1; 73, 1; 262657, 1]
 [3, 1; 5, 1; 29, 1; 43, 1; 113, 1; 127, 1]
 [233, 1; 1103, 1; 2089, 1]
 [3, 2; 7, 1; 11, 1; 31, 1; 151, 1; 331, 1]
 time = 5 ms.

 ? e = ellinit([0,0,1,-7,6]); ellidentify(e)
 time = 28 ms.
 %4 = ["5077a1", [0, 0, 1, -7, 6], [[-2, 3], [-1, 3], 0, 2], [1, 0, 0, 0]]
 /* A famous rank 3 elliptic curve of conductor 5077. */

 ? K = bnfinit(x^2 + 23); K.cyc
 time = 1ms.
 %5 = [3]
 /* This number field has class number 3. */

## 関連項目

* Sage - PARI/GP を含む数学関連ソフトウェアの統合パッケージ
* 数式処理システムの一覧

## 脚注・出典


## 外部リンク
*PARI/GP Development Headquarters (公式ホームページ)
*Resources for PARI/GP カリム・ベラバスのウェブページ内の関連情報
*Catalogue of GP/PARI Functions PARI/GP の機能リスト (一括ダウンロード: Stable Branch)
*"Le langage et l'interpréteur 'Isabelle', spécialement conçus pour utilisations arithmétiques," François Dress, *Seminaire de Théorie des Nombres de Bordeaux*, Vol. 9 (1979-1980); an article on ISABELLE, PARI/GP's ancestor progam created in 1979 (発表論文).
*PARI/GPチュートリアル v2.2.8 に付属するチュートリアルの日本語訳