1. 研究課題(記号を含め40字以内)
数学ソフトウェア向け数式プログラミング言語の設計と実装


2. 現在までの研究とその成果(700字)

(1)  数値解析ライブラリのインターフェースに関する研究
FORTRAN
で書かれた既存の数値計算ライブラリを利用する上での煩雑さを隠蔽するC++インターフェース・クラス・ライブラリを開発した。数値解析の対象が持つ代数的構造を多相的で静的なデータ型として表現した。多相性を許す静的な型付けにより、元のライブラリの実行効率を損なわずに使い易くできた。単に実行の単位としての関数でなく解析的な関数の型をデータ型として定義することで、多くの数値解析の手法に統一的なプログラミング・インターフェースを提供できることが分かった。

(2)  計算機代数(数式処理)ライブラリのインターフェースに関する研究
C
で書かれた既存の計算機代数ライブラリを利用する上での煩雑さを隠蔽するC++インターフェース・クラス・ライブラリを開発した。上述の数値解析ライブラリに対する場合と同じく、計算機代数の対象が持つ代数的な構造を多相的で静的なデータ型として表現することを目指し、元のライブラリの実行効率を損なわずに使い易くできた。

以上2つの研究の経験から、関数や多項式といった数学的対象が計算対象としての性質と計算手順としての性質を併せ持つことを上手く表現する手段が必要なのではないかと考えるようになった。これら以外に、数値解析と計算機代数の分野で以下のような研究を行ってきた。

(3)  多倍精度浮動小数点数の基本演算と初等関数の実装
計算機代数で多用する多倍長整数を利用して、小数部精度が指定でき、指数部が自動的に必要な精度を維持するような多倍精度浮動小数点数の四則演算、基数変換、初等関数計算を行なうライブラリを開発した。初等関数の計算に連分数展開を多倍長整数で計算するアルゴリズムを実装し、任意の精度での高速な演算が可能になった。

(4)  計算機代数システムの並列計算機上での実装
アルゴリズムが持つ並列性を生かすことができる計算環境を求め、疎結合アレイ・プロッセッサ型の並列計算機上で計算機代数システムを実装した。実験としてGrobner基底の計算を行ない良好な結果を得た。


3. 研究計画(計2000字程度(1886字))

(1)   研究目的(研究の背景及び国内外の研究状況等を含む、400字程度?(515字))

数値解析ライブラリや計算機代数(数式処理)システム等の数学ソフトウェアは、様々な計算の中心部分として計算機の高度な利用に欠かせないものである。これらの数学ソフトウェアは数学的な背景(解析や代数)を持ち、それらの数学的背景は数学的な記法、特に数式で記述されることが多い。したがって可能ならば数式でそのままプログラミングが可能であれば開発に際して乗り越えねばならない溝は小さくなると考えられる。現状では数式自身の表示を記述する手段の研究は比較的進んでおり、実用されているものも複数ある一方で、直接的にプログラムを記述する手段として数式を利用する場合にはいくつか問題がある。中でも特に、数式が計算対象であると同時に別の計算手段の定義にもなるような場合(例:ある変数がプログラム上の変数であるか不定元の多項式であるかの区別、多項式や級数とそれらで定義される関数の関係、及び微分方程式における微分記号と微分演算を表す演算子の関係など)に双方を両立させながら自然に、そして簡潔に表そうとするのは難しい。本研究はこのような問題を解決し、数式による記述を利用した数学ソフトウェアの開発に向いたプログラミング言語上の仕組みを見出すことを目的とする。


(2)   研究内容(700字程度?(715字))

前項(1)の目的で述べたように、計算対象であり同時に計算手順を表現するような数式を取り扱うために、以下に取り組む:
(a)
型と局所的な文脈の組み合わせに関する検討:
ある名前の指す対象が計算対象と計算手順のどちらに属しているものを表しているかを自然に表現するため、構文やその意味付けについて工夫が必要となると考えられる。型推論と局所的な文脈を組み合わせて名前の指す対象がどちらを表しているかを暗黙に指定できないかどうか検討する。
(b)
評価順序の制御に関する検討:
数式がプログラムの一部をなすと考えると、いつ手順として評価するかについて評価順序を制御する自然な仕組みも必要となると考えられる。部分評価などの技法とあわせて論理プログラミングで項の評価順を決めるために行われている各種の技法を取り入れられないかどうかについて検討する。
(c)
自己反映計算に関する検討:
数式はプログラムの一部であると同時にデータでもあるので、一種の自己反映計算となる。自己反映計算を実現する枠組みでは、プログラム中で処理の対象となる部分を一般化する程度、それを取り扱う際のインターフェースの煩雑さ、そして実行効率のトレード・オフが問題となると考えられる。中心的に扱う数式が多項式や級数といった代数的な対象を表していることを念頭において、代数的対象に向いた自己反映計算のインターフェースについて検討する。
(d)
統合:
以上3つの取り組みの統合について検討し、実験的な小言語を設計する。
(e)
検証:
数学ソフトウェアでは計算を実行する効率が重要であるので、実際に実験的な実装を行い、典型的ないくつかの例について問題となるほど性能が悪化することがないかどうかを確かめる。


(3)   年次計画(200字程度?(60)
(1
年目)

(2)
で上げた(a)(c)3つの取り組みについて検討する。

(2
年目)

(2)
で上げた(d)(e)のように統合と検証、評価を行う。

(3
年目)(DC2は記入しないこと)




(4)   研究の特色・独創的な点(700字程度(596字))

計算機代数(数式処理)分野では数式を計算対象とすると同時に、それを利用して計算を行うというような処理が以前から行われ幾つもの工夫がなされてきた。ただし基本的に計算機代数において、数式は主として演算対象であるデータとして表現され、手順の記述として利用される場合は、そのデータを実行時に解釈する形で利用されてきた。このようなやり方は、数式の加工に代数的なさまざまな演算が利用できるので柔軟だが、手順として実行する際の速度は期待できない。
一方、数値解析では記号計算を行って数式を陽に処理することはせず、数式は主としてプログラムとしてコーディングされた計算手順で表現され、これに対する演算はコーディングの際に選んでおいた数値パラメータを変更することによって間接的に行われてきた。このようなやり方は、数式を手順として利用する際の処理が高速だが、演算対象としては柔軟性に欠ける。(決まった形をしている数式に限る場合、例えば特に線形な場合はこれでも様々な計算が行える。)
本研究では(2)で述べたような取り組みを通じて、数式の持つ演算対象としての性質と、演算を定める性質の両面を対等に効率よく簡潔に取り扱うことができるようなプログラミング言語上の仕組みを検討する。これによって従来は2つの別々の環境で利用されてきた手法を単一のプログラミング言語でより容易に相互利用できるようになるということが期待できる。また、このような相互利用が適用できれば記述が容易になる既存の手法の例としては自動微分法が挙げられる。


4.研究業績
(1)
学術雑誌(紀要等は除く)等に発表した論文




(2)学会において口頭発表もしくはポスター発表した論文、紀要等に発表した論文

<口頭発表>
[1]
神戸隆行、"A-obj overview"、京都大学数理解析研究所共同研究集会「数式処理における理論と応用の研究」(京都大学)、平成511
[2]
神戸隆行、"Finite Significance Number System"、第4回数式処理学会大会(岩手大学)、平成75
[3]
神戸隆行 and 野呂正行、"Implementation and Preliminary Experiments of Computer Algebra System Risa/Asir on Parallel Computer AP1000"Asian Symposium on Computational Mathematics '96(神戸大学)、平成88
 
<ポスター発表>
[4]
神戸隆行 and 野呂正行、「並列計算機AP1000への数式処理システムRisa/Asirの実装とグレブナ基底の並列計算」、Parallel Computing Workshop '95 Japan(富士通川崎工場)、平成83

<その他>
[5]
神戸隆行、「数値計算ライブラリのインターフェースに関する研究」、名古屋大学工学研究科 情報工学専攻 修士論文、平成53
[6]
神戸隆行、"Finite Significance Number Library"、富士通研究所テクニカル・レポート、平成108

[7]
神戸隆行、「オブジェクト指向線型計算ライブラリの開発」、名古屋大学工学部 情報工学科 卒業論文、平成33