数理解析研究所講究録
第 1815 巻 2012 年 152-162$QC^{2}AS$152–電子相関理論のための数式処理システムの設計とその利用–Design of a computer algebra system forelectron correlation theory and its application$QC^{2}AS$

小副川健望月祐志横山和弘
YUJI MOCHIZUKI

TAKESHI OSOEKAWA

KAZUHIRO YOKOYAMA

立教大学立教大学立教大学
RIKKYO UNIVERSITY*RIKKYO UNIVERSITY \dag er

RIKKYO UNIVERSITY i

Abstract

本稿では，量子化学の記号計算のための数式処理システム $QC2AS$ を紹介する．$QC2AS$ は，計算機代数の非専門家が，計算機代数的手法を利用できるようにする手段として設計されている．本稿ではこのシステムの設計を，いくつかの計算例と共に述べる．
Abstract
In this paper, we introduce $QC2AS$ , a computer algebra system for symbolic quantum chemical
computations. $QC2AS$ has been designed to provide an access to our computer algebraic techniques
without knowing the background theories. In this paper, we illustrate its design and some examples.

1

はじめに

本稿は，電子相関理論に現れる代数表式を扱う数式処理システムとして著者らが設計開発している$QC^{2}AS$を紹介するものである．

電子相関理論は量子化学において，高精度の数値計算をするうえで必要な理論で，電子相関理論を用いた計算にはテンソル縮約式と呼ばれる代数表式が頻出する [17,16]. これらの式を量子化学の数値計算に利用するには，この代数表式を記号計算で簡約するなどし，数値計算できる形に変形する必要がある．計算結果の信頼性を高めるためには，より高次の代数表式を用いることが必要だが，代数表式の次数が上がるにつれて式の複雑さは飛躍的に増すため，人手による代数表式の操作ではすぐに限界がくる．

本研究では，電子相関理論に現れる代数表式の操作を自動化するアルゴリズムを構築し，それを実装して，量子化学の研究者自身が使えるような手段を提供することを目標にしている．計算機代数の研究としては，応用分野の開拓という意義の他に，今まで注目してこなかったような問題に焦点を当てることで，新たな計算手法の創発の可能性がある．

本研究で構築したアルゴリズムを利用できる手段は，計算機代数の知識を必ずしも持っていなくても使えることが望ましい．また，主用途の計算は実行効率が良いように，低レベルのプログラム言語によって書か
osoken@rikkyo.ac.jp$*$\dagger fullmoon@rikkyo.ac.jp\ddagger yokoyama@rkmath.rikkyo.ac.jp

153
れた実装が理想である．これらのことから，既存の数式処理システムのパッケー として実装するのは，十$\grave{\backslash }\grave{\grave{}}$分とは言えない．一方で，様々な代数表式の扱いに対応するために，拡張性は高い実装であることが望まし
い．以上のことから，我々は電子相関理論の代数表式の扱いに特化した数式処理システムの開発への着想を得た [18]. この数式処理システムを Quantum Chemistry と Computer -Algebra 動 stem の頭文字を取って$QC^{2}AS$と名付け，著者らが独自に設計・開発を行っている 1). 最新版のバイナリは $QC^{2}AS$ のウェブサイト

(http: $//www2$ . rikkyo. ac. jp/web/fullmoon/qc2as/) で入手できる．

以下の式は代表的な電子相関理論である Mller-Plesset 摂動論における 2 次の代数表式である．
$E_{MP2}= \frac{1}{4}(\sum_{ijab}\frac{[ia|jb][ai|bj]-[ia|jb][aj|bi]-[ib|ja][ai|bj]+[ib|ja][aj|bki]}{\epsilon_{i}+\epsilon_{j}-\epsilon_{a}-\epsilon_{b}})$式における$i,$ $j,$ $a,$

$b$

.

(1)

は分子軌道のインデックス， など軌道 の軌道エネルギーを意味する実数で，また \’iijlab]$i$$\epsilon_{i}$は 2 電子積分であり$[rs|tu]= \int\chi_{r}^{*}(x_{1})\chi_{s}(x_{1})r_{12}^{-1}\chi_{t}^{*}(x_{2})\chi_{u}(x_{2})dx_{1}dx_{2}$である．これらの物理的な意味については [17] を参照されたい．問題は，$[rs|tu],$,(2)$\epsilon_{ijab}:=(\epsilon_{i}+\epsilon_{j}-\epsilon_{a}-\epsilon_{b})^{-1}$を変数として，代数表式をこれらの多項式と見倣した時の式操作の自動化である．これらの変数は定義から$[rs|tu]=[sr|tu]=[rs|ut]=[sr|ut]=[tu|rs]=[ut|rs]=[tu|sr]=[ut|sr]$ ,(3)$\epsilon_{ijab}=\epsilon_{jiab}=\epsilon_{ijba}=\epsilon_{jiba},$(4)を満たし，また，分子軌道のインデックス$i$と $j,$

$a$

と

$b$

はそれぞれ等価であり，入れ替えられることに注意

すると，式 (1) は最終的に$E_{MP2}= \frac{1}{2}\sum_{ijab}\frac{[ia|jb]^{2}-[ia|jb][ib|ja]}{\epsilon_{i}+\epsilon_{j}-\epsilon_{a}-\epsilon_{b}}$という表現と同じであることがわかる．

これに対してスピン積分 [17] を行い，数値計算に使う式として$\sum_{ijab}\frac{2(ia|jb)^{2}-(ia|jb)(ib|ja)}{\epsilon_{i}+\epsilon_{j}-\epsilon_{a}-\epsilon_{b}}$を得る．数値計算は，例えば(11 11)

$=$

4.744

(21 11)$=$$-0.4177$(71 11)$=$$-0.2379$(12 11)$=$$-0.4177$(77 77)$=$0.5932

$|$

$|$

$|$

$|$

$|$

$\epsilon_{1} = -20.23$$\epsilon_{7}$1 発音は $[kju:kaes]$ ,$)$キューキャス，キューカス．

$=$

0.5899(5)154
といったテーブルが与えられ，分子軌道のインデックスそれぞれに 1, . . . を当てはめたときの値を評価して$\sum$の展開を行う．この例の場合， $j=1,2,$
$i,$

$5$

$\ldots,$と $a,$ $b=6,7$

で展開を行うことになっており，結果$-0.03586$ を得る．

以上が量子化学の典型的な計算の流れであるが，このうちスピン積分までの部分は純粋に記号計算であり，計算機代数の問題としてモデル化できる．本稿に先立って著者らは [14,18] で代数表式の簡約のアルゴリズの機能の一部ムの構築とその実装を完成させている．そこで本稿ではこの実装を，数式処理システム$QC^{2}AS$として利用できるようにし，それを用いて実用レベルの問題である$E_{MP4}$の式の一部$E_{MP4(S)}= \frac{1}{8}\sum a(ijab)\cross (\langle ck||ed\rangle(a(iked)\langleab||cj\rangle\epsilon_{ij}+a(jked)\langle ab||ic\rangle\epsilon_{jc})$

ijklmabcde$+ \langle kc||ml\rangle(a(mlac)\langle kb||ij\rangle\epsilon ka+a(mlbc)\langle ka||ji\rangle\epsilon_{kb})$--$a(lkcd)(\langle ab||cj\rangle\langle id||lk\rangle\epsilon_{ic}+\langle ab||ic\rangle\langle jd||lk\rangle\epsilon_{jc})$$a(kldc)(\langle ka||ij\rangle\langle al|dc\rangle\epsilon ka+\langle ka||ji\rangle\langle bl||dc\rangle\epsilon_{kb}))$$(\epsilon_{ia};=(\epsilon_{i}-\epsilon_{a})^{-1}, \langle ij||ab\rangle :=[ia|jb]-[ib|ja], a(ijab):=\langle ij||ab\rangle\epsilon_{ijab})$を簡約した結果を，その計算時間などとともに紹介する．
2 節では $QC^{2}AS$ の基本的な設計について述べる．システムの形式上の中核であるシステム制御クラスについて 2.1 節で，そして実際の計算で中心的役割を果たす オブジエクトクラスについて 2.2 節でそれぞれの一般的な数式処理システムと述べる．
がどのような動作をするかを 3 節で見る．3.1 節ではしての動作の様子を，3.2 節では量子化学の記号の扱いや，簡約アルゴリズムの計算結果などを紹介する．ま$Q$$QC^{2}AS$$QC^{2}AS$た，簡約操作にかかった計算時間を 3.3 節で示す．

2

システムの設計$QC^{2}AS$ で扱われるオブジエクトの単位である $Q$ オブジエクトにつ
本節では $QC^{2}AS$ の基本的な構成と，$QC^{2}AS$ は現在およそ 14,000 行の $C++$ のプログラムでできている．
て述べる．

$\iota$1は単純な構成で十分な機能を実現できるように，注意深く設計されている．構成要素はシステム制
オブジエクトクラスに大別できる．基本的な設計思想は，システム制御クラスをなるべく小さ御クラスと$QC^{2}AS$$Q$

くし，各クラスの独立性を高いまま保っておくことである．

2.1

システム制御クラス

システム制御クラスは実際には，それぞれ役割の異なる複数のクラスで構成されている．システム制御クラスで管理しているのは，以下のものである．

.
.

$o$

$o$

構文解析器
スコープ (大域，局所)
ログ

環境変数

155
システム制御クラスは，ユーザからの入力の文字列を受け取ると，これを構文解析器で オブジェクトに変換し， オブジェクトを評価する命令を出す．そして オブジェクトの評価が終わると，結果を文字列に変
$Q$

$Q$

$Q$

換し，コンソールに表示する．
各 $Q$ オブジェクトの評価の方法や，コンソールに表示する形式は，$Q$ オブジェクトクラス側のメソッドとして実装されている．これによって，システム制御クラスは，一連の処理の中で今扱っている オブジェク
トが具体的にどういうデータなのかを把握する必要がない．ユーザの入力が意味する式にょって，型の違うオブジェクトが生成されるし，型によって処理する方法も異なるが，システム制御クラスは評価する命令を出し，評価が終わったらコンソールに表示する命令を出すだけである．これはつまり， オブジェクトのデータ型を増やしたり， オブジェクトの内部表現を変更しても，システム制御クラスに一切変更を加える
$Q$

$Q$

$Q$

$Q$

必要がないことを意味している．これはオブジェクト指向言語による開発のメリットと言える．

2.2$QC^{2}AS$.
.

オブジエクトクラスの概要$Q$で扱われるデータは，ほとんど全て$Q$

オブジェクトクラスのインスタンスである． オブジェク$Q$

トクラスの $QC^{2}AS$ における役割は次の 2 つである．

データの保持命令に対する処理方法の実装

整数型などの具体的なデータの型は， オブジェクトクラスのクラス内クラスとして実装されている．上記の 2 つの役割は，実際はこのクラス内クラスが行っている． オブジェクトクラスのインスタンスに出された命令は，このクラス内クラスへの命令に変換され，該当するメソッドが呼び出される．
オブジェクトに対する基本命令は次のようなものがある．括弧内は，明示的に $QC^{2}AS$ から呼び出すと
$Q$

$Q$

$Q$

.
.
.
.

きの関数名である．

$\circ$

評価する (Eval)型を取得する (Type)
大きさを取得する (Size)
画面に出力する (Print)
部分を取り出す (Part)

また，あるデータ型と特別な演算が定義されている場合は，そのデータ型を引数にとって演算を行う命令も定義されている．

オブジェクトのデータ型は，具体的なデータだけでなく，演算などの操作も オブジェクトのインスタンスとして実体が作られる．これは遅延評価を実現するためで，これらの実体はシステム制御クラスから評価する命令が出されるまで保持される．これと基本命令の組合せによって，$QC^{2}AS$ の全ての機能が実現され
$Q$

$Q$

ている．

以下，主な

.
.

$Q$

オブジェクトのデータ型を紹介する．括弧内は，$QC^{2}AS$値である．
整数 ( -Integer)$t$

浮動小数 ( -Float)$t$

上で Type 命令を出したときの返り

156

.
.
.
.
.
.
.
.

.

有理数 ( -Rat onalNumber)
$i$

$t$

多項式 ( -Polynomial)$t$

項 (t-Tem)

識別子 ( -Identifier)$t$

リスト ( -List)
$t$

$2$

電子積分 ($t_{-}$

QCObi)

軌道の添字 (t-OrbIdx)
エラー情報 ( -ErrorInfo)$t$

型情報 (t-TypeInfo)

これ以外にも真偽値型や文字列型，演算や関数呼出などの操作を意味する型など，多くの型が実装されている．これらは基本的に独立しており，このことが保守を容易にしている．

3

計算例とタイミングデータ$QC^{2}AS$はコンソール上で動作し，多くの数式処理シス
この節では $QC^{2}AS$ を使った計算の例を紹介する．

テムと同様に，ユーザの入力に対して対話的に出力を返す．以下，$>$

ザの入力を意味し，$=$で始まる行は$QC^{2}AS$で始まる行はコンソールに対するユーからの出力を意味する．

図 1: $QC^{2}AS$ のスクリーンショット

157
3.1

基本的な数式処理システムとしての動作$QC^{2}AS$は量子化学の記号計算がターゲットだが，基本部分は (普通の) 多項式を扱う数式処理システムとして動作するように設計されている．
数を意味する $Q$ オブジェクトには整数型，浮動小数型，有理数型などがある．型をまたいだ演算もでき，計算結果の型は自動的に適切なものに変換される．例えば整数に整数を足すと整数型であり，浮動小数型に整数を足すと浮動小数型になる．
$>1+1$ ;$=2$$>1.2+1$ ;$=2.2$

有理数は有理数のまま扱う．計算結果は常に既約分数 (あるいは整数) に約分される．有理数同士の演算も，有理数のまま行う．
$>2/4$ ;$=1/2$$>$

1/2 1/3;$+$$=5/6$

有理数と浮動小数の演算では，有理数は一時的に浮動小数に変換され，計算結果は浮動小数になる．
$>$

1/2 1.2;$+$$=1.7$

このように， オブジェクトは型を動的に変えながら計算を行っているが，型の変換は $QC^{2}AS$ にょって適切に行われるため，ユーザは特に目的がない限り， オブジェクトの型について意識する必要がない．
$Q$

$Q$

分子軌道のインデックスとして予約されている文字以外の文字は不定元として扱うことができる．現在$QC^{2}AS$

では英字大文字と，分子軌道のインデックスとして予約されている文字以外の英字小文字，そしてア

ルファベットから始まる 2 文字以上の文字列がこれに該当する．2 文字以上続けて打っても 1 つの不定元として認識するので，不定元の積は で区切る．
$*$

$>$

$=$

xy;
xy

$>x*y$ ;$=y*x$

多項式は内部で定義されている順序によってソートされる．
$>x+y-1$ ;$=y+x-1$$>2*x*y-z$ ;$=-z+2*y*x$

不定元はプログラム変数としても利用できる．値を代入した不定元は，以後プログラム変数として扱われる．

$QC^{2}AS$

ではユーザが明示しない限り多項式は展開しない．展開する場合は Expand 関数を呼び出す．

158$>A$ ;$=$$A$$>A=(x+1)^{arrow}2$;$=(x+1)^{-}2$$>$

Expand (A);$=x^{-}2+2*x+1$

関数名に使う文字列の制限は，プログラム変数のそれと全く同じである．つまりプログラム変数として使える文字列は，関数名にも用いることができる．また，の関数識別子は，関数名と引数の数によって別々$QC^{2}AS$に管理されているため，関数のオーバーロードを許す．

3.2

量子化学の記号の扱い

はでは，軌道のインデックスとして使う文字は起動時に登録される．デフオルトでは占有軌道のインデックス，
は仮想軌道のインデツクスである．これは後でユーザが変えることもできる．これらの文字は不定元やプログラム変数とは振舞が異なり，従って多項式の変数として扱うことは$i,$$QC^{2}AS$

$a,$

$b,$

$j,$

$\ldots,$

$n$

$f$

$\ldots,$

できない．
$>x*x$ ;$=x^{arrow}2$$>i*i$ ;$=$

ERROR: undefined operation $(i*i)$ .
2 電子積分 $[ij|ab]$ は，そのまま入力できる．

$>$[ij Iab] ;$=$$[ij |ab]$2 電子積分の定義からくる等値性 (3) は，暗に使われる．分子軌道のインデックスは，占有軌道か仮想軌道
かで比較 (占有軌道が小さい) され，同じ種類であれば，アルファベットの順番の大小で比較するという順序がつけられている．そして 2 電子積分は，最も左にある分子軌道のインデツクスを優先する辞書式順序で順
では (3) を全て使って得られる等価な 2 電子積分のうち，最も順序の小さい 2 電
序付けされている．
$QC^{2}AS$

子積分に自動的に書き換える．
$>$$[ba|ji]$ ;$=$[ij ab]$>$$[ij|ab]=[ji| ab]$ ;

$=$

True

$>$

$=$

[ij ab] $=[ia| jb]$ ;
$|$

False

2 電子積分の $QC^{2}AS$ 上での扱いは，不定元とほぼ同じ (プログラム変数としては利用できない) である．

従って，2 電子積分の和や積が使えて，それらの結果は 2 電子積分を変数に持つ多項式となる．
$>$$[ij |ab]+[ji|ab]$ ;$=2*[ij|$ abl$>$$[ij |ab]*[ij|ba]$ ;

$=$

[ij

$|$

abl

$\sim 2$

159
$E_{MP2}$など，よく使われる式は組込関数として登録されている．

$\epsilon_{ijab}$

はも $QC^{2}AS$ 上の扱いは 2 電子積分と全く同じである．
$\succ$$MP$$E$(ijab) と表現されてぃる．これ

2 $()$ ;$=(1/4)*E(ijab)*((-[ib|ja]+[ia|jb])^{arrow}2)$$>$

Expand ($MP$

2 ());$=(1/4)*E(ijab)*([ib|ja]^{-}2)+(1/4)*E(ijab)*([ia|jb]^{-}2)-(1/2)*E$ (ij ab) [iblja]$*$[lS] で提案したアルゴリズムの実装は $QC^{2}AS$ の組込関数 Simplify$*$[ialjb]で利用できる．引数は任意の代数
表式を取る．項の順序は分子軌道のインデックスの順序に基づいた組込の順序が使われており，全ての項が$MP$その順序の下，最も小さくなるように書き換えられる．
$>$

Simplify$MP$( $MP$ 2 ());$=(1/2)*E(ijab)*([ib|ja]^{-}2)-(1/2)*E$ (ijab) [iblja]$*$$E_{MP3}[17]$

$>$

$*$

[ialjb]$E_{MP2}$ と全く同様にしてできる．
の簡約も，

A MP30;$=(1/8)*E$ (klab) $*E(ijab)*(-[kb|la]+[ka|lb])*(-[ib|ja]+[ia|jb])*(-[il|jk]+[ik|jl])+(1/S)$$*E($

ij $cd)*E($ ij $ab)*(-[ad|bc]+[ac|bd])*(-[id|jc]+[ic|jd])*(-[ib|ja]+[ia|jb])-(1/4)*E$ (ijab$)*(E(jkbc)*(-[jc|kb]+[jb| kc])*(-[ia| kc]+[ik|ac])+E(jkac)*([jc|ka]-[ja| kc])*(-[ib|kc]+[$$ik|bc])+E(ikbc)*([ic|kb]-[ib|kc])*(-[ja|kc]+[jk|ac])+E(ikac)*(-[jb|kc]+[jk|bc])*(-[ic|$$ka]+[ia|kc]))*(-[ib|ja]+[ia|jb])$$>A=Expand(A)$ ;$=-(1/8)*E$ (klab) $*E$ (ijab) $[kb |la]*[ib|ja]*[il|jk]+(1/8)*E$ (klab) $*E$ (ijab) $[kb |la]*[ib| ja]$
$*$

$*$

$*[ik|jl]+(1/8)*E$ (klab) $*E$ (ijab) $[kb |la]*[ia|jb]*[il|jk]-(1/8)*E$ (klab) $*E$ (ijab) $[kb |1a]*[$ia $|jb]*[ik|jl]+(1/8)*E$ (klab) $*E$ (ij ab) $*[ka|lb]*[ib|ja]*[il|jk]-(1/8)*E$ (klab) $*E$ (ij ab) $*[ka$
$*$

$*$

$|lb]*[ib|ja]*[ik|jl]-(1/S)*E$ (klab) $*E(ijab)*[ka|lb]*[ia|jb]*[il|jk]+(1/8)*E$ (klab) $*E$ (ija$b)*[ka|lb]*[ia|jb]*[ik|j1]+(1/4)*E$ (jkbc) $*E$ (ij ab) $*[jc|kb]*[ib|ja]*[ia| kc]-(1/4)*E$ (jkbc)$*E$ (ijab)$[jc|kb]*[ib|ja]*[ik|ac]-(1/4)*E$ (jkbc) $*E(ijab)*[jc|kb]*[ia|kc]*[ia|jb]+(1/4)*E$$*$(jkbc) $*E$ (ijab) $[jc |kb]*[ia|jb]*[ik|ac]-(1/4)*E$ (jkbc) $*E(ijab)*[jb|kc]*[ib|ja]*[ia|kc]+($$1/4)*E$ (jkbc) $*E(ijab)*[jb|kc]*[ib|ja]*[ik|ac]+(1/4)*E(jkbc)*E(ijab)*[jb|kc]*[ia|kc]*[ia$$*$jb] $-(1/4)*E$ (jkbc) $*E$ (ijab) [jb kc] $*[ia| jb]*[ik| ac]-(1/4)*E$ (jkac) $*E$ (ij ab) $[jc|ka]*[$ ib’$c]*[ib|ja]+(1/4)*E$ (jkac) $*E$ ( ijab) $*[jc|ka]*[ib|kc]*[ia|jb]+(1/4)*E$ (jkac) $*E$ (ij ab) [jclka]$*[ib|ja]*[ik|bc]-(1/4)*E$ (jkac) $*E$ (ij ab) $*[jc|ka]*[ia|jb]*[ik|bc]+(1/4)*E$ (jkac) $*E$ (ijab) [
$*$

$|$

$|$

$*$

$k$

$*$

$*$

ja $|kc]*[ib|kc]*[ib|ja]-(1/4)*E$ (jkac)
$j$

$*E$

(ij ab) $*[ja|kc]*[ib|kc]*[ia|jb]-(1/4)*E$ (jkac) $*E(i$ab) $*[ja|kc]*[ib|ja]*[ik|bc]+(1/4)*E$ (jkac) $*E(ijab)*[ja|kc]*[ia|jb]*[ik|bc]-(1/4)*E$ (ikb$c)*E(ijab)*[ja|kc]*[ic|kb]*[ib|ja]+(1/4)*E(ikbc)*E(ijab)*[ja|kc]*[ic|kb]*[ia|jb]+(1/4)$(ikbc) $*E(ijab)*[ja|kc]*[ib|kc]*[ib|ja]-(1/4)*E$ (ikbc) $*E(ijab)*[ja|kc]*[ib|kc]*[ia|jb]$$*E$$+(1/4)*E$ (ikbc) $*E$ (ijab)$*$$[jk |ac]*[ic|kb]*[ib|ja]-(1/4)*E$ (ikbc) $*E$ (ij ab) $*[jk| ac]*[ic|kb]*[$ia $|jb]-(1/4)*E$ (ikbc) $*E$ (ij ab) $*[jk|ac]*[ib|kc]*[ib|ja]+(1/4)*E$ (ikbc) $*E($ ij $ab)*[jk|ac]*[ib$$|kc]*[ia|jb]+(1/4)*E$ (ikac) $*E$ (ijab) $[jb |kc]*[ic|ka]*[ib|ja]-(1/4)*E$ (ikac) $*E$ (ijab) [jb $|k$
$*$

$*$

$c]*[ic|ka]*[ia|jb]-(1/4)*E$ (ikac) $*E$ (ijab) $[jb |kc]*[ib|ja]*[ia|kc]+(1/4)*E$ (ikac) $*E$ (ijab)$*[jb|kc]*[ia|kc]*[ia|jb]-(1/4)*E$ (ikac) $*E$ (ij ab) $*[jk| bc]*[ic|ka]*[ib|ja]+(1/4)*E$ (ikac) $*E$$*$$(ijab)*[jk|bc]*[ic|ka]*[ia|jb]+(1/4)*E$ (ikac) $*E(ijab)*[jk|bc]*[ib|ja]*[ia|kc]-(1/4)*E(i$kac) $*E$ (ijab)$*$$[jk |bc]*[ia|kc]*[ia|jb]-(1/S)*E($ ij $cd)*E$ (ijab) $[ad |bc]*[id|jc]*[ib|ja]+(1/$
$*$

160
$8)*E(ijcd)*E(ijab)*[ad|bc]*[id|jc]*[ia|jb]+(1/8)*E(ijcd)*E$ (ijab) $[ad |bc]*[ic|jd]*[ib|j$$a]-(1/8)*E$ (ijcd) $*E$ (ijab) $[ad |bc]*[ic|jd]*[ia|jb]+(1/8)*E$ (ij cd) $*E$ (ijab) $[ac |bd]*[id| jc]$
$*$

$*$

$*$

$*[ib|ja]-(1/8)*E($ ij $cd)*E$ (ijab) $[ac |bd]*[id|jc]*[ia|jb]-(1/8)*E($ ij $cd)*E$ (ij ab) $*[ac|bd]*[$ic $|jd]*[ib|ja]+(1/8)*E$ (ijcd) $*E$ (ijab) [aclbd] [icljd] [ialjb]
$*$

$*$

$*$

$*$

多項式の項数は Size 関数によって取得できる．
$>$

Size (A);$=48$

簡約前の $E_{MP3}$ を展開したときの項数は 48 であった．これを Simplify$MP$ 関数を用いて簡約すると$>B=S$ impl ify$MP$ ( $MP$ 3 ()) ;$=-(1/2)*E(klab)*E(ijab)*[kb|la]*[ib|ja]*[il|jk]+(1/2)*E$(klab) $*E$ (ij ab) $[kb |la]*[ib|ja]$$*[ik|jl]+E$ (jkbc) $*E(ikac)*[jc|kb]*[ic|ka]*[ia|jb]-E$ (jkbc) $*E$ (ikac) [jclkb] [iclka] [ij a$b]-2*E$ (jkbc) $*E$ (ikac) $[j c|kb]*$ [ ia kc] [ ia jb] $+2*E$ (jkbc) $*E$ (ikac) $[j c|kb]*$ [ ia kc] * [ij ab]
$*$

$*$

$+E$

$|$

$*$

$*$

$|$

$*$

$*$

$*$

$|$

$|$

(jkbc) $*E$ (ikac) $[jb |kc]*[ia| kc]*[ia|jb]-E$ (jkbc) $*E$ (ikac) [jb kc] $*[ia|kc]*[ij|ab]-(1/2)$
$*$

$*$

$|$

$*E(ijcd)*E(ijab)*[ad|bc]*[id|jc]*[ib|ja]+(1/2)*E(ijcd)*E(ijab)*[ad|bc]*[id|jc]*[ialjb]$$>$

Size (B) ;$=10$となり，10 項まで減る．
$E_{MP4(S)}$$E_{MP3}$は展開すると 128 項の式になるため，展開された式の$QC^{2}AS$

上での表示は割愛するが，$E_{MP2}$やと全く同じ手順によって簡約することができる．

$>MP4S()$ ;$=(1/8)*E(ijab)*([km|lc]-[kl|mc])*(E$ (kb) $*E(lmbc)*([lc|mb]-[lb|mc])*([ia|jk]-[ik|ja])+E$(ka) $*E(lmac)*([lc|ma]-[la|mc])*(-[ib|jk]+[ik|jb]))*(-[ib|ja]+[ia|jb])+(1/8)*E(ijab)*(E$$(jc)*E$ ( jkde) $*([je|kd]-[jd|ke])*(-[ib|ac]+[ia|bc])+E$ ( ic) $*E$ ( ikde) $*([jb|ac]-[ja|bc])*([ie$$|kd]-[id|ke]))*(-[ke|cd]+[kd|$ cel) $*(-[ib|ja]+[ia|$ jbl) $+(1/8)*E(ijab)*(E(klcd)*([kd|lc]-[$kc $|1d])*(E$ (kb) $*([ia|jk]-[ik|ja])*(-[ld|bc]+[lc|bd])+E$ ( ka) $*(-[1d| ac]+[lc|ad])*(-$ [ ia jk]$|$$+[ik|ja]))+E(klcd)*([kd|lc]-[kc|ld])*(E(jc)*([jl|kd]-[jk|ld])*(-[ib|ac]+[ia|bc])+E$ (ic)$*([jb|ac]-[ja|bc])*([il|kd]-[ik|ld])))*(-[ib|ja]+[ia|jb])$$>Si$ ze $(A=Expand(MP4S ()))$ ;$=128$$>B=SimplifyMP(A)$ ;$=E$ (mc) $*E$ (klbc) $*E$ (ijac) $*$ $[kc |lb]*[kb|lm]*[ic|ja]*[ia|jm]-2*E$ (mc) $*E$ (klbc) $*E$ (ijac)$*$[kc lb$|$$]*[kb|lm]*[ic|ja]*[im|ja]+E$ (mc) $*E$ (klbc) $*E$ (ij ac) $*[kc| lb]*[km|lb]*[ic|ja]*[im|ja]-(1/2)*$(ld) $*E$ (klbc) $*E($ ij $ad)*[kc|bd]*[kc|lb]*[id|ja]*[id|j1]-(3/2)*E$ (ld) $*E$ (klbc) $*E$ (ij ad) $*[kc|$$E$$bd]*[kc|lb]*[id|ja]*[ia|j1]+(1/2)*E$ (ld) $*E$ (klbc) $*E$ (ijad) $[kc |bd]*[kc|lb]*[id|ja]*[il|$ jd$]+(3/2)*E$ (ld) $*E$ (klbc) $*E($ ij $ad)*[kc|bd]*[kc|lb]*[id|ja]*[il|ja]+(1/2)*E$ (ld) $*E$ (klbc) $*E$ (ij$ad)*[kc|bd]*[kb|lc]*[id|ja]*[id|j1]+(3/2)*E$ (ld) $*E$ (klbc) $*E($ ij $ad)*[kc|bd]*[kb|lc]*[id|$ ja$*$$]*[ia|jl]-(1/2)*E$ (ld) $*E$ (klbc) $*E$ (ijad) $[kc |bd]*[kb|lc]*[id|ja]*[il|jd]-(3/2)*E$ (ld) $*E$ (kl$bc)*E$ (ij ad) $[kc |bd]*[kb|lc]*[id|ja]*[il|ja]+E$ (ke) $*E$ (jkcd) $*E$ (ikab) [jdl $ce$ ] $*[jd|kc]*[ib|$
$*$

$*$

$*$

ae] $*[ib|ka]-2*E$ (ke) $*E$ (jkcd) $*E$ (ikab)ab) $*[jd| ce]*[jc|kd]*$ [ ib ae] $*[ia|kb]$
$|$

$*$

$[j d|ce]*[jd| kc]*[ib| ae]*[ia|kb]+E$ (ke) $*E(jkcd)*E$ (ik

161
$>$

Size (B) ;$=14$

簡約結果は 128 項から 14 項まで減ってぃる．
$E_{MP4(S)}$$=$$\sum\frac{1}{2}\epsilon\iota d\epsilon_{klbc}\epsilon_{ijad}[k_{\mathcal{C}}|bd][id|ja]$

ijklm
abcde
$\cross ([k_{\mathcal{C}}|lb]([il|jd]-[id|jl]+3[il|ja]-3[ia|jl])+[kb|l_{C}]([id|jl]-[il|jd]+3[ia|jl]-3[il|ja]))$$+ \epsilon\epsilon\epsilon_{ijac}[k_{C}|lb][i_{C}|ja]([kb|lm][ia|jm]-2[kb|lm][im|ja]+[km|lb][im|ja])$$+ \epsilon_{ke}\epsilon_{jkd}\epsilon_{ikb}[jd|ce][ib|ae]([jd|kc][ib|ka]-2bd|kc][ia|kb]+bc|kd][ia|kb])$

3.3.

タイミングデータ

表 1 は前節の計算例の計算時間をまとめたものである．計測は

CPU が Intel(R) Core $(TM)2$ Duo 2. $20GHz,$
メモリが $1GB,$ $OS$ が Windows$XP$ (32bit) の計算機を使って行った．この結果から，$QC^{2}AS$ に実装した簡約
アルゴリズムは実用に足りる性能を持っていると言える．

表 1: $QC^{2}AS$ による代数表式の簡約にかかった時間

4

まとめと今後の課題[18] で着想を得，実現に向けて開発を行ってきた数式処理システム $QC^{2}AS$ は，その骨子ができあがり，数式処理システムとしての第一歩を踏み出した．本稿ではその開発の報告を行い，この実装が実用レベルの問題である $E_{MP4(S)}$ の簡約を行うのに十分な性能を持っていることを示した．また，$QC^{2}AS$ の設計の骨組みについて紹介した．

$QC^{2}AS$のシステム構成は単純で，各クラスは高い独立性を保ってぃる．このことが，シス

テムの保守や拡張を容易にしてぃる．

今後の課題として，量子化学の記号計算を紹介する際に述べた，スピン積分の実装が挙げられる．スピン
積分をしてようやく代数表式を数値計算に使う準備ができる．ここから数値計算のためのコードを生成するなどの展開がある．また，代数表式を導出する理論 [17] をシステム上に組み込み，代数表式の自動導出にも着手したい．
$QC^{2}AS$

は非オープンソースのフリーウェアとして配布されており，最新版のバイナリは

サイト (http: $//www2$ .rikkyo.ac. $jp/web/fullmoon/qc2as/$ ) で入手できる．

謝辞
本研究は立教大学学術推進特別重点資金の支援のもと行われている．

$QC^{2}AS$

のウェブ

162
参考文献
[1] W. Adams and P. Loustaunau. An Introduction to Gr\"obner Bases, Vol. 3 of Gmduate Studies inMathematics. AMS, 1994.
[2] A. Auer, G. Baumgartner, and D. E. Bemholdt. Automated code generation for many-body electronic structure methods: the tensor contraction engine. Molecular Physics, Vol. 104, pp. 211-228,

2006.
[3] R. J. Bartlett. Many-body perturbation theory and coupled-cluster theory for electron correlationin molecules. Annual Review of Physical Chemistry, Vol. 32, pp. 359-401, 1981.
[4] R. J. Bartlett and M. Musial. Coupled-cluster theory in quantum chemistry. Reviews of Modem
Physics, Vol. 79, pp. 291-352, 2007.
[5] D. Cox, J. Little, and D.
second edition, 1996.

[6] D. Cox, J. Little, and D.

$O$

$O$

’Shea. Ideals, Varieties, and Algonthms. Springer-Verlag, New York,’Shea. Using Algebmic Geometry. Springer-Verlag, New York, 1998.

[7] D. G. Fedorov and K. Kitaura, editors. The fragment molecular orbital method: practical applications
to large molecular systems. CRC Press, New York, 2009.
[8] J. B. Foresman and E. Frisch. Exploring Chemistry with Electronic Structure Methods. Gaussian,Inc., second edition, 1996.

[9] Gordon Group/GAMESS Homepage. http: $//www.msg.$ ameslab. $gov/gamess/.$[10] S. Hirata. Tensor contraction engine: abstraction and automated parallel implementation ofconfiguration-interaction, coupled-cluster, and many-body perturbation theories. Joumal of Physical
Chemistry , Vol. 107, pp. 9887-9897, 2003.
$A$[11] S. Hirata. Symbolic algebra in quantum chemistry. Theoretical Chemistry Accounts, Vol. 116, pp.
2-17, 2007.

[12] M. Minimair and P. Bamett. Solving polynomial equations for chemical problems using gr\"obnerbases. Molecular Physics, Vol. 102, pp. 2521-2535, 2004.
[13] T. Nakano, T. Kaminuma, T. Sato, K. Fukuzawa, Y. Akiyama, M. Uebayasi, and K. Kitaura.
Fragment molecular orbital method: use of approximate electrostatic potential. Chemical Physics
Leuers, Vol. 351, pp. 475-480, 2002.

[14] T. Osoekawa, N. Shinohara, Y. Mochizuki, and K. Yokoyama. Gr\"obner basis technique for algebraic formulas in electron correlation theories. Proceeding of the 10th Intemational Conference on
Computational Science and Its Applications (ICCSA-2010), pp. 17-23, 2010.
[15] RCSB Protein Data Bank. http: $//www.pdb.orb/.$[16] I. Shavitt and R. J. Bartlett. Many-Body Methods in Chemistry and Physics. Cambridge University
Press, London, 2009.
[17] A. Szabo and N. S. Ostlund. Modem Quantum Chemistry. MacMillan, New York, 1982.
[18] 小副川健，望月祐志，横山和弘．電子相関理論のための数式処理システムに向けて．京都大学数理解析
研究所講究録，巻号未定，，2010.