u
強い型付けを利用するC++数値解析ライブラリ
(修論’93)
u
強い型付けを利用するC++計算機代数ライブラリ
(数解研研究集会’94)
Ø 計算対象の代数構造に注目してライブラリのインターフェースを整理
Ø 数学的な性質を意識したポリモルフィズム実装手法の選択
u
指数部可変長浮動小数点ライブラリの基本演算部
(数式処理学会大会’95)
u
指数部可変長浮動小数点ライブラリの初等関数部
(テクニカル・レポート ‘97)
Ø 指数部が可変な場合の基数変換の実装
Ø 初等関数の実装に多倍長整数演算による連分数展開式の計算を利用
1.
計算機代数システムRisa/Asir
の 並列計算機AP1000へ移植と並列計算の実験
(PCW ’95 J、ASCM ‘96)
Ø アルゴリズムの並列性を利用した粒度の大きな並列計算の実験
Ø AP1000上で粒度の大きな並列計算のための環境の構築
Ø 計算機代数
Ø 数値解析
Ø 両者の融合
1. 基本演算ライブラリ:
Ø 数学的な対象の基本演算を提供
2. 対話的計算環境
Ø 基本演算ライブラリの利用環境
Ø 基本演算ライブラリの開発・実験環境
3. ソルバー:
Ø 特定問題の解法をパッケージ化
4. シミュレーター:
Ø 特定問題を観察する環境
1. 言語の記法と意味は数学における「直感的な用法」とよく対応付けるべき
<直観性規準>
→究極的には数式によるプログラミング
2. 言語の記法と意味はアルゴリズム的プログラミングにはもちろん計算機内の実際のデータ表現から抽象的なレベルまでにおける数学オブジェクトの記述にも適合するべき
<プログラム記述規準>
→1と2は必ずしも両立しない。バランスを取ることが必要。
1. あいまい性
Ø 例:や
既存技術:
Ø 標準形の導入(例:StandardForm(Mathematica))
2. 強い文脈依存性。
Ø 例1:はxが実数か虚数かで真偽が異なる。
Ø 例2:x-xについて、subs(x=a, x-x)でxをaに置換する前にx-xが0と評価されるかも知れない。しかしaが∞や[-1,1]であれば0は正しくないし、ファイル・ディスクリプタのように減算が定義されていないならばエラーになるべき。
既存技術:
Ø 文脈を設定する機能を含むeval(Maple)
Ø 適切な(構成数学的な手法に基づき、インターフェースの多重継承と単一継承、型強制を利用した)型システムと型の決定アルゴリズムの導入(AXIOM)
例:(+ (modulo 5 3) (* 2 2))
u 1段目で(modulo 5 3)の結果が有限体Z3の値であることがわかるのでその文脈が(* 2 2)にも及ぶ。
u 1段目が1パスでなく反復できるならば、(+(* 2 2) (modulo 5 3))も同様に処理できる。
試してみたい技術:
Ø AXIOMと同じ方向性。ただし、パラメタ付き型や型推論を利用して関数を定義しやすいように型システムを整理してみたい。
3. 関数・演算に関係と計算の両面性
Ø 例1:diff(y, t)=f(t) diff()が微分を計算する関数だとするとyがtの関数として与えられていない限りf(t)=0の意味になってしまう。
Ø 例2:f(x):=if(x>0) then x els –xのplot(f(t), t, -10, 10)という形式によるプロット。
既存技術:
Ø 引用(quote)’x (Lisp)
Ø 不活性関数(Maple、Macsyma)
試してみたい技術:
Ø reflection:代数的に取り扱えないか?
4. 式中の名前に不定元と変数、関数が混在する。(1と独立でないかも。)
Ø 例:多項式の不定元は多項式を計算法と見るなら変数、変数に関数が束縛されていることもある。
5. 値の格納場所に関する指定がない。
既存技術:
Ø 間接参照(→配列と副作用の問題)
試してみたい技術:
Ø 列型(添え字で順序付けした特殊な再帰構造の定義機構+行列・配列の要素演算)
u 数学的記法に近い記法を利用できる数学ソフトウェア開発・数学実験環境
u 数値解析ライブラリと計算機代数システムをシームレスに利用できる環境
u 得意分野の異なるシステムをネットワークで結合して利用するフロントエンドの設計
1. 実験用の小言語を定義。(既成の言語で試さない訳は、実験中に他の言語要素との競合を避けるため。)
2. 小言語を実装(C/C++へのトランスレータ)
3. 幾つかのアルゴリズムを記述してみて、出力が妥当なものであるかを検討する。
4. 上記の技術の性質と条件と限界が明らかになったら他の言語にどのように持ち出せるかを考える。
5. 2から4は時間が無くなるか限界が明らかになるまで反復される。