Axiom (数式処理システム)

**Axiom**（アクシアム、公理を意味する英単語 axiom  から）は、自由ソフトウェアの計算機代数システムである。システムには対話型実行環境、コンパイラとライブラリが含まれており、強力な型付けによる数学的な階層構造を持つ型を定義している。

## 開発の経緯

Axiom の開発は1971年に始まった。開発は IBM で Richard Dimick Jenks の元で行われ、当時は **Scratchpad** という名前であった。開発には、バリー・トラガー (Barry Trager)、ステファン・ワット (Stephen Watt)、ジェームズ・ダベンポート (James Davenport)、ロバート・スター (Robert Sutor)、スコット・モリソン (Scott Morrison) が加わっていた。

1990年代に NAG が Scratchpad を買い取り、現在の名前 Axiom が付けられた（注：1992年に出た解説書中では一貫して名前は大文字の"AXIOM"と書かれている）。その後、2001年に商用製品としての販売は終了し、以降の開発、管理はティム・デイリー Tim Daly にゆだねられ、修正BSDライセンスの元で公開されている。

2007年にAxiom から2つのプロジェクトがフォーク（分岐）した。どちらもオープンソースプロジェクトであり、その一つの OpenAxiom は同年8月13日に発足し同年8月24日に最初のリリースを出している。もう一方の FriCAS 同年9月28日に最初のバージョンをリリースしている。

Axiom (本家) は数日から数週間おきにパッチの形でバージョンアップをしており、バージョン番号を振っていない。

## 文書化

Axiom は文芸的プログラミングを指向している。Axiom のソースコードは複数の「巻 (volume)」に分かれており、Axiom の開発サイト で公開されている。各巻には Axiom の実際のソースコードが記述されている。

現在公開されているものは以下のとおりである。
* Combined Table of Contents -- 目次
* Volume 0: Axiom Jenks and Sutor -- 本文
* Volume 1: Axiom Tutorial -- 簡潔な導入部
* Volume 2: Axiom Users Guide -- ドメインの使い方の詳細な例 (未完)
* Volume 3: Axiom Programers Guide -- Axiom プログラミング入門 (未完)
* Volume 4: Axiom Developers Guide -- 開発に際して (未完)
* Volume 5: Axiom Intepreter -- 対話的実行環境のソースコード (未完)
* Volume 6: Axiom Command -- システム・コマンドとスクリプトのソースコード (未完)
* Volume 7: Axiom Hyperdoc -- X11 の Hyperdoc ヘルプ・ブラウザのソースコードと解説
** Volume 7.1 Axiom Hyperdoc Pages -- Hyperdoc 文書のソースコード
* Volume 8: Axiom Graphics -- X11 グラフィクス・サブシステムのソースコード
* Volume 9: Axiom Compiler -- Spad コンパイラのソースコード (未完)
* Volume 10: Axiom Algebra Implementation -- 実装にあたってのいくつかの問題 (未完)
** Volume 10.1: Axiom Algebra Theory -- 数学的な背景
** Volume 10.2: Axiom Algebra Categories -- Axiom に実装されている圏 (category) のソースコード
** Volume 10.3: Axiom Algebra Domains -- Axiom に実装されている連結開集合 (定義域 domain)のソースコード
** Volume 10.4: Axiom Algebra Packages -- Axiom パッケージのソースコード
* Volume 11: Axiom Browser -- Axiom の Firefox のためのフロントエンドのソースコード
* Volume 12: Axiom Crystal -- Axiom の Crystal のためのフロントエンドのソースコード (未完)

## 解説動画

Axiom プロジェクトでは文書化に重点を置いている。また近年は解説ビデオでプロジェクトに関するアナウンスが最初に行われている。その解説ビデオは Axiom の開発サイト で公開されている。その最初のビデオで Axiom の情報発信に関する詳細が述べられている。

## 開発方針

Axiom の開発プロジェクトは「30年計画」で行われている。まず第一に、次世代の計算機を使う数学者にとって有用なソフトウェアとなるために必要な機能を実装することである。ドナルド・クヌースの文芸的プログラミング技法が Axiom のソースコード全体にわたって使われている。開発に当たっては、アルゴリズムの正しさを証明するために証明技術 (proof technology、Coq や ACL2 などのようなもの) を導入する予定である。

## 設計思想

Axiom においては、オブジェクトはすべて型を持っている。型は数学的な「構造」であり、例えば環、体、多項式などがある。またデータ構造はリスト構造、木構造、ハッシュテーブルなど、計算機科学のものが実装されている。

関数は引数として型そのものを取ることができ、型はその返り値にもできる。たとえば `Fraction` という関数は引数として `IntegralDomain` を取り、その引数の分数からなる体を返す。また、有理数からなる大きさ 4 × 4 の行列のなす環は `SquareMatrix(4, Fraction Integer)` によって生成できる。その環での演算を行う場合、`1` は単位行列、`A^-1` は `A` の逆行列 (存在する場合) であると解釈される。

複数の演算が同じ名前を持つことができ、それらはオブジェクト指向プログラミングの場合と同様、引数と求められる結果の型によって区別される。

Axiom の拡張言語として SPAD と呼ばれるものがある。Axiom に実装されている数学的な知識はすべて SPAD で書かれている。Axiom の対話的実行環境は、SPAD の概ね全てを理解する。

SPAD はかつて A#、続いて Aldor という名前で開発されていた。後者は現在も、SPAD の代わりに Axiom から使うことができる。しかし Axiom とは異なるライセンスで公開されている。

## 特徴

対話的実行環境内では、型推定および発見的探索法を用いることで、多くの場合に明示的な型付けを行わなくても良いようになっている。

また 'HyperDoc' というウェブブラウザに似たヘルプ表示システムを持っており、二次元および三次元グラフィクスを表示して回転させたり明るくしたりすることができる。Emacs および TeXmacs でも Axiom モードが実装されている。


Image:AxiomHyperDoc.png|HyperDoc で領域で実行できる演算を表示させているところ
Image:AxiomGraphics.png|三次元プロット
Image:Axiomfirefox.jpg|Firefox 上での実行例
Image:Heatequation.jpg|熱拡散方程式の簡約化
Image:Matrixinmatrix.jpg|行列演算


Axiom では初等関数の積分法として リッシュのアルゴリズム が実装されている (Manuel Bronstein および Barry Trager による)。

## 書籍
* Richard D. Jenks and Robert S. Sutor: "AXIOM The Scientific Computation System", Springer-Verlag, ,  (1992). ※ 開発がNAGに移った後に出た解説書。システム名は大文字で"AXIOM"となっている． 

## 関連項目
* 数式処理システムの一覧

## 脚注

## 外部リンク
* Axiom 公式ホームページ (英語)
* 派生プロジェクトのホームページ (英語)
* Jenks, R.D. and Sutor, R. "Axiom, The Scientific Computation System"
* Daly, T. "Axiom Volume 1: Tutorial"

### フォークしたプロジェクト
* OpenAxiom ホームページ
* SourceForge.net の OpenAxiom のページ
* FriCAS ホームページ
* SourceForge.net の FriCAS のページ