演題 Common Lisp によるポリヘックス上のケクレ構造の数え上げ
発表者
(所属)
森川鉄朗 (上越教育大学自然系)
連絡先 〒943 上越市山屋敷町1 Tel: 0255-21-3433 Facsim: なし
上越教育大学自然系 E-mail:
キーワード ケクレ構造, 数え上げ, ベンゼノイド, Commom Lisp
開発意図
適用分野
期待効果
特徴など
ベンゼノイド(ラジカルまたはその部分構造)のリスト表現, Lispによるケクレ 構造の数え上げ
環境 適応機種名 Common Lisp コンパイラまたはインタプリタを利用できる機種. 作業環境: Mac Quadra 650,
OS 名 MacOS 7.1E
ソース言語 Macintosh Common Lisp 2.01
周辺機器
流通形態
右のいずれ
かに○をつけ
てください)
  • 化学ソフトウェア学会の
    無償利用ソフトとする
  • 独自に配布する
  • ソフトハウス、出版社等から市販
  • ソフトの頒布は行わない
  • その他
  • ○未定
具体的方法

1. ケクレ構造について

 ケクレ構造の数Kは, 共役系分子特にベンゼノイド炭化水素の物理的化学的性質, たとえば, 熱力学的安定性, π電子エネルギー, 共鳴エネルギー, Paulingのbond orderなど, と強く関係することが知られていて, Kを数える方法もいろいろと提案されている[1]. それらの方法の多くは, 共役系の全体に対して適用できるけれども, 共役系の部分系やradical siteを有する共役系Pには, 適用しにくい. K{P}が簡単に求められると, Pの性質を理論的に予測するのに役立つ. K{P}計算のアルゴリズムは, 文献[2]に報告した. ここでは, それを算譜する際の要点や計算結果を述べる.

2. 表現とアルゴリズムについて

 ベンゼノイド炭化水素をポリヘックスPとみなす. Pは, 正六角形が網状に結合しているグラフで, どの正六角形もその少なくとも一辺は他の正六角形の一辺と接しているとする. 以下では簡単化のために, Pはグラフ理論的には平面で, ホールを持たない場合について, 説明する(Pの周囲だけで, Pが決定する). Pの周囲には, 原子価2と3の頂点がある. それぞれをAとBとであらわす(共役系では, =A- や =B< となる). すると, ベンゼンでは6個の頂点は全てAであるので, (A A A A A A) と表現できる. つまり, Lisp [3]で書けば, (setq benzene '(A A A A A A)) となる. 同様に, コロネンや重なりのあるヘリセンなども以下のように, 書き下せる: (setq coronene '(B A A B A A B A A B A A B A A B A A)), (setq hexahelicene '(A A B B B B B A A A A B A A B A A B A A B A A B A A)). 部分構造をあつかうには, 問題の部分構造の周囲をSとし, 残りの周囲をrとして, P = (S r) のように表現すればよい.
 コロネンのBA間を一重結合あるいは二重結合に定めてみる. すると, K{coronene} = K{(B-A A B r)} + K{(B=A A B r)}となる. 第一項は(B-A=A-B r)のように, 第二項は(B=A-A=B r)のように, 結合が交代する. 結局, コロネンから正六角形を一つ消去し簡略化されたPが生成されて, K{coronene} = K{(A B B A r)} + K{(C B B C r)}となる. ここで, Cは共役系に参加しない(radical site), 原子価2の頂点である. このような簡略化に必要な全ての式[2]を集めて, (defun kcount (P) . . . ) を再帰的に定義する. 与えられたPは, ついには, 正六角形の群となる. この群を, K{(A A A A A A)} = 2, K{(C C A A A A)} = 1 などと数えれば, K{P}が求められる.
 補助関数の例. Pの周囲は, どの頂点から書き出しても, 等価なリストである; そこで, perimeters PとQがequivalentか否かを判定する (defun eqperip (P Q) . . . rerurn t . . . return nil . . .) をつくる. Pがその部分Sとして, たとえば, (C A C), を含めば, K{P}=0である; そこで, (defun subperi (S P) . . . return t . . . return nil)をつくる.

3. 計算例

Welcome to Macintosh Common Lisp Version 2.0.1!
? (kcount coronene)
20
? (kcount hexahelicene)
21
? (setq circumcoronene '(B A A B A B A A B A B A A B A B A A B A B A A B A B A A B A))
? (kcount circumcoronene)
980
; Kekule Structures in Benzenoid Hydrocarbons, p. 71, Fig. 6.9
? (setq cyvgut71 '(b a a a a b a b a b b a b b a a a a b a a b a b b a a b b a b a b b b a b a a a a b a b a a b b a b b b a a a a b a a b a a b a b b a b a b a a b b b a b a ))
? (kcount cyvgut71)
5114

4. 文献

[1] N. Trinajstic, Chemical Graph Theory, CRC Press, 1992, Chap. 8.
[2] T. Morikawa, "Enumeration of Kekule Structures in Polyradical Polyhexes," Computers and Chemistry 20(2), 159 - 165 (1996). Eqs. (13) and (17) should be read as K{[b a' a b r]} = K{[a b b a' r]} and K{[b a' b r]} = K{[a b b b a r]}, respectively.
[3] G. L. Steele, COMMON LISP: The language, Digital Press, 1984.
[4] "Macintosh Common Lisp 2.0.1 Release Notes," "Getting Started with Macintosh Common Lisp," and "Macintosh Common Lisp Reference," Apple Computer Inc.