まず、本発明の基本原理について説明する。
本発明は、会計システムや売買システムなどの論理演算システムを、時々刻々と変化する値を有する点の集合からなる多様体として捉え、この多様体に、ユーザ要求に応じた集計結果である複数の論理出力構造を、局所座標系として階層的に定義し、局所座標系の各点をメモリ空間に写像し、該メモリ空間上で局所座標系の各点の値を更新するものである。ここで、局所座標系の各点の値の更新は、要求仕様に応じた関数が組み込まれたチューリングマシンを用いて行われる。
これにより、この多様体に対する複数の論理入力(レコード)を、多様体上に階層的に形成された個々の局所座標系(個々の会計帳簿など)毎に集計し、各局所座標系の論理出力(例えば個々の会計帳簿における集計結果)をリアルタイムで生成することが可能となる。
このような基本原理の本質は、問題を場の理論を用いて解決する点にあり、つまりは、演算対象となる事象(問題)を、この事象に影響を与える要因(論理入力)により変化する値(場)を有する点の集合として捕らえ、演算対象である問題を個々の点に分解し、分解した点の値(基本変数)と、論理入力に含まれる、この基本変数に影響を与える入力値とを一対一に対応させ、論理入力が入るだびに、基本変数を、これと入力値とを対応付ける既定の関数に従って更新するというものである。
なお、場(field)とは、空間の各点毎に定義されていて、時々刻々と変化する量(基本変数)である。言い換えると、場とは、空間座標rと時間座標tとを引数に持つ関数をいい、場の理論とは、場を基本変数とする量子論をいう。
本発明では、上述したように基本変数と入力値とを対応付ける既定の関数は、以下の実施形態で詳述するように、決定性チューリングマシンの機能を定義するものであり、上記論理出力構造における基本変数は、この決定性チューリングマシンにより更新される。
なお、決定性チューリングマシンは、論理入力に含まれる、各論理入力値に割り当てられているキー(つまりアドレス)に基づいて、メモリ空間上に写像された点を見つけ、この点の値(基本変数)を、論理入力に含まれる入力値により更新する。
従って、本発明は、あらゆる演算処理に適用できるものであり、どのような複雑な演算処理でも、所望とする論理出力構造を有する演算結果に応じて、演算対象となる問題を点の集合(基本変数の集合)に分解し、この基本変数と、論理入力に含まれる入力値とを一対一に対応付け、現在の基本変数に現在の入力値を加えるという構成により、演算の解を求めることができる。
信号処理などの例を挙げると、時間軸上で振幅レベルが変化する信号(入力データ)は、フーリエ変換などにより周波数スペクトル(論理出力構造を有する演算結果)に変換されるが、本発明では、この時間軸上で変化する信号の差分を入力として、周波数スペクトルをリアルタイムで求めることも可能である。
つまり、信号解析という問題を、信号の基本周波数及び第2〜第n高調波という複数の周波数成分(変化する値を有する点)に分解し、信号の入力振幅レベルという入力データと各周波数成分の値(基本変数)とを再帰差分方程式により対応付けることにより、信号のフーリエ変換などの処理も、入力信号の振幅レベルの変化(差分)を入力として、信号の時間分解能に応じた時間を最小の処理単位としてリアルタイムで行うことができる。
また、このような本発明の場の理論を用いた演算システムは、これを実行するプログラムが正しいことを証明する必要はないことも大きな特徴である。
つまり、このような場の理論を用いた演算が正しいことについては、論理出力構造における基本変数と、論理入力における論理入力値とは一対一の対応であるため、チューリングマシンにより行う演算が正しいことを証明すればよいが、チューリングマシンによる演算は、再帰差分方程式(y(n)=y(n−1)+u(n))で行われ、この演算が正しいことは、数学的帰納法により証明されることから、本発明の場の理論を用いた演算システムを実行するプログラムが正しいことを個別に証明する必要はない。
さらには、複数の論理出力構造(局所座標系)が階層的に定義される演算結果については、局所座標系毎に異なる関数を含む決定性チューリングマシンの動作を重ねあわせることで、所望とする演算結果を得ることができる。
図34は、本発明の基本原理を説明する図であり、図34(a)は、会計全体に対応する多様体Rsを示し、図34(b)〜(d)は、多様体上に定義された個々の局所座標系を示し、図34(e)は、局所座標系の点をメモリー空間に写像した状態を示している。
図34に示す多様体Rsは、時々刻々と変化する演算対象値(基本変数)を有する複数の点Prsから構成されている。
このような多様体Rsでは、ユーザ要求が、会計システムの所定の項目に着目した集計結果を求めるというものである場合は、多様体Rsを、会計上の計算の対象となるすべての演算対象値を有する点からなるものとして捕らえ、多様体Rs上に、例えば、ユーザ要求に応じた種々の会計帳簿として、局所座標系LCo、LCo1、LCo2が定義される。
この場合、多様体を構成する点Prsには、預金の残高、売掛金の残高、設備に対する投資額といった、時々刻々と変化する値を含む項目が該当することとなる。
従って、このような会計に相当する多様体Rsにおいて、例えば、縦軸に、預金、売掛金、商品、建物、設備、借方計、売上、借入金、資本金、及び貸方計を設定し、横軸に、前月残、借方、貸方、及び残高を定義すると、図3Aに示す会計帳簿(試算表)Saである論理出力構造が局所座標系LCoとして定義される。
また、多様体Rsにおいて、例えば、縦軸に、預金の合計、預金の前月残を設定し、さらに日付として8/10、8/20、8/25、8/31を伝票番号とともに設定し、横軸に、前月残、借方、貸方、及び残高を定義すると、図3Aに示す会計帳簿(預金元帳)Sbである論理出力構造が局所座標系LCo1として定義される。
さらに、多様体Rsにおいて、例えば、縦軸に、建物及び設備を資産番号とともに設定し、また、建物及び設備の小計を設定し、横軸に、前月残、借方、貸方、及び期末残を定義すると、図3Aに示す会計帳簿(固定資産台帳)Scである論理出力構造が局所座標系LC02として定義される。
ここで、図34(b)〜図34(d)は、多様体Rs上に定義した局所座標系LCo、LCo1、LCo2を示しており、このような局所座標系LCo、LCo1、LCo2の点をメモリ空間Msに写像し、各点の有する値を、このメモリ空間Msの、各局所座標系を写像した各メモリ領域Aco、Aco1、Aco2の対応するアドレスに格納するようにする。
また、このメモリ空間Msには、会計帳簿体系Acs(図3E)及び勘定科目マスターAm(図3F)も格納されている。
このようにメモリ空間Msに上記局所座標系の各点の値を格納することで、各局所座標系の各点の値をチューリングマシンTmにより再帰的枚挙に更新可能となる。
また、チューリングマシンは、基本的には、現状態とその状態で入力された論理入力の入力値とに基づいて、該入力値により示されたメモリ空間上の位置の点が有する値(基本変数)を更新するものであるが、このチューリングマシンとしては、各局所座標系に応じてその機能が定義されたものが用いられる。また、チューリングマシンの機能は状態遷移図あるいは状態遷移表により定義される。
ここで、論理入力には、点の値である入力値だけでなく、その入力値を用いて更新すべき、論理出力構造における点の位置を示す情報(キー情報)も含んでおり、チューリングマシンは、このキー情報に基づいて、論理出力構造における更新すべき点を検出し、該検出した点の値を、入力値に基づいて更新する。
なお、以下の実施形態では、本発明の論理演算システムとして、会計システム及び分散共分散演算システムについて具体的に説明するが、本発明の論理演算システムは、上述したように、これらに限定されるものではなく、本発明は、論理入力に基づいてテーブル形式の演算結果を算出するものであれば、どのような論理演算システムであっても適用可能である。
以下、本発明の実施形態について図面を参照しながら説明する。
(実施形態1)
図1は、本発明の実施形態1によるコンピュータシステム1を説明する図であり、図1(a)は、その全体構成の一例を示す図である。
〔コンピュータシステム1の全体構成の説明〕
この実施形態1のコンピュータシステム1は、複数の端末コンピュータ2と、ホストコンピュータ3と、複数の端末コンピュータ2とホストコンピュータ3とを接続するネットワーク4とを含む。
ネットワーク4は、任意のネットワークであり得る。ネットワーク4は、例えば、インターネットである。あるいは、ネットワーク4を介することなく、複数の端末コンピュータ2とホストコンピュータ3とがケーブルなどの電気配線を介して直接的に接続されていてもよい。
複数の端末コンピュータ2のそれぞれは、例えば、店舗に設置される。図1に示される例は、1台の端末コンピュータ2が店舗A1に設置され、もう1台の端末コンピュータ2が店舗A2に設置され、他の1台の端末コンピュータ2が店舗A3に設置されている例である。もちろん、ネットワーク4を介してホストコンピュータ3に接続される端末コンピュータ2の数は3に限定されるわけではない。任意のN(Nは2以上の整数)個の端末コンピュータ2がネットワーク4を介してホストコンピュータ3に接続され得る。
ホストコンピュータ3は、例えば、集計センタに設置される。
ここで、各店舗に設置された端末コンピュータ2は、商品が売れたとき、会計伝票をレコードとして1つずつホストコンピュータ3に送信するよう構成されている。ホストコンピュータ3は、各店舗の端末からレコードとして送信された会計伝票を受け取り、ホストコンピュータ3内に構築されている会計システムの全会計帳簿を更新するよう構成されている。
〔ホストコンピュータ3の説明〕
図1(b)は、ホストコンピュータ3の構成の一例を示す。
ホストコンピュータ3は、CPU31と、主記憶装置32と、ハードディスク装置(HDD)33と、ネットワークインタフェース部34と、ユーザ入力部36と、データ出力部37とを含む。これらの構成要素31〜34、36、37は、例えば、バス35を介して互いに接続されている。ユーザ入力部36はキーボードやマウスなどの入力デバイスであり、データ出力部37は、表示部およびプリンタ部などを含んでいる。
HDD33には、ホストコンピュータ3にてクライアントの要求するリアルタイム演算システムを構築するためのプログラム(演算プログラム)が予め格納されている。なお、この演算プログラムは、CD−ROM、DVD−ROMなどの任意のタイプのコンピュータ読み取り可能な記録媒体に記録され得る。そのような記録媒体に記録された演算プログラムは、周辺装置(例えば、ディスクドライブ)を介してHDD33にロードされ得る。演算プログラムの一部またはデータの一部は、必要に応じて主記憶装置32に移される。CPU31は、主記憶装置32に高速にアクセスすることが可能である。
ここで、CPU31が、HDD33に格納されている演算プログラムを実行することによって、ホストコンピュータ3は、クライアントが要求するリアルタイム演算システム10として機能する。
〔リアルタイム演算システム10の説明〕
図2は、このリアルタイム演算システムの構成を説明する図である。
このリアルタイム演算システム(以下、単に演算システムともいう。)10は、知識構造化プログラミングを使用してリアルタイム処理を行うシステムであって、このリアルタイム処理を行う時の障害時対応も考慮したシステム構成を有している。
この演算システム10は、入力データ(論理入力)(図3D参照)に対応した関数や障害時に必要な関数を呼び出すカーネル11と、取引,残高,データなどの内容の整合性を監視し、内部統制機能を果たす監視エージェント12と、会計,売買などの業務に関する集計処理を行い、データの1件毎に知識データベースに解を出し、停止する業務機能部100aと、業務毎の複数の論理出力を階層的に全体として表現・格納する知識データベース20と、知識データベース更新状態での値を、障害復旧などに使用する状態ログDLとして一定時間毎に格納する状態ログ格納部14と、業務機能部で種々の局所座標系を定義する際に参照するマスター情報を格納するマスタ情報格納部13とを有している。
ここで、業務機能部100aは、会計システム100、売買システム101などの異なる演算システムを含んでおり、カーネル11により、入力データの識別IDに応じた演算システムが関数として呼び出されるようになっている。呼び出されたシステムは、その論理出力構造としての局所座標系がメモリ空間上に写像され、知識データベース20が形成される。カーネル11は、上記関数の呼び出しに加えて、定期的な監視エージェントの呼出し、種々の業務に関する集計処理の実行の階層化、並列化、分散化、及び協調を実現するものである。また、知識データベース20は、集計処理の結果(演算結果)を証明付きの知識として知識共有を行うのに用いられる。
なお、上記クライアントが要求する演算システムは、会計システムや売買システムに限定されるものではなく、在庫管理システムや生産管理システム、さらにはテストや実験結果の集計システムなど、複数の論理入力を集計する演算処理を行って、その集計結果を論理出力として生成するものであればどのようなものでもよい。
〔会計システム100の説明〕
図3Aは、本実施形態1の会計システム100の論理出力構造Asを示しており、この論理出力構造Asは、クライアントの要求する会計システム100に基づいて設計されたものであり、知識データベース20内に構築されている。
ここで、会計システム100の論理出力構造Asは、主要帳簿としての試算表Sa、補助帳簿としての預金元帳Sb及び固定資産台帳Scの3つの帳簿を含んでおり、一例として、2008年8月31日時点での経営状態を示している。
〔各帳簿(論理出力構造)の説明〕
試算表Saは、科目(勘定科目)としてエリアFa0に割り当てられた、預金Pa1,売掛金Pa2,商品Pa3、建物Pa4、設備Pa5、借方計Pa6、売上Pa7、借入金Pa8、資本金Pa9、貸方計Pa10を含んでおり、それぞれの科目別に、前月残、借方、貸方、残高を格納するエリアFa1〜Fa4が設けられている。
また、この試算表Saは、図34を用いて説明した局所座標系LCo(図34(b)参照)に相当するものであり、預金Pa1,売掛金Pa2,商品Pa3、建物Pa4、設備Pa5、借方計Pa6、売上Pa7、借入金Pa8、資本金Pa9、貸方計Pa10は、この局所座標系LCoの縦軸Yoに離散的に定義されたY座標であり、また、前月残Fb1、借方Fb2、貸方Fb3、残高Fb4は、この局所座標系LCoの横軸Xoに離散的に定義されたX座標である(図3A参照)。
預金元帳Sbは、日付、伝票番号、前残、借方、貸方、残高のエリアFb0〜Fb5が設けられており、各エリアには、合計Pb1、前月残Pb2に対応する金額に続いて、借方及び貸方に変化のあった日付Pb3〜Pb6である8/10、8/20、8/25、8/31における金額が格納されている。
また、この預金元帳Sbは、図34を用いて説明した局所座標系LCo1(図34(c)参照)に相当するものであり、日付エリアFb0に割り当てられた預金の合計Pb1、預金の前月残Pb2、さらに、日付Pb3〜Pb6として伝票番号Fb1とともに割り当てられた日付8/10、8/20、8/25、8/31は、この局所座標系LCo1の縦軸Yo1に離散的に定義されたY座標であり、また、前月残Fb2、借方Fb3、貸方Fb4、及び残高Fb5は、この局所座標系LCo1の横軸Xo1に離散的に定義されたX座標である(図3A参照)。
固定資産台帳Scは、科目、資産番号、前期残、借方、貸方、期末残のエリアFc0〜Fc5が設けられており、各エリアには、借方及び貸方に変化のあった、科目としての建物Pc1、Pc2及び設備Pc4の金額が、資産番号別に、建物及び設備の小計Pc3およびPc5における金額とともに格納されている。
また、この固定資産台帳Scは、図34を用いて説明した局所座標系LCo2(図34(d)参照)に相当するものであり、建物(資産番号)Pc1,Pc2、設備(資産番号)Pc4、建物及び設備の小計Pc3、Pc5がこの局所座標系LCo2の縦軸Yo2に離散的に定義されたY座標であり、前月残Fc2、借方Fc3、貸方Fc3、残高Fc4、期末残Fc5は、この局所座標系LCo2の横軸Xo2に離散的に定義されたX座標である(図3A参照)。
ここで、各帳簿の論理出力構造における各項目の各エリア、つまり局所座標系のY座標およびX座標で決まる点の値(金額)を格納する領域は、知識データベースの所定の記録領域(メモリ空間)Msに割り当てられている。
また、このメモリ空間Msには、上述したように、会計帳簿体系Acs及び勘定科目マスターAmも格納されている。
ここで、会計帳簿体系Acs(図3E)では、各会計帳簿Sa、Sb、Scの階層関係が示されている。つまり、会計帳簿体系Acsは、会計システムAsの下層には試算表Saが定義され、また、試算表Saの下には預金元帳Sb及び固定資産台帳Scが定義されていることを、下層の会計帳簿に含まれる勘定科目のコードをキー値として示している。例えば、会計帳簿体系Acsにおける項目No.2には、論理出力(試算表)、キー値(10001)、対応する論理出力(預金元帳)と示されており、これは、勘定科目(預金)のコード(10001)により、試算表の下層には預金元帳が定義されていることを示している。
また、勘定科目マスターAm(図3F)は、勘定科目名と勘定科目コードとの対応関係を示している。例えば、項目No.1の科目名(預金)には、勘定科目コード(10001)、貸借区分(1)、及び試算表表示順コード(101)が割り当てられている。
上記メモリ空間Msでは、図3Aに示すテーブル形式で示す試算表Sa、預金元帳Sb、固定資産台帳Scは、図6に示すようなツリー構造としてデータが管理されているが、さらに、各会計帳簿の項目間には、後述する検索用リンク情報(バイナリーサーチツリー)(図35参照)が設定されている。
以下詳述すると、知識データベース内では、各帳簿は、会計全体を多様体としたときの、多様体上に形成された局所座標系として定義されており、具体的には、試算表Saに対応するサイバーツリー構造BTaには、図11に示すように、局所座標系の座標キー(Y軸上に割り当てられた項目を示すキー)と、場としての基本変数とが定義されている。ここで、基本変数を有する項目は、局所座標系におけるX軸上に前月残、借方、貸方、残高として割り当てられたものである。
つまり、本実施形態1の会計システム100は、論理演算の対象となる複数の演算項目を含む論理入力(図3D)を受け、1以上の論理入力の演算項目に対する論理出力を、該複数の演算項目を分類する複数の項目グループのそれぞれ毎に演算する論理演算システムの一例であり、上記演算項目は上記勘定科目に対応し、各項目グループ(局所座標系)は試算表Sa、預金台帳Sb、および固定資産台帳Scに対応している。
図3Bは、この会計システム100の機能ブロックを概念的に示している。
この会計システム100は、知識データベース(KDB)20を有しており、知識データベース20には、各グループ(各会計帳簿)に対する論理出力を構造化した論理出力構造が構築されている。この論理出力構造は、すべての演算項目に対応する点からなる多様体上に、1以上の演算項目に対応する点からなる局所座標系を各グループ(各会計帳簿)に対応付けて定義して得られたものである。また、この会計システム100では、該局所座標系を構成する点は、時々刻々と値が変化する1つの基本変数を有し、かつ論理出力としての基本変数と、この基本変数に変化を与える論理入力としての入力値との関係が演算関数として定義されている。
この会計システム100は、1つの論理入力を受ける度に、各グループに対応する論理出力構造(各会計帳簿)における、該論理入力に含まれる演算項目に定義されている変数の更新値である論理出力を、該論理入力が示す該変数の値から、該変数に対応する演算関数に基づいて演算する演算部121と、演算された値を論理出力構造に格納する格納部122とを有している。
ここでは、上記知識データベース20は、多様体上に定義された3つの局所座標系として、試算表Sa、預金元帳Sb、および固定試算台帳Scの論理出力構造を有している。例えば、図3Cは、図3Bに示す演算部121および格納部122の機能を有する決定性チューリングマシン120を示しており、この決定性チューリングマシン120は、論理入力である会計伝票ファイルが入力されたとき、論理出力における各勘定科目に対応する変数の値を計算して、試算表Sa、預金元帳Sb、固定資産台帳Scに対応する論理出力構造に、計算した値を格納するものである。
また、前記複数の演算項目(勘定科目)は、1つの局所座標系(試算表)を構成する点に対応する演算項目(預金Pa1)が、他の局所座標系(預金元帳)を構成する複数の点に対応する複数の演算項目(前月残、8/10、8/20、8/25、8/30の勘定科目Pb2〜Pb6)に対応するよう、また1つの局所座標系(試算表)を構成する点に対応する演算項目(建物Pa4)が、他の局所座標系(固定資産台帳)を構成する複数の点に対応する複数の演算項目(勘定科目の建物Pc1およびPc2)に対応するよう階層的に分類されている。
また、上記各論理出力構造は、それぞれに対応するサイバーサーチツリー(図11参照)BTaに、各グループ(各会計帳簿)に含まれる演算項目(勘定科目)に対応するノードを追加して構築されている。
さらに、ここでは前記演算関数は、1つの演算項目に定義されている変数の更新値である論理出力が、該変数の更新前の値である現在の論理出力と、前記論理入力が示す、該1つの演算項目に対応する変数の値との和であることを示す再帰差分方程式である。
具体的には、この再帰差分方程式は、以下の式(1)により表される。
Y(n)=Y(n−1)+u(n) ・・・(1)
ここで、Y(n)は更新された変数の値、Y(n−1)は更新前の変数の値、u(n)は論理入力に含まれる入力値(変数値)である。
例えば、局所座標系「試算表」における各点は、各勘定科目における4変数(前月残、借方、貸方、残高)のそれぞれに対応する。
上記(1)式を勘定項目の借方に適用すると、
最新の「借方」=直前の「借方」 + 入力の「借方」
となる。
勘定項目の他の変数である前月残,貸方,残高についても同じであり、借方計,貸方計についても上記の変数・式は同じで、集計の範囲が全借方科目,全貸方科目となる。
さらに、前記複数の局所座標系の各々における、前記論理入力に対する論理出力の演算は、各局所座標系に対応する状態遷移表により定義されるチューリングマシンにより実行され、該チューリングマシンは、メモリ領域の任意の位置に対するデータの参照、更新、および追加を行う基本機能を有しており、該状態遷移表は、チューリングマシンの現状態、チューリングマシンが現状態で処理を行うための条件、チューリングマシンが現状態で行う処理の内容、チューリングマシンの次状態を表す。
例えば、状態遷移表Ts4(図10)により示される試算表の更新は、この状態遷移表により定義されるチューリングマシンにより行われる。
つまり、状態遷移表で定義するアルゴリズムは、入力データの1件毎に知識データベース(論理出力構造)を構成する所要の局所座標系に解を出し停止するものであり、その具体的には後述する。
〔統合により共通書式とした会計伝票データ(論理入力)の説明〕
図3Dは、本実施形態1の会計システム100の論理入力を示しており、この論理入力Linは、クライアントの要求する会計システム100の論理出力構造に基づいて、振替伝票、出金伝票、振替伝票、売上伝票などの種々の伝票(物理入力)を統合したものである。
具体的には、統合した会計伝票Linは、各種伝票(物理入力)から、論理出力を作成するのに必要な科目を取り出したものである。なお、このような物理入力としての各種伝票を、論理出力構造に適合した論理入力に変換する処理も、状態遷移表あるいは状態遷移図により定義されたチューリングマシンにより実行される処理である。
図3Dに示す会計伝票データ(論理入力)Linは、項目(識別、伝票#、日付、貸借、科目、金額、銀行、資産#)を示すフォールドLd1と、各項目に対応するID(ID,DNO,DATE,DRCR,ACC,AMT,BANK,SHISAN)を示すエリアLd2と、各項目の属性(X、X、X、X、X、N、X、X)を示すエリアLd3、各項目に対応するエリアに格納されるデータの桁数(4、4、8、1、5、6、4、4)を示すエリアLd4と、各伝票データの上記各項目に対応する値を格納するエリアLd5とを有している。
例えば、図3Dに示す1件目〜3件目の伝票D1〜D3は、2009年10月30日付けで発行された伝票である。具体的には、伝票D1は、伝票番号0001を有し、20000円を売上げ、売掛金20000円が発生したことを示している。伝票D2は、伝票番号0002を有し、売掛金20000円が預金口座に振り込まれたことを示し、伝票D3は、伝票番号0003を有し、預金口座の7000円を設備投資に用いたことを示している。
そして、図3Dに示す会計伝票データ(論理入力)Linは、これらの伝票データD1〜D3を統合して共通書式の会計伝票データとしたものであり、伝票D1〜D3のデータが、1つの伝票毎に、借方と貸方に分けてエリアLd5に格納されている。
ここで、このような論理入力が入力されたときに、チューリングマシンがメモリ空間上の、値(基本変数)を更新すべき点(アドレス)をどのように決定するかについて、図35を用いて簡単に説明する。
まず、準備段階工程として、起動時に、データベースなどにファイルデータとして格納されている勘定科目マスターAm(図3F)がメモリ空間Msに読み込まれる。この際、メモリ空間Msに試算表Sa、預金元帳Sb、及び固定資産台帳Scが形成されるととに、勘定科目マスターAmが形成される(図7のrtn=ACC_LOAD参照)。試算表Saについては、メモリ空間Msに、預金Pa1〜貸方計Pa10までの10行に相当する記憶領域が確保される。また、預金元帳Sbについては合計Pb1の1行に相当する記憶領域が確保され、固定資産台帳Scについては、小計Pc3の1行に相当する記憶領域が確保される。また、勘定科目マスターAm(図3F)については、預金から資本金までの第1行〜第8行に相当する情報がメモリ空間Msに記憶される。
また、会計帳簿体系Acs(図3E)については、図7に示す処理(rtn=ACC_LOAD)の次の処理(図7のrtn=Link_LOAD)により、メモリ空間Msに第1行〜第4行に対応する情報が読み込まれる。
ここで、試算表Saの項目は図3Aに示すとおりであるが、試算表Saが作成される段階で、試算表Saの項目を検索するためのリンク情報が図35に示すように形成される。
図35は、試算表Saを説明する図3Aには示されていない検索用リンク情報(二分探索木テーブル)Stを示しており、図3Aに示す試算表Saには、実際は、この検索用リンク情報Stが付加されている。
具体的には、図35に示すテーブルStの第1行目には、ルート情報に対する検索用リンク情報(Left「2」、Right「−1」)が格納されており、ルート情報は、図3Dに示す論理入力Linが入力されたときに、入力されたデータ(論理入力Linにおける入力値)が試算表のいずれの項目のデータであるかを判定するために、最初に比較する項目の番号を示している。
図35に示すテーブルの第2行目、及び第3行目には、図3Aにおける借方計Pa6に対する検索用リンク情報(Left「5」、Right「10」)、及び貸方計Pa10に対する検索用リンク情報(Left「11」、Right「−1」)が格納されている。
さらに、図35の第4行目〜第11行目の情報は、図3Aにおける預金Pa1、売掛金Pa2、商品Pa3、建物Pa4、設備Pa5、売上Pa7、借入金Pa8、資本金Pa9に対する検索用リンク情報が格納されている。また、第4行目〜第11行目の情報には、勘定科目マスターAmにおける貸借区分と試算表表示順コードとを結合した結合コードが含まれている。
例えば、第4行目の情報は、試算表Saにおける預金Pa1の値を検索する順序を示すものであり、貸借区分と試算表表示順コードとの結合コード「1101」とともに、検索用リンク情報(Left「−1」、Right「−1」)を示している。
第5行目の情報は、試算表Saにおける売掛金Pa2の値を検索する順序を示すものであり、貸借区分と試算表表示順コードとの結合コード「1102」とともに、検索用リンク情報(Left「4」、Right「7」)を示している。
ここで、第5行目の情報の検索用リンク情報(Left「4」)は、入力データの勘定科目コードに対応する結合コード(貸借区分と試算表表示順コードとを結合したもの)が、第5行目の情報の結合コード「1102」より小さいときは、入力データの勘定科目コードに対応する結合コードを第4行目の情報の結合コードと比較すべきことを示している。また、第5行目の情報の検索用リンク情報(Right「7」)は、入力データの勘定科目コードに対応する結合コード(貸借区分と試算表表示順コードとを結合したもの)が、第5行目の情報の結合コード「1102」より大きいときは、入力データの勘定科目コードに対応する結合コードを第7行目の情報の結合コードと比較すべきことを示している。
具体的には、チューリングマシンは、実際にデータ(論理入力)Lin(図3D)の第1行目のデータ(売掛金:勘定項目コード(10002))が入力されると、作成された勘定科目マスターAm(図3F)を参照して、勘定項目コード(10002)に対応する結合コード(1102)を検出し、この結合コード(1102)を、検索用リンク情報(二分探索木)Stの第1行目のルート情報に基づいて、第2行目の借方計に対応する分岐情報を参照し、データ(最大値)と比較する。この結果、この結合コード(1102)は結合コードの最大値よりは小さいので、左リンク(Left「5」)に従って、入力データの連結コード(1102)を、検索用リンク情報(二分探索木)Stの第5行目の連結コード(1102)と大小比較を行う。この結果、入力データと検索用リンク情報とで結合コードが一致するので、この結合コードに対応する勘定項目(売掛金)の値を更新する。
このとき、図12に示すアクセス定義が用いられる。このアクセス定義St4aのアクセス項目のキー項目(TRIAL_KEY)に連結コード(1102)を入れると、数値項目として定義されている(前月残、借方、貸方、残高)に、入力データの値(0、20000、0、20000)が入力され、試算表Saの勘定科目である売掛金の項目が更新される。
〔リアルタイムシステムの動作〕
次に本実施形態1の会計システムであるリアルタイム演算システムの動作について説明する。
図5及び図6は、本実施形態1のリアルタイム演算システムの概略的の動作を、会計帳簿のデータ更新の動作とともに説明する。
例えば、本実施形態1のリアルタイム演算システム10に、端末2からインターネット4を介して伝票データが入力されると、カーネル11は、この伝票データが会計システム100に対するものであるのか、あるいは売買システム101に対するものであるのかを判定する。カーネル11は、この伝票データが会計システムである場合は、会計システム100を呼び出し、伝票データが会計システムである場合は、売買システム101を呼び出す。
ここでは、伝票データが会計システムに対する会計伝票データであり、会計システム100が呼び出された場合について詳述する。
例えば、1件目の会計伝票は、2009年10月30日に20000円を売上げて売掛金20000円が発生した取引の入金伝票であり、2件目の会計伝票は、2009年10月30日に売掛金の10000円を回収した取引の振替伝票であり、3件目の会計伝票は、2009年10月30日に設備投資を7000円で行った取引の出金伝票であるとする。
この場合、各会計伝票は、共通形式の会計伝票データに統合されて、図3Dに示す論理入力に変換される。
この論理入力Linでは、入金伝票D1はレコードNo1及びNo2に変換され、振替伝票D2はレコードNo3及びNo4に変換され、出金伝票D3はレコードNo5及びNo6に変換されている。
このとき、試算表Sa、預金元帳Sb、固定資産台帳ScのバイナリーツリーBTa、BTb、BTcは、図5(a)に示すように初期状態となっているものとする。なお、実務では、前残などの金額があるが、ここでは説明の都合上すべての金額はゼロとしている。ただし、表示順コード、科目名、勘定項目コード、貸借区分などの事前準備の項目は勘定科目マスターAm(図3F)を参照して設定済みである。
例えば、試算表の論理出力構造を示すバイナリーツリーBTaの1行目の「1101(0/0/0/0/預金 /10001)」において、最初の「1」は、貸借区分を示し、そのあとに続く「101」は試算表表示順コードであり、「(0/0/0/0預金 /10001)」の最初の「0」は、預金の前月残の金額がゼロであることを示し、次の「0」は預金の借方の金額がゼロであることを示し、3番目の「0」は預金の貸方の金額がゼロであることを示し、最後の「0」は残高の金額がゼロであることを示している。さらに、最後の「/10001」は、預金を示す勘定科目コードを示している。
なお、試算表の論理出力構造を示すバイナリーツリーBTaの2行目の項目以降も同様に、事前準備の項目が設定されている。
また、預金元帳Sbの論理出力構造を示すバイナリーツリーBTbの1行目の記述は、1つのキーとして項目である合計行を示している。
さらに、固定資産台帳Scの論理出力構造を示すバイナリーツリーBTcの1行目の記述は、勘定科目20002(設備)の合計行を示している。
〔1件目の伝票の処理(図5(b)参照)〕
このような初期状態で、レコード#1が入力されると、試算表Saの売掛金の(前月残、借方、貸方、残高)は、(0,0,0,0)+(0,20000,0,20000)=(0,20000,0,20000)となる。このとき、借方計の(前月残、借方、貸方、残高)は、(0,0,0,0)+(0,20000,0,20000)=(0,20000,0,20000)となる。この場合、売掛金の初期値に加えられた値(0,20000,0,20000)は、状態ログ格納部に格納され、借方計の初期値に加えられた値(0,20000,0,20000)は、状態ログ格納部に格納される。これは、売掛金の初期値に加えられた値(0,20000,0,20000)から、借方計の初期値に加えられた値(0,20000,0,20000)は復元可能とするためである。
次に、レコード#2が入力されると、試算表Saの売上の(前月残、借方、貸方、残高)は、(0,0,0,0)+(0,0,20000,20000)=(0,0,20000,20000)となる。このとき、貸方計の(前月残、借方、貸方、残高)は、(0,0,0,0)+(0,0,20000,20000)=(0,0,20000,20000)となる。この場合、売上の初期値に加えられた値(0,0,20000,20000)は、状態ログ格納部に格納され、貸方計の初期値に加えられた値(0,0,20000,20000)は、状態ログ格納部に格納される。これは、売上の初期値に加えられた値(0,0,20000,20000)から、貸方計の初期値に加えられた値(0,0,20000,20000)は復元可能とするためである。
なお、1件目の伝票(入金伝票)(図3D参照)には、預金項目がないため、預金元帳は更新されず、また、建物あるいは設備の項目もないため、固定資産台帳も更新されない。
〔2件目の伝票の処理(図6(a)参照)〕
1件目の伝票処理後、論理入力Linにおけるレコード#3が入力されると、試算表Saの預金の(前月残、借方、貸方、残高)は、(0,0,0,0)+(0,10000,0,10000)=(0,10000,0,10000)となる。また、レコード#4が入力されると、試算表Saの売掛金の(前月残、借方、貸方、残高)は、(0,20000,0,20000)+(0,0,10000,−10000)=(0,20000,10000,10000)となる。
このとき、借方計の(前月残、借方、貸方、残高)は、(0,20000,0,20000)+(0,10000,10000,0)=(0,30000,10000,20000)となる。この場合、預金の初期値に加えられた値(0,10000,0,10000)、及び売掛金の前回の算出値に加えられた値(0,0,10000,−10000)は、状態ログ格納部に格納され、借方計の前回の算出値に加えられた値(0,20000,0,20000)は、1件目の伝票処理の場合と同様の理由で、状態ログ格納部に格納される。
また、この場合は、預金元帳Sbの入金明細として、(前残、入金、出金、残高)=(0,10000,0,10000)が追加され、預金計(前残、入金、出金、残高)は、(0,0,0,0)から(0,10000,0,10000)に更新される。
なお、2件目の伝票(出金伝票)(図3D参照)には、建物あるいは設備の項目がないため、固定資産台帳は更新されない。
〔3件目の伝票の処理(図6(b)参照)〕
2件目の伝票処理後、論理入力Linにおけるレコード#5が入力されると、試算表Saの設備の(前月残、借方、貸方、残高)は、(0,0,0,0)+(0,7000,0,7000)=(0,7000,0,7000)となる。また、レコード#6が入力されると、試算表Saの預金の(前月残、借方、貸方、残高)は、(0,10000,0,10000)+(0,0,7000,−7000)=(0,10000,7000,3000)となる。
このとき、借方計の(前月残、借方、貸方、残高)は、(0,30000,10000,20000)+(0,7000,7000,0)=(0,37000,17000,20000)となる。この場合、設備の初期値に加えられた値(0,7000,0,7000)、及び預金の前回の算出値に加えられた値(0,0,7000,−7000)は、状態ログ格納部に格納され、借方計の前回の算出値に加えられた値(0,7000,700,0)は、1件目及び2件目の伝票処理の場合と同様の理由で、状態ログ格納部に格納される。
また、この場合は、預金元帳Sbの出金明細として、(前残、入金、出金、残高)=(10000,0,7000,3000)が追加され、預金計(前残、入金、出金、残高)は、(0,10000,0,10000)から(0,10000,7000,3000)に更新される。
また、この場合は、固定資産台帳Scの明細として、(前残、入金、出金、残高)=(0,7000,0,7000)が追加され、設備計(前残、入金、出金、残高)は、(0,0,0,0)から(0,7000,0,7000)に更新される。
このようにして3件の伝票の処理が行われて、知識データベース20には、論理入力である3件分の伝票データに対する論理出力が、試算表Sa、預金元帳Sb、及び固定資産台帳Sc毎にリアルタイムで求められることとなる。
このようにして、論理入力として伝票データが入力される度に、試算表に対応するバイナリーサーチツリーが更新されるとともに、預金元帳および固定資産台帳に対応するバイナリーサーチツリーが成長し、試算表、預金元帳、および固定資産台帳には、リアルタイムで取引の状態が反映されることとなる。
以下、上述したバイナリーサーチツリーの作成方法、順次検索方法、およびランダム検索方法について、図4を用いて説明する。
図4に示すバイナリーサーチツリーでは、Nodeは、試算表に付加されている含まれるバイナリーサーチツリー(図35)におけるデータに対応し、LLink,RLinkは、試算表に付加されているバイナリーサーチツリー(図35)におけるLeft,Rightに対応している。
つまり、試算表の定義の際に、以下に説明する方法で、図35に示すバイナリーサーチツリーが形成されることとなる。
まず、バイナリーサーチツリーの作成方法について説明する。
1)テーブルにデータが1行もないときは、追加して終了する。(Node値=入力、LLink=−1,RLink=−1)。
テーブルにデータのある時は、1行目より、以下の2)の確認処理を行う。
2)テーブルのNodeの値と追加データの値を比較する。
テーブルのNodeの値>追加データの値のときは、LLinkを確認のため、以下の3)の処理を行う。
テーブルのNodeの値<追加データの値のときは、RLinkを確認のため、以下の3)の処理を行う。
テーブルのNodeの値=追加データの値のときは、追加作成はしないで処理を終了する。
3)Linkに値のあるとき(≠−1)はLinkで指定したテーブル行について、2)の手続を行う。
Linkに値がないとき(=−1)はデータをテーブルに追加(Node値=入力、LLink=−1,RLink=−1))して、Link(LLinkまたはRLink)
の値を−1より、追加したテーブルの行番号に置き換える。
以下、図4を用いて事例を挙げて説明する。
〔BSTの作成〕
5件のデータ『B、D、C、A、E』でBSTを作成する手順について説明する。なお、この5件のデータは、この順で入力される。また、これらのデータの大小関係は、”A”<”B”<”C”<”D”<”E”とする。
(1)最初はテーブルBSTa0に値がない(図4(a))。
(2)最初のデータ『B』が入力されたときは、テーブルBSTa0に1行追加して、Node=B、LLink=−1、RLink=−1とする(図4(b))。『−1』はリンク先なしを意味している。図4では、BST(バイナリーサーチツリー)BSTr1〜BSTr5をテーブルBSTa1〜BSTa5とともに表示している。Nodeを○印で表し、LLink、RLinkは、Nodeの左側、または右側より伸びる線で表し、Link先のNodeに対応づける。
(3)2件目のデータ『D』が入力されたときは、データ『D』とテーブルBSTa2の1行目のNode値『B』とを比較する。このとき、”B”<”D”なので、テーブル1行目のRLinkを参照すると、『−1』でリンク先なしなので、データ『D』をテーブルに追加して1行目のテーブルのRLinkに追加した行番号『2』を設定する(図4(c))。
追加した2行目は、Node=”D”、LLink=−1、RLink=−1である。
バイナリーサーチツリーBSTr2では、Node『B』の右からの線『リンク』をNode『D』に繋げ、テーブルBSTa2と同じ内容を示す。
(4)3件目のデータ『C』が入力されたときは、データ『C』とテーブルBSTa2の1行目のNode値『B』とを比較する。このとき、”B”<”C”なので、テーブル1行目のRLinkを参照すると、『2』がリンク先となっている。リンク先の2行目のNode値『D』とデータ『C』とを比較する。このとき、”C”<”D”なので、テーブル2行目のLLinkを参照すると、『−1』でリンク先なしなので、データ『C』をテーブルBSTa2に追加して2行目のテーブルのLLinkに追加した行番号『3』を設定する(図4(d))。
追加した3行目は、Node=”C”、LLink=−1、RLink=−1である。
バイナリーサーチツリーBSTr3では、Node『D』の左からの線『リンク』をNode『C』に繋げ、テーブルBSTa3と同じ内容を示す。
(5)4件目のデータ『A』が入力されたときは、データ『A』とテーブルBSTa3の1行目のNode値『B』とを比較する。このとき、”A”<”B”なので、テーブル1行目のLLinkを参照すると、『−1』でリンク先なしなので、データ『A』をテーブルBSTa3に追加してテーブルBSTa3の1行目のLLinkに追加した行番号『4』を設定する(図4(e))。
バイナリーサーチツリーBSTr4では、Node『B』の左からの線『リンク』をNode『A』に繋げ、テーブルBSTa4と同じ内容を示す。
(6)5件目のデータ『E』が入力されたときは、データ『E』とテーブルBSTa4の1行目のNode値『B』とを比較する。このとき、”B”<”E”なので、テーブル1行目のRLinkを参照すると、『2』がリンク先となっている。リンク先の2行目のNode値『D』とデータ『E』とを比較する。このとき、”D”<”E”なので、テーブル2行目のRLinkを参照すると、『−1』でリンク先なしなので、データ『E』をテーブルBSTa4に追加して2行目のテーブルのLLinkに追加した行番号『5』を設定する。
追加した5行目は、Node=”E”、LLink=−1、RLink=−1である。
バイナリーサーチツリーBSTr5では、Node『D』の右からの線『リンク』をNode『E』に繋げ、テーブルBSTa5と同じ内容を示す。
次に、BST(バイナリーサーチツリー)の順次検索について説明する。
〔BSTの順次検索〕
BSTを順次で辿るときは次の順で処理する。
1番目:LLink
2番目:自Node
3番目:RLink
テーブルBSTa5またはバイナリーサーチツリーBSTr5を上記の手順で辿る。
1)テーブルの一行目より検索を始める。
2)1行目のLLinkは4なので、テーブル4行目に移る。
3)4行目はLLinkが−1であるので、自Node『A』を出力する。
4)4行目はRLinkが−1であるので、1行目に戻る。
5)1行目のLLinkは処理済みので、自Node『B』を出力する。
6)1行目のRLinkが2なので、テーブル2行目に移る。
7)2行目のLLinkが3なので、テーブル3行目に移る。
8)3行目のLLinkが−1であるので、自Node『C』を出力する。
9)3行目はRLinkが−1であるので、2行目に戻る。
10)2行目のLLinkは処理済みので、自Node『D』を出力する。
11)2行目のRLinkが5なので、テーブル5行目に移る。
12)2行目はLLinkが−1であるので、自Node『E』を出力する。
13)3行目はRLinkが−1であるので、全Nodeの処理を終了する。
〔BSTのランダム検索〕
次に、BST(バイナリーサーチツリー)のランダム検索について説明する。
BSTでキーを指定して、Nodeを検索する。
テーブルの作成のときと同じ要領でテーブルの1行目より検索すべき値と、Node値を比較してNodeを辿る。
テーブルのNodeの値<追加データの値のときはRLinkを辿る。
テーブルのNodeの値>追加データの値のときはLLinkを辿る。
テーブルのNodeの値=追加データの値のときは一致Nodeに到達する。
辿るべきLLink、RLinkに値がない(−1)のときには、検索すべき値が存在しない。
テーブルBSTa5またはバイナリーサーチツリーBSTr5で値『C』を検索する場合は以下のとおりである。
1)テーブル1行目 Node『B』<検索値『C』でRLink2を辿る。
2)テーブル2行目 Node『D』>検索値『C』でLLink3を辿る。
3)テーブル3行目 Node『C』=検索値『C』で一致Nodeに到達する。
〔コンピュータ3による伝票処理の説明〕
次に上記コンピュータによる伝票処理動作を、状態遷移表を用いて説明する。
(1)関数名:トランザクションの機能説明(状態遷移表Ts1)
ここでは、伝票データの読込みからカーネルの呼び出しまでの動作を説明する。
図7は、トランザクションの機能を説明する図であり、図7(a)はコンピュータの状態遷移表Ts1を示し、図7(b)及び(c)はそれぞれ、ローカル変数の定義LV1及びグローバル変数の定義GVを示している。
なお、ローカル変数は、トランザクジョンの発生に応じてカーネルを呼び出すまでの動作を示す状態遷移表だけで使用する変数であり、グローバル変数の定義は、コンピュータによる伝票処理動作を示すすべての状態遷移表で共通に使用する変数である。
コンピュータは、取引(トランザクション)が発生し伝票の入力があると、インターネットなどの通信回線を介して受信したデータを読込み、カーネルを呼び出し、読込み完了後にコンピュータ内のカーネルが、データに応じた業務処理を呼び出す。
つまり、図7(a)に示す状態遷移表Ts1では、状態「1」は初期状態で、条件は無条件「−」なので、コンピュータは、上記状態遷移表Ts1(関数)が呼ばれた時に、1〜3行目の処理を実行し、状態2に遷移する。なお、この状態遷移表Ts1は、カーネルの読み出しを行うチューリングマシン(プログラムに基づいたコンピュータによる演算機能)を定義するものである。
1行目の処理では、「ACC_LOAD」(勘定科目マスターAm(図3F)を読込む初期の準備)を実行する。2行目の処理では、「LINK_LOAD」(会計帳簿体系Acs(図3E)を読込む初期の準備)を実行する。3行目の処理では、入力ファイルのOPEN(読込の準備)を行う処理である。
ここで、引数の「1」はファイル1であり、会計伝票データを示し、引数の「”R”」は、読込みモードで、ファイルをOPENすることを示している。
4行目の処理では、コンピュータの処理は、状態2にあり、条件は無条件「−」であるので、コンピュータは、処理「rtn=$READ(1)」を実行し、状態3に遷移する。この処理「rtn=$READ(1)」では入力ファイルの読込みを行う。
5行目の処理では、コンピュータは状態3にある。このときの条件「rtn=3」は4行目の処理での入力ファイル読込みで入力データがEOFの時に「3」が戻る。つまり、EOFの時に処理「rtn=$CLOSE(1)」で入力ファイルをCLOSEして、状態999(この状態遷移表で表される処理の終了状態)に遷移する。
6行目の処理では、状態の指定はなく、その状態は前行の状態3となる。また、条件「−」は条件指定なしであり、つまり、状態3で5行目の条件を満たさない時には、無条件で、コンピュータは、処理「KERNEL」(入力データを判断し所定の処理を呼出す)を実行し、状態2に遷移する。
コンピュータは、このような動作を、入力データ(入力される伝票データ)がなくなるまで行って、伝票データの読込みを行う。
(2)関数名:カーネルの機能説明(状態遷移表Ts2)
ここでは、カーネルが入力データの種類に応じた業務処理を呼び出す動作を、状態遷移表Ts2を用いて説明する。なお、ここでは説明していないが、障害時には障害対応処理を呼出す。
図8は、カーネルの機能を説明する図であり、図8(a)は、コンピュータの状態遷移表Ts2を示し、図8(b)は、ローカル変数の定義LV2を示している。なお、ローカル変数は、カーネルが入力データの種類に応じた業務処理を呼び出す動作を示す状態遷移表Ts2だけで使用する変数である。また、この状態遷移表Ts2は、業務処理の呼び出しを行うチューリングマシン(プログラムに基づいたコンピュータによる演算機能)を定義するものである。
上記状態遷移表Ts1(図7(a))で示すように、上記のようにカーネルが呼び出されると、該カーネルにより、入力データの種類に応じた業務処理が呼び出される。
つまり、状態遷移表Ts2の状態「1」は、初期状態を示しており、コンピュータは、図8(a)に示す状態遷移表Ts2が呼び出されたとき、1行目の処理を最初に実行する。
1行目の処理では、条件「F1_ID=”ACC”」は、入力項目「F1_ID」(データ識別)が「”ACC”」(会計)の時に、処理「rtn=ACC_UPDATE」(会計伝票処理)を実行し、状態2に遷移する。
また、2行目の処理では、状態の指定はなく、コンピュータは、前行の状態1となる。コンピュータは、条件「F1_ID=”SALE”」に従って、入力項目「F1_ID」(データ識別)が「”SALE”」(売買)の時に、売買処理をして状態2に遷移する。ここでは、売買処理の詳細については省略している。
また、3行目の処理では、状態の指定はなく、コンピュータは前行の処理と同じ状態1となる。条件は無条件「−」なので、コンピュータは、1〜2行目の条件を満たさなかった時に、処理「rtn=ERR」(エラー処理)を実行し、状態999(終了状態)に遷移する。
また、4行目の処理では、コンピュータは状態2であり、条件「rtn<0」に従って、1又は2行目の条件を満たさなかった時(エラー時)の戻値で、処理「rtn=ERR」(傷害時のエラー処理呼出し)を実行し、状態999(終了状態)に遷移する。
また、5行目の処理では、状態の指定はなく、コンピュータは、前行の処理と同じ状態2となる。また、条件「−」は条件指定なしであり、処理の定義はない。従って、コンピュータは、状態2で4行目の条件を満たさない時には、無条件で、状態999(終了状態)に遷移する。
(3)関数名:ACC_UPDATEの機能説明(状態遷移表Ts3)
ここでは、「論理出力間の対応」の定義に沿って、「試算表」から初めて、対応する論理出力を更新する動作を、状態遷移表Ts3を用いて説明する。
図9は、会計システムに対する論理出力の更新機能を説明する図であり、図9(a)は、コンピュータの状態遷移表Ts3を示し、図9(b)は、ローカル変数LV3の定義を示している。
なお、ローカル変数LV3は、論理出力を更新する動作を示す状態遷移表Ts3だけで使用する変数である。また、この状態遷移表Ts3は、論理出力の更新を行うチューリングマシン(プログラムに基づいたコンピュータによる演算機能)を定義するものである。
コンピュータは、カーネルにより会計システム100(図2、図3A)が読み出されると、図9(a)に示す状態遷移表Ts3に従って、試算表Sa、預金元帳Sb、固定資産台帳Sc(図3A参照)の順に論理出力の更新を行う。
図9(a)に示すように、状態遷移表Ts3では、状態1は初期状態で、条件は無条件「−」なので、上記の状態遷移表Ts3が呼ばれた時に最初に、1〜3行目の処理を実行し、状態2に遷移する。
1行目の「rtn=KB(5,2)」は、KDB5のアクセス定義2を実行することを示しており、1行目の処理では、コンピュータは、会計伝票データの科目(F1_ACC)をキーに勘定科目の貸借,科目名,試算表表示順コードを、変数であるDRCR,ACCNAME,ORDERに取得する。(図9(c))。
2行目の「KEY1=”会計”」は変数KEY1に「”会計”」を代入することを示しており、コンピュータは、変数KEY1に「”会計”」を代入する。この”会計”は会計帳簿体系の最初のキーである。
3行目の処理「KEY2=””」では、コンピュータは、変数KEY2に「””」(データなし。NULL)を代入し、状態2に遷移する。
4〜5行目の処理では、コンピュータは状態2であり、条件は無条件「−」である。従って、コンピュータは、4〜5行目の処理を実行し、状態3に遷移する。
4行目の処理「wKEY=$文字列トリム連結関数(KEY1,KEY2)」は、変数KEY1と変数KEY2を文字結合し、変数wKEYに代入する処理である。
5行目の処理「rtn=KB(4,1)」は、KDB4のアクセス定義1(図9(d))を実行するものであり、変数wKeyをキーにして、「対応する論理出力」を変数KEY1に取得するものである。
6行目の処理では、コンピュータは状態3であり、条件「rtn>=0」(5行目で指定データが存在する時)を満たせば、コンピュータは状態4に遷移する。
状態遷移表Ts3の6行目では、処理は定義されていないので、コンピュータは、処理を行わずに状態4に遷移する。
7行目では、コンピュータの状態の指定はなく、コンピュータは前行の状態3となる。
また、条件「F1_DRCR=”2”」は、入力項目「F1_DRCR=」が「”2”」の時に、コンピュータが処理「rtn=KBLOGEND(F1_DNO)」を実行し、状態999(終了状態)に遷移するというものである。
ここで、関数KBLOGENDは状態ログに処理終了を出力する処理である。
8行目では、コンピュータの状態の指定はなく、コンピュータの状態は、前行の状態3となる。また、条件「−」は条件指定なしで、処理の定義はない。
つまり、状態3で6,7行目の条件を満たさない時には、コンピュータは、無条件で処理し、状態999(終了状態)に遷移する。
9行目では、コンピュータは状態4である。また、条件「KEY1=”試算表”」(5行目で取得したデータが”試算表”の時)を満たせば、コンピュータは、処理「rtn=TRIAL_UPD(KEY2)」(試算表の更新処理)を実行し、状態2に遷移する。
10行目では、コンピュータの状態の指定はなく、コンピュータは前行の状態3となる。
コンピュータは、条件「KEY1=”預金元帳”」(5行目で取得したデータが”預金元帳”の時)を満たせば、処理「rtn=Yokin(KEY2)」(預金元帳の更新処理)を実行し、状態2に遷移する。
11行目では、コンピュータの状態の指定はなく、コンピュータは、前行の状態3となる。
コンピュータは、条件「KEY1=”固定資産台帳”」(5行目で取得したデータが”固定資産台帳”の時)を満たせば、処理「rtn=Kotei(KEY2)」(固定資産台帳の更新処理)を実行し、状態2に遷移する。
12行目では、コンピュータの状態の指定はなく、コンピュータは、前行の状態3となる。また、条件「−」は条件指定なしであり、処理の定義はない。
つまり、コンピュータは、状態4で、9〜11行目の条件を満たさない時には、無条件で処理し、状態999(終了状態)に遷移する。
(4)関数名:TRIAL_UPDATE(状態遷移表Ts4)の説明
図10は、会計システムに対する試算表の論理出力の更新を説明する図であり、図10(a)は、コンピュータの状態遷移表を示し、図10(b)は、ローカル変数の定義を示し、図10(c)は、試算表の構造ST1を示している。図13は、試算表の基本変数を説明する図である。
なお、ローカル変数LV4は、論理出力を更新する動作を示す状態遷移表だけで使用する変数である。ここでは、局所座標系LCo(図34(b)参照)により定義されている試算表を更新する動作を、状態遷移表Ts4を用いて説明する。また、この状態遷移表Ts4は、試算表の論理出力の更新を行うチューリングマシン(プログラムに基づいたコンピュータによる演算機能)を定義するものである。
ここでは、試算表の局所座標系を更新する動作を、図10(a)に示す状態遷移表Ts4、図10(c)に示す試算表の構造ST1定義、図12に示すアクセス定義St4aに従って説明する。
以下、コンピュータが試算表の論理出力を更新する処理を説明する。
この状態遷移表Ts4の1〜4行目の状態1は、初期状態で、上記の状態遷移表Ts4が呼ばれた時に、コンピュータが最初に実行する処理である。
コンピュータは、条件「F1_DRCR=”1”」(会計伝票データの貸借F1_DRCRが”1”(借方))を満たせば、1〜2行目の処理を実行し、状態2に遷移する。
1行目の処理「CR=F1_AMT」は、変数CRに会計伝票の金額F1_AMTを代入する処理である。2行目の処理「DR=0」は、変数DRにゼロを代入する処理である。3〜4行目ではコンピュータの状態の指定はなく、コンピュータは前行の状態1となる。
例えば、会計伝票データが、図3Dに示すように、売掛金(20000)、売上金(2000)を示すデータD1である場合、コンピュータは、売掛金をキーとして、試算表の売掛金の借方(CR)を0から20000に更新し、試算表の売掛金の貸方(DR)を0のままとする。
コンピュータは、条件「F1_DRCR=”2”」(会計伝票データの貸借が”2”(貸方))を満たせば、3〜4行目の処理を実行し、状態2に遷移する。3行目の処理「CR=0」は変数CRにゼロを代入するものである。4行目の処理「DR=F1_AMT」は、変数DRに会計伝票の金額F1_AMTを代入する処理である。
例えば、会計伝票データが、図3Dに示すように、売掛金(20000)、売上金(2000)を示すデータD1である場合、コンピュータは、売上げをキーとして、試算表の売上げの貸方(DCR)を0のままとし、売上げの借方(CR)を0から20000に更新する。
この状態遷移表Ts4の5行目では、コンピュータは状態2にある。ここで、コンピュータは、条件「DRCR=”1”」(勘定科目マスターの貸借が”1”)を満たせば、処理「ZAN=CR−DR」を計算して、状態3に遷移する。
この状態遷移表Ts4の6行目では状態の指定はなく、コンピュータは前行の状態2となる。コンピュータは、条件「DRCR=”2”」(勘定科目マスターの貸借が”2”)を満たせば、処理「ZAN=DR−CR」を計算して、状態3に遷移する。
また、この状態遷移表Ts4の7行目では、コンピュータは状態3にある。コンピュータは、条件「DRCR=”1”」(勘定科目マスターの貸借が”1”)を満たせば、処理「TTLNAME=”借方計”」(変数TTLNAMEに値”借方計”を代入)を行い、状態3に遷移する。
また、状態遷移表Ts4の8行目では、コンピュータの状態の指定はなく、コンピュータは、前行の状態2となる。コンピュータは、条件「DRCR = ”2”」(勘定科目マスターの貸借が”2”)を満たせば、処理「TTLNAME=”貸方計”」を行い、状態3に遷移する。
この状態遷移表Ts4の9〜18行目では、コンピュータは状態4にあり、条件は無条件「−」なので、コンピュータは、9〜18行目の処理を実行し、状態999(終了状態)に遷移する。
具体的には、9行目の処理「ZENZAN=0」は変数ZENZANにゼロを代入する処理である。10行目の処理「wNAME=TTLNAME」は、変数wNAMEに変数TTLNAMEの値を代入するものである。11行目の処理「wCODE=DRCR」は、変数wCODEに変数DRCRの値を代入するものである。12行目の処理「TRIAL_KEY=$文字列連結関数(DRCR,”^^^”)」は、変数DRCRと文字列”^^^”を結合し、変数TRIAL_KEYに代入するものである。13行目の処理「rtn=KB(1,1)」は、KDB1のアクセス定義1を実行する(図12)。
14行目の処理「TRIAL_KEY=$文字列連結関数(DRCR,ORDER)」は、変数DRCRと変数ORDERの値を文字結合し、変数TRIAL_KEYに代入する処理である。15行目の処理「wNAME=ACCNAME」は、変数wNAMEに変数ACCNAMEの値を代入する処理である。16行目の処理「wCODE=F1_ACC」は、変数wCODEに変数F1_ACCの値を代入する処理である。17行目の処理「rtn=KBLOG(1,1,F1_DNO)」は、KDB1のアクセス定義1を実行し、更新ログを出力する処理である(図12)。
18行目の処理「KEY2=F1_ACC」は、変数KEY2に変数F1_ACCの値を代入する処理である。
(5)預金元帳の更新動作の説明(状態遷移表Ts5)
図14は、会計システムに対する預金元帳の論理出力の更新を説明する図であり、図14(a)は、コンピュータの状態遷移表を示し、図14(b)は、ローカル変数の定義LV5を示し、図14(c)は、預金元帳の構造ST2を示している。
なお、ローカル変数LV5は、預金元帳を更新する動作を示す状態遷移表Ts5だけで使用する変数である。ここでは、局所座標系LCo1(図34(c)参照)により定義されている預金元帳を更新する動作を、状態遷移表Ts5を用いて説明する。また、この状態遷移表Ts5は、預金元帳の更新を行うチューリングマシン(プログラムに基づいたコンピュータによる演算機能)を定義するものである。
ここでは、預金元帳の局所座標系を更新する動作を、状態遷移表Ts5を用いて説明する。
以下、コンピュータが預金元帳の論理出力を更新する処理を説明する。
この状態遷移表Ts5の1〜2行目の状態1は初期状態で、上記の状態遷移表Ts5が呼ばれた時に、コンピュータが最初に実行する処理である。1〜2行目では、条件は無条件「−」なので、コンピュータは、1〜2行目の処理を実行し、状態2に遷移する。
具体的には、1行目の処理「YOKIN_KEY=”^^^^^^^^^^^^”」は、変数YOKIN_KEYに文字列”^^^^^^^^^^^^”を代入する処理である。これは預金元帳の合計のキーである。
2行目の処理「rtn=KB(2,1)」はKDB2のアクセス定義1を実行する処理である。(図15(a))。
この状態遷移表Ts5の3行目ではコンピュータは状態2にある。コンピュータは、条件「rtn<0」(預金元帳の合計がない時)を満たせば、処理「wZENSAN=0」(変数wZENSANにゼロを代入)を行い、状態3に遷移する。
この状態遷移表Ts5の4行目では、コンピュータの状態の指定はなく、コンピュータは前行の状態2となる。条件「−」は条件指定なしである。つまり、コンピュータは、状態2で3行目の条件を満たさない時には無条件で処理を行って状態3に遷移する。ここで、処理「wZENSAN=ZAN」は、変数wZENSANに変数ZAN(2行目で取得した合計行の残高)の値を代入する処理である。
この状態遷移表Ts5の5〜12行目では、コンピュータは状態3にあり、条件は無条件「−」なので、コンピュータは、5〜12行目の処理を実行し、状態999(終了状態)に遷移する。
具体的には、5行目の処理「ZENZAN=0」は、変数ZENZANにゼロを代入する処理である。6行目の処理「ZAN=CR−DR」、CR−DRの計算を行って、その結果を変数ZANに代入する処理である。
7行目の処理「rtn=KB(2,2)」は、KDB2のアクセス定義2を実行する処理である(図15(b))。
8行目の処理「YOKIN_KEY=$文字列連結関数(F1_DATE,F1_DNO)」は、変数F1_DATEと変数F1_DNOの値を結合し、変数YOKIN_KEYに代入する処理である。預金元帳のキーを日付+伝票番号としている。
9行目の処理「ZENZAN=wZENSAN」は、変数ZENZANに変数wZENSANの値を代入する処理である。
10行目の処理「ZAN=ZENZAN+CR−DR」は、ZENZAN+CR−DRの計算を行って、その結果を変数ZANに代入する処理である。
11行目の処理「rtn=KBLOG(2,2,F1_DNO)」は、KDB2のアクセス定義2を実行し、更新ログを出力する処理である(図15(b))。
12行目の処理「KEY2=F1_ACC」は、変数KEY2に変数F1_ACCの値を代入する処理である。
(6)固定資産台帳の更新動作の説明(状態遷移表Ts6)
図16は、会計システムに対する固定資産台帳の論理出力の更新を説明する図であり、図16(a)は、コンピュータの状態遷移表Ts6を示し、図16(b)は、ローカル変数の定義LV6を示し、図16(c)は、固定資産台帳の構造ST6を示し、図16(d)は、固定資産台帳のアクセス定義AD6を示している。
なお、ローカル変数LV4は、論理出力を更新する動作を示す状態遷移表Ts6だけで使用する変数である。ここでは、局所座標系LCo1(図34(d)参照)により定義されている固定資産台帳を更新する動作を、状態遷移表Ts6を用いて説明する。また、この状態遷移表Ts6は、固定資産台帳の更新を行うチューリングマシン(プログラムに基づいたコンピュータによる演算機能)を定義するものである。
以下、コンピュータが固定資産台帳の論理出力を更新する処理を説明する。
この状態遷移表Ts6の1〜2行目の状態1は初期状態で、上記の状態遷移表Ts6が呼ばれた時に、コンピュータが最初に実行する処理である。
コンピュータは、条件「F1_DRCR=”1”」(会計伝票データの貸借F1_DRCRが”1”(借方))を満たせば、1〜2行目の処理を実行し、状態2に遷移する。
具体的には、1行目の処理「CR=F1_AMT」は、変数CRに会計伝票の金額F1_AMTを代入する処理であり、2行目の処理「DR=0」は、変数DRにゼロを代入する処理である。
この状態遷移表Ts6の3〜4行目には、コンピュータの状態の指定はなく、コンピュータは、前行の状態1となる。コンピュータは、条件「F1_DRCR=”2”」(会計伝票データの貸借が”2”(貸方))を満たせば、3〜4行目の処理を実行し、状態2に遷移する。
具体的には、3行目の処理「CR=0」は、変数CRにゼロを代入する処理である。4行目の処理「DR=F1_AMT」は、変数DRに会計伝票の金額F1_AMTを代入する処理である。
この状態遷移表Ts6の5〜12行目では、コンピュータの状態は状態2であり、条件は無条件「−」なので、コンピュータは5〜12行目の処理を実行し、状態999(終了状態)に遷移する。
この状態遷移表Ts6では、5行目の処理「ZENZAN=0」は、変数ZENZANにゼロを代入する処理である。6行目の処理「ZAN=CR−DR」は、CR−DRの計算を行って、その結果を変数ZANに代入する処理である。
7行目の処理「KOTEI_KEY=$文字列連結関数(F1_ACC,”^^^^”)」は、変数F1_ACCと文字列”^^^^”の値を結合し、変数KOTEI_KEYに代入する処理であり、これは、固定資産台帳の科目合計のキーを設定する処理である。8行目の処理「wNAME=$文字列トリム連結関数(ACCNAME,”計”)」は、変数ACCNAMEと文字列”計”の値を結合し、変数wNAMEに代入する処理である。
これは、固定資産台帳の科目合計の説明用の表示を行う処理である。
9行目の処理「rtn=KB(3.1)」は、KDB3のアクセス定義1(更新)AD6を実行する処理である(図16(d))。
10行目の処理「KOTEI_KEY=$文字列連結関数(F1_ACC,F1_SHISAN)」は、変数F1_ACCと変数F1_SHISANの値を文字結合し、変数KOTEI_KEYに代入する処理である。これは、固定資産台帳のキー(科目+資産番号)の設定処理である。
11行目の処理「wNAME=ACCNAME」は、変数wNAMEに変数ACCNAMEの値を代入する処理である。12行目の処理「rtn=KBLOG(3,1,F1_DNO)」は、KDB3のアクセス定義1(更新)AD6を実行し、状態ログを出力する処理である(図16(d))。
(実施形態1の効果)
このように本実施形態1による論理演算システム100では、会計システムなどの論理演算システムを多様体として捉え、この多様体に対する複数の論理入力、例えば複数のレコードを、多様体上に形成された個々の局所座標系(例えば個々の会計帳簿)毎に集計し、各局所座標系の論理出力(例えば個々の会計帳簿における集計結果)をリアルタイムで生成することができる。
なお、上記実施形態1では、3つの会計帳簿を有する会計システムを例に挙げて本発明の論理演算システムを説明したが、本発明の論理演算システムは、上記実施形態1のものに限定されるものではない。
例えば、市場データなどの時々刻々と変化する量の統計をとるリアルタイム統計システムや、工場などにおける部品管理、さらにはスーパーマーケットなどにおける在庫管理などを行うシステムも、本発明の論理演算システムにより実現することができる。
以下、上記実施形態1で説明した論理演算システム100に、性能測定用仕様を適用して具体的な処理時間の測定を行って得られた結果について説明する。
図45は、本発明の実施形態1による論理演算システムにおける入力データを処理したときの処理時間を説明する図であり、図45(a)は処理内容、図45(b)は処理時間を示している。
ここで、入力データは、実施形態1で説明した会計伝票データに相当するものであるが、キー項目の桁数は10桁(6桁、4桁)とし、集計項目(借方、貸方、残高など)は、20項目として1項目を10桁で表すものとし、さらに文字項目(実際の金額などを表示する項目)を1項目として50桁で表すものとしている。
このような会計伝票データDの100万件分を入力ファイルとして準備している。
入力ファイルFinにおける会計伝票データDは、キー項目、集計項目(文字)、文字項目が含まれている。ここで、キー項目(例えば、売掛金を示すコード)は10桁で表されており、集計項目(文字)は、売掛金の金額を記号で示しており、10桁×20項目で表されており、さらに、文字項目は『売掛金』という項目の説明であり、50桁×1項目で表されている。
このような会計伝票データがメモリM内に読み込まれてテーブルMT1として格納される。
さらにこのように格納され会計伝票データの一件毎に、知識データベース20aとして構築されている論理出力構造(例えば、試算表)が更新される。
このとき、入力ファイルから、100万件分の会計伝票データを、貸方計や借方計などの小計項目を含めずにメモリM内に読み込むのに要する時間は、2.64秒であり、さらに、メモリM内に読み込んだ100万件分の会計伝票データ(貸方計や借方計などの小計項目を含まない)に基づいて論理出力構造(例えば、試算表)20aを更新するのに要する時間が2.65秒であった。
また、入力ファイルから、100万件分の会計伝票データを、貸方計や借方計などの小計項目を含めてメモリM内に読み込むのに要する時間は、2.64秒であり、さらに、メモリM内に読み込んだ100万件分の会計伝票データ(貸方計や借方計などの小計項目を含む)に基づいて論理出力構造(例えば、試算表)20aを更新するのに要する時間が7.97秒であった。
このとき用いたパーソナルコンピュータの性能は、CPU(2.93GHzx4)、メモリー(4GB)、キャッシュメモリ(8MB)であった。
さらに、上記実施形態1では、論理演算システムとして、入力データに応じてカーネルが業務機能部100aから会計システムや売買システムなどの演算システムを読み出し、入力データに対応した論理出力構造を知識データベースとして構築し、入力データが入力される度に、論理出力構造を更新するものを示したが、本発明の論理演算システムは、カーネルが親エージョンとして、複数の論理出力構造を分散かつ協調させて管理し、それぞれの論理出力構造を、それぞれに対応するエージェント(決定性チューリングマシン)により更新させるようにした分散協調マルチエージェントシステムでもよい。
(実施形態1の変形例)
以下、本発明の実施形態1の変形例として、このような分散協調マルチエージェントシステムについて説明する。
図38は、本実施形態1の変形例による分散協調マルチエージェントシステム(以下、単にマルチエージェントシステムという。)の全体構成を概略的に示すブロック図である。
このマルチエージェントシステム1000は、親エージョンとしてシステム全体を管理するカーネル1100と、試算表としての論理出力構造1230に対応する試算表エージェント1200と、取引先別状況表(勘定科目:預金)としての論理出力構造1330に対応する状況表エージェント1300と、補助元帳(勘定科目:預金)としての論理出力構造1430に対応する補助元帳エージェント1400とを有し、カーネル1100が、複数の論理出力構造を分散かつ協調させて管理し、それぞれの論理出力構造を、それぞれに対応するエージェント(決定性チューリングマシン)1200、1300、1400により更新あるいは復旧させるようにしたものである。
また、このマルチエージェントシステム1000は、ネットワークの状況、端末2(図1(a)参照)が設置されている地域の気候、災害情報などを監視する監視エージェント1500、伝票データの入力を行う伝票入力エージェント1600、このシステム内で格納した状態ログを送信する状態ログ送信エージェント1800、および外部のシステムで格納された状態ログを受信する状態ログ受信エージェント1900を有している。
ここで、試算表エージェント1200は、試算表1230を更新する試算表更新エージェント1210と、試算表1230を復旧する試算表復旧エージェント1220とを含む。上記試算表1230は、実施形態1で説明したようにメモリ空間上に定義されており、試算表更新エージェント1210は、伝票入力を受けるたびに、伝票入力に含まれるキー情報に基づいて該当する科目(例えば預金)の該当する項目(例えば借方、貸方など)の金額を更新し、試算表復旧エージェント1220は、試算表の全項目の金額を一定時間毎に状態ログ格納部1240に格納するものである。
また、状況表エージェント1300は、取引先別状況表1330を更新する状況表更新エージェント1310と、取引先別状況表1330を復旧する状況表復旧エージェント1320とを含む。上記取引先別状況表1330は、実施形態1で説明したようにメモリ空間上に定義されており、状況表更新エージェント1310は、伝票入力を受けるたびに、伝票入力に含まれるキー情報に基づいて該当する取引先(例えば銀行A)の該当する項目(例えば借方、貸方など)の金額を更新し、状況表復旧エージェント1320は、取引先別状況表1330の全項目の金額を一定時間毎に状態ログ格納部1340に格納するものである。
また、補助元帳エージェント1400は、補助元帳1430を更新する補助元帳更新エージェント1410と、補助元帳1430を復旧する補助元帳復旧エージェント1420とを含む。上記補助元帳1430は、実施形態1で説明したようにメモリ空間上に定義されており、補助元帳更新エージェント1410は、伝票入力を受けるたびに、伝票入力に含まれるキー情報に基づいて該当する補助元帳1430の日付の該当する項目の金額を更新し、補助元帳復旧エージェント1420は、補助元帳1430の全項目の金額を一定時間毎に状態ログ格納部1440に格納するものである。
なお、ここでは、各エージェントは、1つのプロセッサ内にプログラムにより仮想的に実現された仮想プロセッサとしている。
このようなマルチエージェントシステム1000では、各エージェント(決定性チューリングマシン)は、カーネル1100の管理の下で分散(独立)して、かつ協調して動作し、例えば、試算表エージェント1200は伝票入力を受ける度に試算表を更新するとともに、状態ログ格納部1240に一定周期で試算表の各項目の値を格納する。
従って、試算表エージェント1200における試算表更新エージェント1210は、実施形態1の状態遷移表Ts4(図10)で定義されたチューリングマシンと同等な機能を有しており、以下試算表の更新について説明する。
ただし、論理入力構造および論理出力構造はベクトル空間として捕らえることができ、ここでは、試算表の更新プロセス、つまり、入力データ一件毎に解が求められるプロセスを、ベクトル空間を更新する処理として説明する。
図39は、試算表(論理出力構造)の更新をベクトル空間の更新として説明する図である。
預金(2000円)、売掛金(2000円)を示す会計伝票である入力データD1aは、試算表の関連するキー項目を用いた入力ベクトル空間D1bに対応つけられる。
そして、再帰差分方程式(Y(n)=Y(n−1)+d(n))に従って、チューリングマシン1310が、入力ベクトル空間D1bに基づいて出力ベクトル空間Y(0)をベクトル空間Y(1)に更新する。
ここで、出力ベクトル空間Y(0)は初期状態の試算表であり、出力ベクトル空間Y(1)は、預金と(借方計)の位置の値を更新した状態の試算表であり、さらに、出力ベクトル空間Y(2)は売掛金と(貸方計)の位置の値を更新した状態の試算表である。
ここで、2次元のベクトル空間内の位置YABでの値YAB(n)を以下のとおり定義する。
Y11:預金の借方、Y13:預金の残高
Y22:売掛金の貸方、Y23:売掛金の残高
Y31:(借方計)の借方、Y32:(借方計)の貸方、Y33:(借方計)の残高
再帰差分方程式:Y(n)=Y(n−1)+d(n) (dは伝票データ)
(初期状態)
初期状態のベクトル空間Y(0)における上記各位置の値は以下のとおりである。
預金の借方Y11(0)=15000、預金の残高Y13(0)=14310、売掛金の貸方Y22(0)=18700、売掛金の残高Y23(0)=7180、(借方計)の借方Y31(0)=59570、(借方計)の貸方Y32(0)=30250、(借方計)の残高Y33(0)=56160
(伝票データ1件目)
伝票データ1件目が入力されると、初期状態のベクトル空間における上記各位置の値は以下のとおり更新される。
Y11(1)=Y11(0)+d1(1)=15000+2000=17000
Y13(1)=Y13(0)+d3(1)=14310+2000=16310
Y31(1)=Y31(0)+d1(1)=59570+2000=61570
Y33(1)=Y33(0)+d3(1)=56160+2000=58160
(伝票データ2件目)
伝票データ2件目が入力されると、伝票データ1件目が入力されたときのベクトル空間Y(1)における上記各位置の値は以下のとおり更新される。
Y22(2)=Y22(1)+d2(2)=18700+2000=20700
Y23(2)=Y23(1)+d3(2)=7810+(−2000)=5810
Y32(2)=Y32(1)+d2(2)=30250+2000=32250
Y33(2)=Y33(1)+d3(2)=58160+(−2000)=56160
このように伝票データ(ベクトル空間)により初期条件が定められたベクトル空間(論理出力構造)を、伝票データとしてのベクトル空間における点と論理出力構造としてのベクトル空間における点とを1対1に対応付けるアルゴリズム(1対1対応アルゴリズム)で更新すると、論理出力構造における解(各点の値)は、一意に定まり、知識となる。
この実施形態1の変形例では、エージェントをチューリングマシンとし、再帰的枚挙で入力データの1件毎に瞬時に解を出す。分散協調マルチエージェントはビジネスソリューションセンターとして運行可能である。
また、マルチエージェントによりマルチタスクが可能であり、さらに、カーネルによる障害管理を実現している。
各論理出力構造における値を状態ログに格納しておくことで、平常時と災害時のシームレスな運行が可能である。
さらに、このシステムでは、問題、つまり試算表、状況表、補助元帳の更新という問題を、再帰分割し、エージェントも再帰分割し、分散協調で、問題を解決している。線形システムにより分割された解は重ね合わせの原理で合成することができる。
また、知識データベースの共有でナレッジサイクルを実現している。
つまり、論理入力(伝票データ)により更新される論理出力構造は、別の論理出力構造の論理入力構造となり得るものであることから、上記実施形態1あるいはその変形例のように論理入力により論理出力構造を更新するシステムでは、得られた論理出力構造(知識)を再利用して新たな知識(別の論理出力構造)を創造することができ、これをナレッジ・サイクル・イネーブリングという。
以下、このようなナレッジ・サイクル・イネーブリングについて具体例を挙げて簡単に説明する。
図40は、決算整理におけるナレッジ・サイクル・イネーブリングを説明する図である。
貸倒引当金繰入(100)、貸倒引当金(100)を含む入力データ(決算修正仕訳)D2aは、論理入力構造D2bに変換される。
この論理入力構造D2bに基づいて、決算整理修正仕訳機能を有する決定性チューリングマシン2100が残高試算表(論理出力構造)RSaを知識データベースとして作成する。
作成された残高試算表RSaは、精算表作成機能を有する決定性チューリングマシン2200の論理入力構造となり、この論理入力構造から決定性チューリングマシン2200により精算表(論理出力構造)RSbが作成される。
図41は、精算表の貸借対照表部分から貸借対照表を作成するナレッジ・サイクル・イネーブリングを説明する図である。
上記精算表RSbの貸借対照表部分RSbaを論理入力構造として、貸借対照表作成機能を有する決定性チューリングマシン(ソリュージョンエージェント)2300が、精算表RSbの貸借対照表部分RSbaに含まれる勘定科目のうち、貸借対照表に必要となる勘定科目を定義概念(オントロジー)DC1(図46に拡大して示す)を参照して抽出して、勘定科目と金額とを対応付けた貸借対照表RScを作成する。ここで、定義概念(オントロジー)DC1は、アメリカ合衆国政府が定義した貸借対照表に用いるべき項目である。
続いて、BSインスタンス作成部2400は、タクソノミー(現在用いられている会計報告書のモデル)TXLからラベル要素抽出により得られる形式(BSラベルテーブル)BStを参照して、上記貸借対照表RScを英語に翻訳し、貸借対照表RSdを表現する電子帳票(XBRL:BS_インスタンス)RSc’を作成する。ここで、BSインスタンス作成部2400は、ソリュージョンエージェント2300により作成された貸借対照表(論理出力構造)RScを論理入力構造としてBSインスタンスRSc’を作成する機能を有する決定性チューリングマシンである。また、電子帳票(XBRL:BS_インスタンス)RSc’をHTML変換したものが貸借対照表RSdである。なお、図43は、電子帳票(XBRL:BS_インスタンス)RSc’の全体を示している。
図42は、精算表から損益計算書を作成するナレッジ・サイクル・イネーブリングを説明する図である。
上記精算表RSbの損益計算書部分RSbbを論理入力構造として、損益計算書作成機能を有する決定性チューリングマシン(ソリュージョンエージェント)2500が、精算表RSbの損益計算書部分RSbbに含まれる勘定科目のうち、損益対象表に必要となる勘定科目を定義概念(オントロジー)DC2(図47に拡大して示す)を参照して抽出して、勘定科目と金額とを対応付けた損益計算表RSeを作成する。ここで、定義概念(オントロジー)DC2は、アメリカ合衆国政府が定義した損益計算表に用いるべき項目である。
続いて、PLインスタンス作成部2600は、タクソノミー(現在用いられている会計報告書のモデル)TXLからラベル要素抽出により得られる形式(PLラベルテーブル)PLtを参照して、上記損益計算書RSeを英語に翻訳し、損益計算書RSfを表現する電子帳票(PLインスタンス)RSe’を作成する。ここで、PLインスタンス作成部2600は、ソリュージョンエージェント2500により作成された損益計算書(論理出力構造)RSeを論理入力構造としてPLインスタンスRSe’を作成する機能を有する決定性チューリングマシンである。また、電子帳票(PL_インスタンス)RSe’をHTML変換したものが損益計算書RSfである。なお、図44は、電子帳票(PLインスタンス)RSe’の全体を示している。
〔DSPによる論理演算〕
また、上記のような論理演算入力から論理演算出力を求める処理は、あらゆる信号処理にも適用可能である。
近年の携帯電話などのモバイル機器では、マルチメディアデータが扱われるようになっており、音声データや映像データなどの膨大なデータを圧縮して多重化して送信しており、データの送受信にはデジタル信号の高速演算処理が必要となってきており、このような高速演算処理を行う能力を持つプロセッサはDSPの他にはなく、DSP(デジタル・シグナル・プロセッサ)の改良が進められている。
DSPの特徴は、高速乗算器を備え、メモリと高速演算器との間でのデータ転送を効率よく行うため、データバスとプログラムバスとを分離した構成(ハーバード型アーキテクチャー)を有している点であり、最近では、複数のデータバスと複数の演算器とを備えたものもある。
例えば、DSPでは、デジタル信号処理を高速演算器とメモリを用いて高速で行うことができ、従って、DSPの前段にAD変換器を設け、その後段にDA変換器を設けることで、映像信号、音声信号、センサ出力、記録媒体から読み出された信号、無線通信により受信された信号、電話回線から受信した信号などのあらゆるアナログ信号をリアルタイムで処理して、表示装置、スピーカ、モータへの入力信号に変換したり、発光素子からの光信号の出射、あるいはアンテナからの送信を行ったりするなどの、信号受信、信号処理、および信号出力を高速で行うことができる。
従って、本発明の基本概念は、メモリ空間上に演算結果として求められる論理出力構造(ベクトル空間)を定義し、入力データを論理入力構造(ベクトル空間)として捕らえて、ベクトル空間の各点の値に分解し、分解した値を、論理出力構造(ベクトル空間)の点の値に一対一に対応付けて瞬時に解を求めるものであることから、このような本発明の基本概念、つまりメモリと演算器との組み合わせで、論理入力構造における点の値から論理出力構造における値を更新する演算システムは、メモリと高速演算器との間のデータ転送を効率化したDSPの設計思想と極めてマッチしたものである。
従って、本発明は、論理演算システムをDSP上に実装することで、現在行われている携帯電話でのデータ処理を飛躍的に高速化することが可能となり、携帯電話などのモバイル機器で膨大な演算を短時間で行うことができることとなる。
(実施形態2)
次に本発明の実施形態2として、上記実施形態1のホストコンピュータ3にクライアントが要求するリアルタイム演算システムとして機能させるためのプログラムを自動生成するプログラム自動生成装置について説明する。
まず、プログラム自動生成装置の構成について説明する。
図33は、本実施形態2のプログラム自動生成装置を構成する図である。
このプログラム自動生成装置200は、プログラムを状態遷移図あるいは状態遷移表から自動生成するプログラム自動生成装置であって、該状態遷移図あるいは状態遷移表が示す第1の情報から中間情報である第2〜第4の情報を作成する中間情報作成部210と、該第2〜第4の情報に基づいて、該プログラムのソースコードを生成するソースコード作成部220とを有している。
ここで、前記第1の情報は、コンピュータが、どの状態のときに、どの入力があると、どの処理を行って、どの状態に遷移するかを示す情報である。中間情報作成部210は、該第1の情報に含まれる現状態と処理条件とを示す情報に基づいて、該コンピュータが現状態でどれだけの条件を判定するかを示す情報を該第2の情報として作成し、該第1の情報に含まれる条件内容と次状態とを示す情報に基づいて、該コンピュータがどのような条件でどれだけの処理を行って次の状態に移るかを示す情報を該第3の情報として作成し、該第1の情報に含まれる条件の判断と処理の実行の順序を示す情報に基づいて、該コンピュータが判断する条件と該コンピュータが実行する処理とを順に示す情報として、該第4の情報を作成する。
また、前記ソースコード作成部220は、該第2及び3の情報に基づいて、前記コンピュータの各状態への遷移を示すソースコードを生成し、該第4の情報に基づいて、該コンピュータが実行する前記条件及び前記処理を示すソースコードを生成する。
なお、このようなプログラム自動生成処理は、コンピュータにより行われるものであり、コンピュータは、プログラム自動生成プログラムが格納した記録媒体からプログラム自動生成プログラムを読み取って、上記プログラム自動生成処理を実行する。
次にプログラム自動生成装置の動作について説明する。
A.状態遷移表からプログラム生成のための表を生成する処理
まず、上記各状態遷移表Ts1〜Ts6が示す動作をコンピュータが行うためのプログラムを生成するための表2〜表4を作成する方法を説明する。
図17は、関数(TRANSACTION)を表す状態遷移表(表1)Ts1から、この状態遷移表が示す動作を行うプログラムを生成するための表2〜表4を作成する方法を説明する図である。図18は、この方法により得られるプログラムのソースファイルを示す図である。また、状態遷移表(表1)から上記表2〜4を生成するフローに相当する手順は図31に示すとおりである。
ここで、表2は、特定のマシン(コンピュータ)が、現状態でどれだけの条件を判定するかを示す表である。表3は、コンピュータが、どのような条件でどれだけの処理を行って次の状態に移るかを示す表である。表4は、コンピュータが判断する条件と、コンピュータが実行する処理とを、状態遷移表が示すコンピュータの処理手順の順に示す表である。
具体的には、表2は、各状態遷移表を有限状態マシンとしたときにこのマシンを特定するマシン番号を示す欄「マシン」、現状態を示す欄「現状態」、現状態で判定する1以上の条件の最初のものと最後のものを示す欄「from」、「to」を含んでいる。この表2のNoの欄の行番号は、状態遷移表Ts1における現状態の値に対応している。ここで、有限状態マシンは、1つのチューリングマシンであり、プログラムに基づいたコンピュータによる演算機能である。
表3は、条件の内容を示す欄「条件内容」、その条件の下で行う1以上の処理の最初のものと最後のものを示す欄「from」、「to」、および最後の処理を行った後に遷移する遷移先状態を示す欄「次状態」を含んでいる。この表3のNoの欄の行番号は、状態遷移表Ts1における条件の欄に現われる条件の順番に対応している。
表4は、条件および処理の内容を示す欄「内容」を含んでおり、この表4のNoの欄の行番号は、状態遷移表Ts1の条件の欄および処理の欄に現われる条件および処理の順番に対応している。
次に、表1から上記表2〜表4を作成する方法について説明する。
まず、状態遷移表Ts1では、マシンの現状態は1〜3の3つであるので、表2(図17(b))には、各現状態に対応したNo1〜No3までの欄が順次設けられる。また、この状態遷移表Ts1では、条件は4つ含まれているので、表3(図17(c))には、各条件に対応したNo1〜No4までの欄が順次設けられる。また、この状態遷移表Ts1では、6つの処理と、1つの条件(無条件を含まない)とがあるため、表4(図17(d))には、これらの個数をあわせた個数に対応したNo1〜No7までの欄が順次設けられる。
〔状態遷移表Ts1の1行目の処理〕
(1.表1の1件目の入力)
表1の1件目(No1)の入力に対して、下記の1.1〜1.5の処理を順次行う。
ここで、表1は、上記状態遷移表Ts1〜Ts6のいずれかであり、具体例としては、状態遷移表Ts1(図17(a))を挙げて説明する。
(1.1 入力/条件の判定)
ここで、入力/条件とは、入力した表1の行の項目の「条件」の値を言う。以下、この表現を用いる。
a)入力/条件≠「−(無条件)」の場合、つまり、条件が「−」以外の場合は、入力/条件を表4に追加する。このとき、表4の行番号を◆条件行に設定する。この条件行の表現のように先頭に◆を付けたものは、変数を意味するものとし、ここでは「◆条件行」は変数を意味している。
b)上記以外の場合、◆条件行に−1を格納する。
状態遷移表Ts1の場合、第1行目の条件は「−」であるので、◆条件行に「−1」を格納する。
(1.2 入力/処理の判定)
この入力処理の判定は、入力/処理が空白であるか否かの判定を行い、判定結果を表4に格納する。
a)入力/処理≠空白の場合は、入力/処理を表4に追加する。このとき表4の行番号「1」を◆処理行に格納する。この処理行の表現のように先頭に◆を付けたものは、変数を意味するものとし、ここでは「◆処理行」は変数を意味している。
b)上記以外の場合、変数としての◆処理行に−1を格納する。
具体的には、状態遷移表(表1)Ts1の場合を考えると、この表1の1行目の入力/処理は「rtn=ACC_LOAD」であるため、表4の1行目の内容には、「rtn=ACC_LOAD」が格納される。表4の行番号「1」が◆処理行に格納される。
(1.3 表3に対する値の追加)
次に、表4にて追加した行番号「1」を、この時点での◆表3(変数)の値とする。
追加時の表3の項目は以下のとおりである。
条件内容には、◆条件行(変数)の値「−1」が格納される。
FROMには、◆処理行(変数)の値「1」が格納される。
TOには、◆処理行(変数)の値「1」が格納される。
次状態には、入力/次状態(状態遷移表Ts1の1行目の次状態)「2」が格納される。
(1.4 表2に対する行の追加)
追加した行番号「1」を、この時点での◆表2(変数)の値とする。
追加時の表2の各項目は以下のとおりである。
表2のマシンには「1」が格納され、表2の現状態には、状態遷移表Ts1の入力/現状態の値「1」が格納され、表2のTOには、この時点での◆表3(変数)の値「1」が格納され、表2のFROMには、同様に、◆表3(変数)の値「1」が格納される。
(1.5 表1の読込み)
ここでは、以下に示す表1の2行目の以降の処理を行う。
〔状態遷移表Ts1の2行目の処理〕
(2. 表1の2行目以降の処理)
(2.1 表1の読込み)
表1の読込みで、2行目以降の処理があるか否かを判定し、つまり、EOF(終わり)であるか否かを判定し、EOFであれば、処理を終了する。
状態遷移表Ts1の場合は、2行目以降も処理があるので、以下の判定処理が行われる。
(2.2 入力/現状態≠空白の判定)
表1の入力/現状態≠空白の場合、上記の1.1/1.2/1.3/1.4/の処理を行い、後述の2.5の処理に行く。
状態遷移表Ts1の場合は、入力/現状態=空白であるので、以下の判定処理が行われる。
(2.3 入力/現状態=空白 AND 入力/条件≠空白の判定)
入力/現状態=空白 AND 入力/条件≠空白の場合、上記の1.1/1.2/1.3/の処理を行う。
◆表2(変数)の値が示す表2の行の項目「TO」に◆表3(変数)の値が格納される。
その後、2.5の処理に行く。
表1の2行目は、入力/現状態=空白 AND 入力/条件=空白であるので、以下の2.4の処理に移る。
(2.4 入力/現状態=空白 AND 入力/条件=空白の判定)
入力/現状態=空白 AND 入力/条件=空白の場合、上記の1.2の処理を行う。
なお、この条件は上記以外と同じ意であり、つまり2.1/2.2/2.3以外の場合は存在しない。
表1の2行目は、この場合に該当する。
このとき、上記1.2の処理では、表4に2行目の入力/処理(rtn=LINK_LOAD)が追加され、◆処理行(変数)の値は、行番号「2」にされる。
なお、この場合、「◆処理行 = −1」はあり得ない。つまり、条件・処理共に空白の行は存在しない。
◆表3(変数)の値が示す表3の行の項目「TO」に◆処理行(変数)の値「2」が格納される。
その後、2.5の処理を経て、2.の処理に移る。
〔状態遷移表Ts1の3行目の処理〕
(2. 表1の2行目以降の処理)
(2.1 表1の読込み)
表1の読込みで、3行目以降の処理があるか否かを判定し、つまり、EOF(終わり)であるか否かを判定し、EOFであれば、処理を終了する。
状態遷移表Ts1の場合は、3行目以降も処理があるので、以下の判定処理が行われる。
(2.2 入力/現状態≠空白の判定)
入力/現状態≠空白の場合、上記の1.1/1.2/1.3/1.4/の処理を行い、後述の2.5の処理に行く。
状態遷移表Ts1の場合は、3行目の入力/現状態=空白であり、かつ入力/条件=空白であるので、2.3の処理を経て、上記の1.2の処理に移る。
このとき、上記1.2の処理では、表4に3行目の入力/処理(rtn=$OPEN(1,”R”))が追加され、◆処理行(変数)の値は、行番号「3」にされる。
その後、表3の行の項目「TO」に◆処理行(変数)の値「3」が格納される。
その後、2.5の処理を経て、2.の処理に移る。
〔状態遷移表Ts1の4行目の処理〕
2.の処理では、状態遷移表Ts1の場合は、4行目以降も処理があるので、2.1の処理を経て、2.2の処理で、入力/現状態の空白の判定処理が行われる。
この状態遷移表Ts1の4行目では、入力/現状態が空白でないので、上記の1.1/1.2/1.3/1.4/の処理を行う。
まず、1.1の処理を行う。この行では、入力/条件は無条件であるので、1.1の処理では、◆条件行(変数)の値は「−1」となる。次に、1.2の処理では、4行目の入力/処理が空白でないので、表4に4行目の入力/処理(rtn=$READ(1))が追加され、◆処理行(変数)の値は、行番号「4」にされる。
続く1.3の処理では、表3に2行目を追加し、この2行目の条件内容に、この時点での◆条件行(変数)の値「−1」を格納する。◆表3(変数)に、追加した行番号「2」を格納する。
表3の追加した2行目の項目「FROM」と「TO」に、この時点での◆処理行(変数)の値「4」が格納される。
さらに、この表3の追加した2行目の項目「次状態」には、状態遷移表Ts1の4行目の次状態「3」を格納する。
次に、1.4の処理では、表2の2行目を追加する。
追加した行番号「2」を、この時点での◆表2(変数)の値とする。
表2の追加した2行目の各項目は以下のとおりである。
表2の項目マシンには、「1」が格納され、表2の項目現状態には、入力/現状態の値「2」が格納され、表2の項目TOには、この時点での◆表3(変数)の値「2」が格納され、表2の項目FROMには、同様に、◆表3(変数)の値「2」が格納される。
(1.4 表2に対する行の追加)
追加した行番号「2」を、この時点での◆表2(変数)の値とする。
追加時の表2の各項目は以下のとおりである。
表2のマシンには「1」が格納され、表2の現状態には、状態遷移表Ts1の入力/現状態の値「2」が格納され、表2のTOには、この時点での◆表3(変数)の値「2」が格納され、表2のFROMには、同様に、◆表3(変数)の値「2」が格納される。
(1.5 表1の読込み)
表1の5行目を読み込む。
〔状態遷移表Ts1の5行目の処理〕
次に、表1の5行目を読み込んだ後、2.の処理(表1の5行目の処理)が行われる。
状態遷移表Ts1の場合は、5行目以降も処理があるので、入力/現状態の空白の判定処理が行われる。
この状態遷移表の5行目では、入力/現状態が空白でないので、上記の1.1/1.2/1.3/1.4/の処理を行う。
まず、1.1の処理を行う。この行では、入力/条件は条件「rtn=3」であるので、表4にこの条件「rtn=3」を追加し、追加した行番号「5」を、◆条件行(変数)の値とする。
1.2の処理では、状態遷移表Ts1の5行目の入力/処理は空白ではなく、処理「rtn=$CLOSE(1)」があるので、表4にこの入力/処理「rtn=$CLOSE(1)」が追加され、◆処理行(変数)の値は、追加した行番号「6」にされる。
続く1.3の処理では、表3に3行目を追加し、この3行目の条件内容に、この時点での◆条件行(変数)の値「5」を格納する。また、◆表3(変数)に、追加した行番号「3」を格納する。
表3の追加した3行目の項目「FROM」と「TO」に、この時点での◆処理行(変数)の値「6」が格納される。
さらに、この表3の追加した3行目の項目「次状態」には、状態遷移表Ts1の5行目の次状態「999」を格納する。
次に、1.4の処理では、表2の3行目を追加する。
追加した行番号「3」を、この時点での◆表2(変数)の値とする。
表2の追加した3行目の各項目は以下のとおりである。
表2の追加した3行目の項目マシンには、「1」が格納され、この3行目の表2の項目現状態には、入力/現状態の値「3」が格納され、表2の追加した3行目の項目TOには、この時点での◆表3(変数)の値「3」が格納され、表2の項目FROMには、同様に、◆表3(変数)の値「3」が格納される。
(1.5 表1の読込み)
表1の6行目を読み込む。
〔状態遷移表Ts1の6行目の処理〕
次に、表1の6行目を読み込んだ後、2.の処理(表1の6行目の処理)が行われる。
状態遷移表Ts1の場合は、6行目も処理があるので、入力/現状態の空白の判定処理が行われる。
この状態遷移表Ts1の6行目では、入力/現状態が空白であるので、2.2の処理は行わず、2.3の処理では、入力/条件は空白ではなく、「−(無条件)」であるので、上記の1.1/1.2/1.3/の処理を行う。
まず、1.1の処理を行う。この行では、入力/条件は条件「−(無条件)」であるので、◆条件行(変数)の値を「−1」とする。
1.2の処理では、状態遷移表Ts1の6行目の入力/処理は空白ではなく、処理「rtn=KERNEL」があるので、表4にこの入力/処理「rtn=KERNEL」が追加され、◆処理行(変数)の値は、追加した行番号「7」にされる。
続く1.3の処理では、表3に4行目を追加し、この4行目の条件内容に、この時点での◆条件行(変数)の値「−1」を格納する。◆表3(変数)に、追加した行番号「4」を格納する。
表3の追加した4行目の項目「FROM」と「TO」に、この時点での◆処理行(変数)の値「7」が格納される。
さらに、この表3の追加した4行目の項目「次状態」には、状態遷移表Ts1の7行目の次状態「2」を格納する。
次に、◆表2(変数)の値「3」が示す表2の行の項目「TO」に、◆表3(変数)の値「4」が格納される。
その後、2.5の処理に行く。
(2.5 表1の読込み)
表1の7行目を読み込む。
状態遷移表Ts1の場合は、7行目以降は含まれていないので、EOFであり、処理は終了する。
上記の処理により、図17(a)に示す状態遷移表(表1)Ts1から、図17(b)〜(d)に示す、上記マシン・状態の表(表2)Ts1a、状態の表(表3)Ts1b、条件と処理の表(表4)Ts1cが生成される。なお、図31に示す手順は、上記表1から表2〜表4を作成する手順である。
その他の状態遷移表Ts2〜Ts5についても上記と同様の1.処理(表1の1件目の入力)および2.処理(表1の2件目以降の処理)に従って、それぞれの状態遷移表(表1)から、これに対応するプログラムを作成するための表2〜表4が生成される。
具体的には、図19、図21、図23、図27、図29はそれぞれ、状態遷移表Ts2〜Ts6に対する表2〜表4を示している。
図19(a)に示すカーネルを実現する状態遷移表(表1)Ts2は、図31に示す手順に従って、この状態遷移表Ts2からこれに対応するプログラム(図20参照)を自動生成するのに用いる表2〜表4(図19(b)〜(d))に変換される。
図21(a)に示す会計の論理出力の更新処理を実現する状態遷移表(表1)Ts3は、図31に示す手順に従って、この状態遷移表Ts3からこれに対応するプログラム(図22参照)を自動生成するのに用いる表2〜表4(図21(b)〜(d))に変換される。
図23に示す試算表の更新処理を実現する状態遷移表(表1)Ts4は、図31に示す手順に従って、この状態遷移表Ts4からこれに対応するプログラム(図25および図26参照)を自動生成するのに用いる表2〜表4(図24(a)〜(c))に変換される。
図27(a)に示す預金元帳の更新処理を実現する状態遷移表(表1)Ts5は、図31に示す手順に従って、この状態遷移表Ts3からこれに対応するプログラム(図28参照)を自動生成するのに用いる表2〜表4(図27(b)〜(d))に変換される。
図29(a)に示す固定資産台帳の更新処理を実現する状態遷移表(表1)Ts6は、図31に示す手順に従って、この状態遷移表Ts6からこれに対応するプログラム(図30参照)を自動生成するのに用いる表2〜表4(図29(b)〜(d))に変換される。B.プログラム自動生成用の表からプログラムを生成する処理
次に、各状態遷移表(表1)に対応する表2〜4からプログラムとしてのソースファイルを自動生成する処理について説明する。
図32は、このソースファイルを上記表2〜4から自動生成する手順を示している。
以下、関数(TRANSACTION)を表す状態遷移表(表1)Ts1に対応するマシン・状態の表(表2)Ts1a、状態の表(表3)Ts1b、条件と処理(表4)Ts1cから、関数(TRANSACTION)としての機能を実現するプログラムを生成する方法を、図32の処理手順に従って、図17(a)〜(d)および図18を参照して説明する。なお、図32に示す手順は上記プログラムを生成するフローに相当するものである。
1.表2の第1行目の行番号「1」を◆表2(変数)に格納する。
続いて、以下の処理を行う。
1−1.マシン1(対象となった状態遷移)の関数の先頭部分を示すCソースを生成する。これにより、ソースコードの1行目の「double TRANSACTION{」が生成され、ソースコードの2行目の「double TRANSACTION_rtn=0;」が生成される。
1−2.マシン1で使用するローカル変数を示すCソースを生成する。これにより、ソースコードの3行目の「double rtn=0;」が生成される。
1−3.状態1への遷移を示すCソース「goto s001;」(4行目のソースコード)を生成する。
2.の処理に行く。
2.状態のラベルを生成する。
表2の行=◆表2(つまり◆表2(変数)の値は「1」であるので、表2の1行目)の状態を表すラベルを出力する。これにより、ソースコードの5行目のラベル「s001:」が生成される。
次に、表2の行=◆表2(表2の1行目)の項目「FROM」の値「1」を◆条件FROM(変数)に格納する。
表2の行=◆表2(表2の1行目)の項目「TO」の値「1」を◆条件TO(変数)に格納する。
次に、3.の処理に行く。
3.表3に対応するCソースを編集する。
3−1.まず、◆XX(変数)に◆条件FROM(変数)の値を格納する。
3−2.◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。ここでは、◆XXの値「1」、◆条件TOの値「1」であるので、◆XX > ◆条件TOを満たしておらず、3−3.の処理に行く。
3−3.表3の行=◆XX(つまり◆XX(変数)の値は「1」であるので、表3の1行目)の項目「FROM」の値「1」を◆処理FROM(変数)に格納する。
表3の行=◆XX(表3の1行目)の項目「TO」の値「3」を◆処理TO(変数)に格納する。
表3の行=◆XX(表3の1行目)の項目「次状態」の値「2」を◆次状態(変数)に格納する。
表3の行=◆XX(表3の1行目)の項目「条件内容」の値「−1」を◆条件内容(変数)に格納する。
3−4.◆条件内容(変数)=−1の場合は3−5.の処理に行く。
上記以外の場合は、表4の行=◆条件内容の条件内容のCソースを生成する。
ここでは、◆条件内容(変数)の値は「−1」であるので、3−5.の処理を行う。
3−5.◆処理FROM(変数)=−1の場合は、3−9.の処理を行い、◆処理FROM(変数)≠−1の場合は、以下の処理を行う。
現時点では、◆処理FROM(変数)の値は、「1」であるので、以下の処理を行う。
3−6.◆YY(変数)に◆処理FROM(変数)の値を格納する。
3−7.◆YY(変数)>◆処理TO(変数)の場合は、3−9.の処理を行う。
この時点では、◆YY(変数)の値は「1」であり、◆処理TO(変数)の値は、「3」であるので、◆YY(変数)>◆処理TO(変数)を満たさないので、3−8.の処理を行う。
3−8.表4の行=◆YY(つまり、この時点で◆YYの値は「1」であるので、表4の1行目)の処理に相当するCソースを出力する。
これにより、ソースコードの6行目の「rtn=ACC_LOAD();」が生成される。
その後、◆YY(変数)を◆YY(変数)+1とする。これにより、◆YY(変数)の値は「2」になる。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「2」であり、◆処理TO(変数)の値は、「3」であるので、◆YY(変数)>◆処理TO(変数)を満たさないので、3−8.の処理を行う。
3−8.表4の行=◆YY(変数)(◆YY(変数)の値は「2」であるので、表4の2行目)の処理に相当するCソースを出力する。これにより、ソースコードの7行目の「rtn=LINK_LOAD();」が生成される。
その後、◆YY(変数)を◆YY(変数)+1とする。これにより、◆YY(変数)の値は「3」になる。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「3」であり、◆処理TO(変数)の値は、「3」であるので、◆YY(変数)>◆処理TO(変数)を満たさないので、3−8.の処理を行う。
3−8.表4の行=◆YY(変数)(◆YY(変数)の値は「3」であるので、表4の3行目)の処理に相当するCソースを出力する。これにより、ソースコードの8行目の「rtn=$OPEN(_C3,_C4);」が生成される。
その後、◆YY(変数)を◆YY(変数)+1とする。これにより、◆YY(変数)の値は「4」になる。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「4」であり、◆処理TO(変数)の値は、「3」であるので、◆YY(変数)>◆処理TO(変数)を満たすので、3−9.の処理を行う。
3−9.の処理では、◆次状態(変数)への遷移に相当するCソースを生成する。つまり、この時点での◆次状態(変数)の値は「2」であるので、状態2への遷移を示すCソース「goto s002;」(9行目のソースコード)を生成する。
その後、3−10.の処理を行う。
3−10.の処理では、◆条件内容≠−1の場合は、条件(IF文)の終了を表す「}」を出力するが、この時点では、◆条件内容の値は「−1」であるので、次の3−11.の処理を行う。
3−11.の処理では、◆XX(変数)を◆XX(変数)+1とする。これにより、◆XX(変数)の値は「2」になる。
その後、3−2.の処理を行う。
3−2.の処理では、◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。ここでは、◆XXの値「2」>◆条件TOの値「1」であるので、◆XX > ◆条件TOを満たしており、4.の処理を行う。
4.の処理では、◆表2(変数)が示す表2の行が、最終行であれば5.の処理を行い、上記以外は、◆表2(変数)を、◆表2(変数)+1として、2.の処理を行う。
この場合、◆表2(変数)が示す表2の行は、最終行ではないので、2.の処理が行われる。
2.の処理では、状態のラベルを生成する。
つまり、この時点で、表2の行=◆表2(つまり◆表2(変数)の値は「2」であるので、表2の2行目)の状態を表すラベルを出力する。これにより、ソースコードの10行目のラベル「s002:」が生成される。
次に、表2の行=◆表2(表2の2行目)の項目「FROM」の値「2」を◆条件FROM(変数)に格納する。
表2の行=◆表2(表2の2行目)の項目「TO」の値「2」を◆条件TO(変数)に格納する。
次に、3.の処理を行う。
3.の処理では、表3に対応するCソースを編集する。
3−1.まず、◆XX(変数)に◆条件FROM(変数)の値を格納する。
3−2.◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。ここでは、◆XXの値「2」>◆条件TOの値「2」であるので、◆XX > ◆条件TOを満たしておらず、3−3.の処理に行く。
3−3.の処理では、表3の行=◆XX(つまり◆XX(変数)の値は「2」であるので、表3の2行目)の項目「FROM」の値「4」を◆処理FROM(変数)に格納する。
表3の行=◆XX(表3の2行目)の項目「TO」の値「4」を◆処理TO(変数)に格納する。
表3の行=◆XX(表3の2行目)の項目「次状態」の値「3」を◆次状態(変数)に格納する。
表3の行=◆XX(表3の2行目)の項目「条件内容」の値「−1」を◆条件内容(変数)に格納する。
3−4.の処理を行う。ここでは、◆条件内容(変数)=−1の場合は3−5.の処理に行く。上記以外の場合は、表4の行=◆条件内容の条件内容のCソースを生成する。
ここでは、◆条件内容(変数)の値は「−1」であるので、3−5.の処理を行う。
3−5.の処理では、処理FROM=−1の場合は3−9.の処理を行うが、この時点では、処理FROMの値は「4」であるので、3−6.の処理により、◆YY(変数)に◆処理FROM(変数)の値「4」を格納する。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「4」であり、◆処理TO(変数)の値は、「4」であるので、◆YY(変数)>◆処理TO(変数)を満たさないので、3−8.の処理を行う。
3−8.の処理では、表4の行=◆YY(変数)(◆YY(変数)の値は「4」であるので、表4の4行目)の処理に相当するCソースを出力する。これにより、ソースコードの11行目の「rtn=$READ(_C3);」が生成される。
その後、◆YY(変数)を◆YY(変数)+1とする。これにより、◆YY(変数)の値は「5」になる。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「5」であり、◆処理TO(変数)の値は、「4」であるので、◆YY(変数)>◆処理TO(変数)を満たすので、3−9.の処理を行う。
3−9.の処理では、◆次状態(変数)への遷移に相当するcソースを生成する。つまり、この時点での◆次状態(変数)の値は「3」であるので、状態3への遷移を示すCソース「goto s003;」(12行目のソースコード)を生成する。
3−10.の処理では、◆条件内容≠−1の場合は、条件(IF文)の終了を表す「}」を出力するが、この時点では、◆条件内容の値は「−1」であるので、次の3−11.の処理を行う。
3−11.の処理では、◆XX(変数)を◆XX(変数)+1とする。これにより、◆XX(変数)の値は「3」になる。
その後、3−2.の処理を行う。
3−2.の処理では、◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。ここでは、◆XXの値「3」>◆条件TOの値「2」であるので、◆XX > ◆条件TOを満たしており、4.の処理を行う。
4.の処理では、◆表2(変数)が示す表2の行が、最終行であれば5.の処理を行い、上記以外は、◆表2(変数)を、◆表2(変数)+1として、2.の処理を行う。
この場合、◆表2(変数)が示す表2の行は、最終行ではないので、◆表2(変数)の値に「1」が加えられて◆表2の値は「3」となり、2.の処理が行われる。
2.の処理では、状態のラベルを生成する。
つまり、この時点で、表2の行=◆表2(つまり◆表2(変数)の値は「3」であるので、表2の3行目)の状態を表すラベルを出力する。これにより、ソースコードの13行目のラベル「s003:」が生成される。
次に、表2の行=◆表2(表2の3行目)の項目「FROM」の値「3」を◆条件FROM(変数)に格納する。
表2の行=◆表2(表2の3行目)の項目「TO」の値「4」を◆条件TO(変数)に格納する。
次に、3.の処理を行う。
3.の処理では、表3に対応するCソースを編集する。
3−1.まず、◆XX(変数)に◆条件FROM(変数)の値を格納する。
3−2.◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。ここでは、◆XXの値「3」>◆条件TOの値「3」であるので、◆XX > ◆条件TOを満たしておらず、3−3.の処理に行く。
3−3.の処理では、表3の行=◆XX(つまり◆XX(変数)の値は「3」であるので、表3の3行目)の項目「FROM」の値「6」を◆処理FROM(変数)に格納する。
表3の行=◆XX(表3の3行目)の項目「TO」の値「6」を◆処理TO(変数)に格納する。
表3の行=◆XX(表3の3行目)の項目「次状態」の値「999」を◆次状態(変数)に格納する。
表3の行=◆XX(表3の3行目)の項目「条件内容」の値「5」を◆条件内容(変数)に格納する。
次に、3−4.の処理を行う。ここでは、◆条件内容(変数)=−1の場合は3−5.の処理に行く。上記以外の場合は、表4の行=◆条件内容の条件内容のCソースを生成する。
ここでは、◆条件内容(変数)の値は「5」であるので、表4の行=◆条件内容、つまり表4の5行目の条件内容のCソースを生成する。これにより、ソースコードの14行目の「if(rtn==_C1){」が生成される。
その後、3−5.の処理を行う。ここでは、処理FROM=−1の場合は3−9.の処理を行うが、この時点では、処理FROMの値は「6」であるので、3−6.の処理により、◆YY(変数)に◆処理FROM(変数)の値「6」を格納する。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「6」であり、◆処理TO(変数)の値は、「6」であるので、◆YY(変数)>◆処理TO(変数)を満たさないので、3−8.の処理を行う。
3−8.の処理では、表4の行=◆YY(変数)(◆YY(変数)の値は「6」であるので、表4の6行目)の処理に相当するCソースを出力する。これにより、ソースコードの15行目の「rtn=$CLOSE(_C3);」が生成される。
その後、◆YY(変数)を◆YY(変数)+1とする。これにより、◆YY(変数)の値は「7」になる。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「7」であり、◆処理TO(変数)の値は、「6」であるので、◆YY(変数)>◆処理TO(変数)を満たすので、3−9.の処理を行う。
3−9.の処理では、◆次状態(変数)への遷移に相当するcソースを生成する。つまり、この時点での◆次状態(変数)の値は「999」であるので、状態999への遷移を示すCソース「goto s999;」(16行目のソースコード)を生成する。
3−10.の処理では、◆条件内容≠−1の場合は、条件(IF文)の終了を表す「}」を出力する。つまり、この時点で、◆条件内容の値は「5」であるので、条件(IF文)の終了を表す「}」(17行目のソースコード)を生成する。
続く3−11.の処理では、◆XX(変数)を◆XX(変数)+1とする。これにより、◆XX(変数)の値は「4」になる。
その後、3−2.の処理を行う。
3−2.の処理では、◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。
ここでは、◆XXの値「4」>◆条件TOの値「3」であるので、◆XX > ◆条件TOを満たしており、4.の処理を行う。
3−2.の処理では、◆XX > ◆条件TOを満たしておらず、3−3.の処理に行く。
3−3.の処理では、表3の行=◆XX(つまり◆XX(変数)の値は「4」であるので、表3の4行目)の項目「FROM」の値「7」を◆処理FROM(変数)に格納する。
表3の行=◆XX(表3の4行目)の項目「TO」の値「7」を◆処理TO(変数)に格納する。
表3の行=◆XX(表3の4行目)の項目「次状態」の値「2」を◆次状態(変数)に格納する。
表3の行=◆XX(表3の4行目)の項目「条件内容」の値「−1」を◆条件内容(変数)に格納する。
次に、3−4.の処理を行う。ここでは、◆条件内容(変数)=−1の場合は3−5.の処理に行く。上記以外の場合は、表4の行=◆条件内容の条件内容のCソースを生成する。
ここでは、◆条件内容(変数)の値は「−1」であるので、3−5.の処理を行う。
3−5.の処理では、処理FROM=−1の場合は3−9.の処理を行うが、この時点では、処理FROMの値は「7」であるので、3−6.の処理により、◆YY(変数)に◆処理FROM(変数)の値「7」を格納する。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「7」であり、◆処理TO(変数)の値は、「7」であるので、◆YY(変数)>◆処理TO(変数)を満たさないので、3−8.の処理を行う。
3−8.の処理では、表4の行=◆YY(変数)(◆YY(変数)の値は「7」であるので、表4の7行目)の処理に相当するCソースを出力する。これにより、ソースコードの18行目の「rtn=KERNEL();」が生成される。
その後、◆YY(変数)を◆YY(変数)+1とする。これにより、◆YY(変数)の値は「8」になる。
その後、3−7.の処理を行う。この場合、◆YY(変数)の値は「8」であり、◆処理TO(変数)の値は、「7」であるので、◆YY(変数)>◆処理TO(変数)を満たすので、3−9.の処理を行う。
3−9.の処理では、◆次状態(変数)への遷移に相当するcソースを生成する。つまり、この時点での◆次状態(変数)の値は「2」であるので、状態2への遷移を示すCソース「goto s002;」(19行目のソースコード)を生成する。
3−10.の処理では、◆条件内容≠−1の場合は、条件(IF文)の終了を表す「}」を出力する。つまり、この時点で、◆条件内容の値は「−1」であるので、3−11.の処理を行う。
続く3−11.の処理では、◆XX(変数)を◆XX(変数)+1とする。これにより、◆XX(変数)の値は「5」になる。
3−2.の処理では、◆XX > ◆条件TOの比較判定を行う。◆XX > ◆条件TOを満たす場合、4.の処理に行く。ここでは、◆XXの値「5」>◆条件TOの値「3」であるので、◆XX > ◆条件TOを満たしており、4.の処理に行く。
4.の処理では、◆表2の値は「3」であり、最終行を示しているので、5.の処理に行く。
5.の処理では、終了ラベル「s999」(20行目のソースコード)、終了処理「return 関数戻値」(21行目のソースコード)、関数の終わりを表す「}」(22行目のソースコード)が生成される。ここでは、終了処理「return 関数戻値」は、「return TRANSACTION_rtn」である。
(実施形態2の効果)
このように本実施形態2では、要求される論理演算システムをコンピュータ上に構築するプログラムを、この論理演算システムを定義する仕様書から得られる状態遷移図あるいは状態遷移表に基づいて自動生成することができる効果がある。
なお、本実施形態2では、実施形態1の会計システムを構築するためのプログラムを自動生成する場合について説明したが、本実施形態2のプログラム自動生成装置は、状態遷移表あるいは状態遷移図により表される演算処理であれば、どのような演算処理であっても、この演算処理を行うためのプログラムのソースコードを、状態遷移表あるいは状態遷移図から自動生成することが可能である。
(実施形態3)
次に、本発明の実施形態3による論理演算システムとして、分散共分散の逐次計算のモデルについて説明する。
従来から統計演算処理は、一般的にはデータを蓄積した後に、バッチ演算により一括して演算結果を求めているが、金融リスクの計算(最小二乗法)などに用いられる基本変数である分散・共分散は、時々刻々と変化する株価などに基づく株価変動の予測情報、例えば、複数の銘柄の株価の相関を示すものとなり、この相関により、関連する株価の予測情報をリアルタイムで取得することは非常に有利となる。
そこで、この実施形態3では、2変数の相関を示す分散共分散を求める論理演算システムについて説明する。
この論理演算システムは、2つの変数A及びB(例えば、2つの銘柄の株価)の変化に基づいて、変数Aの分散、変数A及びBの共分散、及び変数Bの分散を、変数A及びBの値を含む5つのデータが時々刻々と入力される度に算出する論理演算システムを例に挙げて説明する。
図36は、本発明の実施形態3による論理演算システムを説明する図であり、この論理演算システムで行う分散共分散の逐次計算のモデルを示している。
この論理演算システム300では、2変数の論理入力Sin3に基づく論理出力Sout3である分散共分散がユーザ要求に応じた集計結果である。また、この実施形態3では、分散共分散である集計結果は、時々刻々と変化する値を有する点の集合からなる多様体上で、1つの局所座標系として定義されている。この局所座標系では、Y軸上及びX軸上にそれぞれ変数A及びBが定義され、X軸上の変数AとY軸上の変数Aとで定義される点が変数Aの分散としての値を有し、X軸上の変数BとY軸上の変数Bとで定義される点が変数Bの分散としての値を有し、X軸上の変数Aあるいは変数BとY軸上の変数Bあるいは変数Aとで定義される点が変数A及びBの共分散としての値を有している。
ここで、局所座標系の各点はメモリ空間に写像され、該メモリ空間上で局所座標系の各点の値が更新される。また、局所座標系の各点の値(基本変数)の更新は、要求仕様に応じた関数が組み込まれた決定性チューリングマシンを用いて行われる。
従って、この実施形態3の論理演算システム300は、実施形態1のリアル会計システムとは、論理入力Sin3、論理出力構造Sout3、及び論理入力から論理出力を導出する関数が異なる以外は、同等の構成を有している。
まず、論理入力Sin3について説明する。
ここでは、論理入力Sin3は、変数A及びBとして、それぞれNo.1〜No.5までの5件のデータを含んでいる。また、論理出力Sout3には、1〜5件目のデータが入力された時点での、変数Aの分散、変数AとBの共分散、変数Bの共分散の値を含んでいる。
一般的なバッチ処理時の分散共分散の計算式は、以下の式(1)で表される。
ここでnはデータ件数である。変数μaは変数AnのデータA1〜Anの平均値であり、一括処理により求められる。変数μbは変数BnのデータB1〜Bnの平均値であり、一括処理により求められる。
一方、本実施形態の演算処理システム300は、分散共分散を逐次計算で求めるものであり、この場合の逐次計算式は、以下の式(2)で表される。
Vabは、変数AとBの積和であり、例えば、Vab(3)=A1B1+A2B2+A3B3ある。また、Taは、変数Aの和であり、Ta(3)=A1+A2+A3である。さらに、Tbは、変数Bの和であり、Tb(3)=B1+B2+B3である。
なお、上記式(1)から式(2)への変換は、以下の(式3)に示す計算により行われる。
ここで、Sab、Vab、Ta、Tbは、すべて場の変数、つまり多様体を構成する点の時々刻々と変化する値である。
また、Taは変数Aの総和であり、Tbは変数Bの総和であるので、共に、今回までの総和は、前回までの総和に今回の値(入力値)を加算して求めることができる。
同様にVabは、変数Aと変数Bの積の総和であるため、今回までの総和は、前回までの総和に今回の入力値(変数Aと変数Bの積)を加算して求めることができる。
つまり、これらの変数Vab、Ta、Tbの値は、式(4)に示す再帰差分方程式で求めることができ、この結果、変数A及びBの分散Sab(a=b)、さらに変数Aと変数Bの共分散Sab(a≠b)も、この再帰差分方程式で求めることが可能となる。
Y(n)=Y(n−1)+u(n) ・・・式(4)
最小二乗法で用いる近似直線の係数α及びβは分散、共分散により求めることができる。
Y=αX+β
α=Sxy/Sxx
β=Ymean−(Sxy/Sxx)・Xmean
ここで、Sxyは変数X、Yの共分散であり、Sxxは変数Xの分散である。
次に動作について説明する。
図37は、この実施形態3による論理演算システムの動作を説明する図である。
1件目のデータ(変数A=12、変数B=3)が論理演算システム300に入力されると、Ta(1)=12、Tb(1)=3、Vaa(1)=144(=12×12)、Vab(1)=36(=12×3)、Vbb(1)=9(=3×3)が、上記式(4)により計算される。また、この演算結果を用いて、式2により、Saa(1)=0、Sab(1)=0、Sbb(1)=0が求められる(図37(a))。
2件目のデータ(変数A=20、変数B=9)が論理演算システム300に入力されると、Ta(2)=32(=12+20)、Tb(2)=9(=3+6)、Vaa(2)=544(=144+20×20)、Vab(2)=156(=36+20×6)、Vbb(2)=45(=9+6×6)が、上記式(4)により計算される。また、この演算結果を用いて、式2により、Saa(2)=16、Sab(2)=6、Sbb(2)=2.25が求められる(図37(b))。
3件目のデータ(変数A=24、変数B=7)が論理演算システム300に入力されると、Ta(3)=56(=32+24)、Tb(3)=16(=9+7)、Vaa(3)=1120(=544+24×24)、Vab(3)=324(=156+24×7)、Vbb(3)=94(=45+7×7)が、上記式(4)により計算される。また、この演算結果を用いて、式2により、Saa(3)=24.8、Sab(3)=8.44、Sbb(3)=2.89が求められる(図37(c))。
4件目のデータ(変数A=26、変数B=10)が論理演算システム300に入力されると、Ta(4)=82(=56+26)、Tb(4)=26(=16+10)、Vaa(4)=1796(=1120+26×26)、Vab(4)=584(=324+26×10)、Vbb(4)=194(=94+10×10)が、上記式(4)により計算される。また、この演算結果を用いて、式2により、Saa(4)=28.72、Sab(4)=12.75、Sbb(4)=6.25が求められる(図37(d))。
5件目のデータ(変数A=33、変数B=14)が論理演算システム300に入力されると、Ta(5)=115(=82+33)、Tb(5)=40(=26+14)、Vaa(5)=2885(=1796+33×33)、Vab(5)=1046(=584+33×14)、Vbb(5)=390(=194+14×14)が、上記式(4)により計算される。また、この演算結果を用いて、式2により、Saa(5)=48、Sab(5)=25.2、Sbb(5)=14が求められる(図37(e))。
このように本実施形態3による論理演算システム300では、2変数の論理入力Sin3に基づく論理出力Sout3である分散共分散を、時々刻々と変化する値を有する点の集合からなる多様体上で1つの局所座標系として定義し、局所座標系の各点をメモリ空間に写像し、メモリ空間上で局所座標系の各点の値を決定性チューリングマシンを用いて更新するので、2つの変数A及びB(例えば、2つの銘柄の株価)の変化に基づいて、変数Aの分散、変数A及びBの共分散、及び変数Bの分散を、論理入力Sin3としての変数A及びBの値が入力される度に算出することができる。
以上のように、本発明の好ましい実施形態を用いて本発明を例示してきたが、本発明は、この実施形態に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。