Risa/Asir

Risa/Asir（りさ・あじーる）は、竹島卓・横山和弘・野呂正行らにより富士通研究所で開発されたオープンソースの計算機代数システムである。数式処理エンジン Risa (Research Instrument for Symbolic Algebra; 記号代数のための研究道具)とインターフェイス実装 Asir からなる。
2000年以降、オリジナルを安定版 (STABLE) とし、開発版 (HEAD) は野呂正行の転出先である神戸大学へ中心を移し、OpenXM contrib2 として OpenXM コミッターによって開発されている(Asir2000 神戸版)。Risa/Asir は Windows・macOS及び各種UNIX上で動作し、開発は主にFreeBSD上で行われている。

 Risa/Asir の特徴 
主な特徴マニュアルより
 インターフェイス実装 Asir 
インターフェイスとしての Asir はコマンド asir によって端末から利用するコマンドライン(CLI)アプリケーションである。Windows版の asirgui.exe は端末上で asir を呼び出した状態を模したソフトウェアであり、マウス操作を想定した一般的なGUIソフトウェアではない。macOS版では十進BASIC十進BASICのホームページのインターフェイスを模した cfep を利用することができる。 

 ユーザ言語 Asir の文法 
Risa/Asir のユーザ言語も Asir と呼ばれ、標準入力から対話的に利用することができるほか、これはC言語に似たプログラミング言語としての性格を持っていて、予め Asir で書かれたソースファイルを読み込んで動作させることもできる。

ユーザ言語 Asir はC言語を下敷きとして設計されているために多くの特徴をC言語と共有しているが、プログラム変数が型を持たない・ switch や goto 文を持たない・有理数に対する計算が通常のように使用できる・リストが扱えるなどの点で Asir 独自の特徴が見られる。

 Asir の扱うオブジェクト 
各オブジェクトは可読な形式での入力からパーサーにより中間言語に変換され、Risa によって各々に応じた型を持つ内部形式に変換される。オブジェクトの型は type()・nytpe()・vtype() によって確認できる。

+ Asir で使用可能な型 type()  オブジェクトの型 0  0 1  数 2  多項式 3  有理式 4  リスト 5  ベクトル 6  行列 7  文字列 8  構造体 9  分散表現多項式 10  符号無し32bit整数 11  エラーオブジェクト 12  二元体上の行列 13  MATHCAPオブジェクト 14  一階述語論理式 15  小標数有限体上の行列 16  符号なし byte の配列 -1 VOIDオブジェクト
+ 数の型 type()  ntype()  数の型 1 0  有理数  1 1  倍精度浮動小数  1 2  代数的数  1 3  任意精度浮動小数 1 4  複素数  1 5  小標数素体の元 1 6  大標数素体の元  1 7  標数2の有限体の元 1 8 有限体の元 1 9 小位数有限体の元
+ 不定元の型 type()  vtype()  不定元の型 2 0  一般不定元 2 1  未定係数 2 2  函数形式  2 3  函数子

 型を持たない変数 
Asir のプログラム変数は必ずASCIIの大文字で始まり、Asir では通常はプログラム変数を宣言することはしない。Asir の各対象はそれぞれ必ず何らかの型を持っているが、プログラム変数にはどんな型を持つ対象でも代入できるという意味で「変数には型が無い」。型を持たない変数を用いることによる豊富な代入操作が可能である。また、函数内に現れる変数は全てデフォルトで局所変数となる。大域変数を利用するには extern の宣言が必要である。

Asir では不定元と変数は明確に区別され、不定元は数学で用いる意味と同じく係数体上超越的な元である。よって不定元に何らかの値を代入するというのは、概念的に不適当であるとともにシステム的にも不正な操作である。しかしながら、変数に対する規約と異なり不定元及び函数名はASCIIの小文字で始まるため、実用上は不定元に対し意図せぬ代入が行われる心配は無用である。

 リストと配列 
リストの生成は "[" と "]" で囲むことで行われる。要素の区切りは "," である。
リストは実行中にサイズを変更できるが要素への代入を行うことはできない。
LISPに由来する強力なリスト操作
他言語で配列 (array) に相当する型は Asir ではベクトル (vector) と呼ばれる。
ベクトルは newvect() を用いて明示的に生成する必要があり、サイズは固定される。要素への代入は自由にできる。
行列・バイト列の扱いはベクトルに準じる。
ベクトルとリストは vtol() / newvect() によって相互に変換可能である。

 機能拡張 
モジュール・C言語ソース等による高い機能拡張性

 OpenXM 
OpenXM に基づく通信・分散計算

 Asir が得意とする計算 
有限体・代数体上の代数計算
グレブナー基底計算

 注 
 注釈 

 出典 

 参考文献 

, 野呂正行・横山和弘・竹島卓・Risa/Asir committers, 2010年2月. Asir マニュアル
Asir User’s Manual, 野呂正行・横山和弘・竹島卓・Risa/Asir committers, 2010年2月6日.
 , OpenXM Developing Team, 2002年2月. OpenXM・Risa・Asir-contrib マニュアル
Asir OpenXM-Contrib User's Manual, OpenXM Developing Team, 2002年2月.
, 高山信毅・野呂正行, 2012年11月7日. - Risa/Asir を用いたプログラミングの入門書


 関連項目 
計算機代数

 外部リンク 
 http://jp.asir.org/
Risa/Asir (神戸版) ダウンロードページ Risa/Asir 開発版 (HEAD)

OpenXM (Open message eXchange for Mathematics)
文書
cfep OpenXM のフロントエンド（動作環境: Mac OS X v10.4以上）

Category:数学に関する記事
Category:数式処理システム
Category:オープンソースソフトウェア