(57)【要約】【課題】多階層計算式に用いられる複数の演算要素の親子関係を容易に管理できるようにすることを目的とする。【解決手段】計算式要素取得部１２０は、入力計算式１０１の左辺に含まれる演算要素であるソース要素と、入力計算式１０１の右辺に含まれる演算要素であるターゲット要素とを取得する。演算要素管理部１５０は、ターゲット要素と同じ演算要素に対応付けられたブロック番号とビット番号とを演算要素管理テーブル２２０から取得し、取得したブロック番号とビット番号とに基づいてソース要素の接続ビット列を生成する。演算要素ビット列管理部１７０はソース要素の接続ビット列に基づいてブロックビット列を生成し、生成したブロックビット列と、取得されたブロック番号と、ソース要素を識別する演算要素番号とを接続ビット列テーブル２３０に登録する。【選択図】図１
2015108991.tif 000002
【特許請求の範囲】
【請求項１】
演算要素を識別する演算要素番号と前記演算要素に割り当てるブロック番号と前記演算要素に割り当てるビット番号とを対応付ける演算要素管理テーブルと、前記演算要素番号と子の演算要素を特定するための接続ビット列から生成されるブロックビット列と前記ブロックビット列を識別するブロック番号とを対応付ける接続ビット列テーブルとを記憶するテーブル記憶部と、
入力計算式の左辺に含まれる演算要素であるソース要素と、前記入力計算式の右辺に含まれる演算要素であるターゲット要素とを取得する計算式要素取得部と、
前記ターゲット要素と同じ演算要素に対応付けられたブロック番号とビット番号とを前記演算要素管理テーブルから取得し、取得した前記ブロック番号と前記ビット番号とに基づいて前記ソース要素の前記接続ビット列を生成する演算要素管理部と、
前記ソース要素の前記接続ビット列に基づいて前記ブロックビット列を生成し、生成した前記ブロックビット列と、取得された前記ブロック番号と、前記ソース要素を識別する演算要素番号とを前記接続ビット列テーブルに登録する演算要素ビット列登録部と
を備えることを特徴とする演算要素管理装置。
【請求項２】
前記演算要素ビット列登録部は、
前記ソース要素の前記接続ビット列を分割して暫定のブロックビット列を生成し、前記暫定のブロックビット列の後半部分のビット値が削除ビット値であれば前記暫定のブロックビット列から前記後半部分を削除することによって前記ブロックビット列を生成する
ことを特徴とする請求項１記載の演算要素管理装置。
【請求項３】
前記演算要素ビット列登録部は、
前記暫定のブロックビット列の後半部分のビット値が削除ビット値でなければ前記暫定のブロックビット列のビット値を反転し、反転後の前記暫定のブロックビット列から前記後半部分を削除することによって前記ブロックビット列を生成する
ことを特徴とする請求項２記載の演算要素管理装置。
【請求項４】
前記演算要素管理装置は子孫要素取得部と到達ビット列生成部とを備え、
前記テーブル記憶部は、前記演算要素番号と子孫の演算要素を特定するための到達ビット列から生成されるブロックビット列と前記ブロックビット列を識別するブロック番号とを対応付ける到達ビット列テーブルを記憶し、
前記子孫要素取得部は、前記接続ビット列テーブルから前記ソース要素の前記ブロックビット列を取得し、取得した前記ブロックビット列に基づいて前記ソース要素の子の演算要素を識別する子要素番号を算出し、
前記到達ビット列生成部は、前記到達ビット列テーブルから前記子要素番号と同じ演算要素番号に対応付けられた前記ブロックビット列を取得し、取得した前記ブロックビット列に基づいて前記ソース要素の前記到達ビット列を生成し、
前記演算要素ビット列登録部は、前記到達ビット列テーブルに登録するブロックビット列を前記ソース要素の前記到達ビット列に基づいて生成し、生成した前記ブロックビット列と、生成した前記ブロックビット列を識別するブロック番号と、前記ソース要素を識別する前記演算要素番号とを前記到達ビット列テーブルに登録する
ことを特徴とする請求項１から請求項３のいずれかに記載の演算要素管理装置。
【請求項５】
前記演算要素管理装置は整合性検証部と計算式管理部と計算式記憶部とを備え、
前記子孫要素取得部は、前記到達ビット列テーブルから前記ソース要素の前記ブロックビット列を取得し、取得した前記ソース要素の前記ブロックビット列に基づいて前記ソース要素の子孫の演算要素を識別する子孫要素番号を算出し、
前記整合性検証部は、前記子孫要素番号に基づいて前記入力計算式が正しい計算式であるか否かを判定し、
前記計算式管理部は、前記入力計算式が正しい計算式であると判定された場合に前記入力計算式を前記計算式記憶部に登録する
ことを特徴とする請求項４に記載の演算要素管理装置。
【請求項６】
前記整合性検証部は、前記子孫要素番号によって識別される前記演算要素が前記ソース要素である場合に前記入力計算式が正しい計算式でないと判定する
ことを特徴する請求項５に記載の演算要素管理装置。
【請求項７】
演算要素管理テーブルと接続ビット列テーブルとを用いる演算要素管理プログラムであって、
前記演算要素管理テーブルは、演算要素を識別する演算要素番号と前記演算要素に割り当てるブロック番号と前記演算要素に割り当てるビット番号とを対応付けるテーブルであり、
前記接続ビット列テーブルは、前記演算要素番号と子の演算要素を特定するための接続ビット列から生成されるブロックビット列と前記ブロックビット列を識別するブロック番号とを対応付けるテーブルであり、
入力計算式の左辺に含まれる演算要素であるソース要素と、前記入力計算式の右辺に含まれる演算要素であるターゲット要素とを取得する計算式要素取得処理と、
前記ターゲット要素と同じ演算要素に対応付けられたブロック番号とビット番号とを前記演算要素管理テーブルから取得し、取得した前記ブロック番号と前記ビット番号とに基づいて前記ソース要素の前記接続ビット列を生成する演算要素管理処理と、
前記ソース要素の前記接続ビット列に基づいて前記ブロックビット列を生成し、生成した前記ブロックビット列と、取得された前記ブロック番号と、前記ソース要素を識別する演算要素番号とを前記接続ビット列テーブルに登録する演算要素ビット列登録処理と
をコンピュータに実行させるための演算要素管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、親子関係を持つ複数の演算要素を含んだ多階層計算式を管理するための技術に関するものである。
【背景技術】
【０００２】
センサ値または販売データなどを階層別に集計する場合には、下位の計算式を組み合わせて上位の計算式を定義する。このような多階層の要素の組み合わせで表現される計算式を編集する場合、計算式が展開可能であるかどうか確認（整合性の確認）する必要があり、整合性確認するにあたり、関連する計算式に含まれる計算式要素（以下、演算要素と呼ぶ）を探索する必要がある。センサ値とは電力計、温度計、水流計などである。販売データとは売上げ、販売個数などである。階層とは組織、配置などである。
従来の階層構造の管理方法では、要素の親と子の対応表（親子関係）を管理することによって、関連する要素を巡回的に探索している（例えば、特許文献１）。また、親子関係の管理において、ルートの要素からのパスおよび順番を管理することによって、探索を効率化する方法も提案されている（例えば、特許文献２）。
【０００３】
従来の親子関係を管理する方法では、要素の数が大量になると、管理対象が増え、探索対象の深さおよび要素数が増加する。このため、親子関係の管理に膨大なデータが必要であり、かつ、探索に時間がかかってしまう。また、ルートの要素からのパスおよび順番を管理する方法はルートの要素が単一であるため、複数のルートを持つ階層構造の親子関係を管理することができない。また、計算式の更新時には、関係するパスを全て変更しなければならず、更新処理に時間がかかってしまう。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１７６０５２号公報
【特許文献２】国際公開第２００９−０６６４４２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、多階層計算式に用いられる複数の演算要素の親子関係を容易に管理できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の演算要素管理装置は、
演算要素を識別する演算要素番号と前記演算要素に割り当てるブロック番号と前記演算要素に割り当てるビット番号とを対応付ける演算要素管理テーブルと、前記演算要素番号と子の演算要素を特定するための接続ビット列から生成されるブロックビット列と前記ブロックビット列を識別するブロック番号とを対応付ける接続ビット列テーブルとを記憶するテーブル記憶部と、
入力計算式の左辺に含まれる演算要素であるソース要素と、前記入力計算式の右辺に含まれる演算要素であるターゲット要素とを取得する計算式要素取得部と、
前記ターゲット要素と同じ演算要素に対応付けられたブロック番号とビット番号とを前記演算要素管理テーブルから取得し、取得した前記ブロック番号と前記ビット番号とに基づいて前記ソース要素の前記接続ビット列を生成する演算要素管理部と、
前記ソース要素の前記接続ビット列に基づいて前記ブロックビット列を生成し、生成した前記ブロックビット列と、取得された前記ブロック番号と、前記ソース要素を識別する演算要素番号とを前記接続ビット列テーブルに登録する演算要素ビット列登録部とを備える。
【発明の効果】
【０００７】
本発明によれば、多階層計算式に用いられる複数の演算要素の親子関係を容易に管理することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１における多階層計算式管理装置１００の機能構成図である。
【図２】実施の形態１における階層図１６１と接続ビット列１６２と到達ビット列１６３の一例を示す図である。
【図３】実施の形態１における演算要素ビット列管理部１７０の機能構成図である。
【図４】実施の形態１における計算式テーブル２１０の一例を示す図である。
【図５】実施の形態１における演算要素管理テーブル２２０の一例を示す図である。
【図６】実施の形態１における接続ビット列テーブル２３０の一例を示す図である。
【図７】実施の形態１における到達ビット列テーブル２４０の一例を示す図である。
【図８】実施の形態１における多階層計算式管理方法を示すフローチャートである。
【図９】実施の形態１における階層図１６１の一例を示す図である。
【図１０】実施の形態１における整合性検証処理（Ｓ１３０）のフローチャートである。
【図１１】実施の形態１における演算要素管理処理（Ｓ１５０）のフローチャートである。
【図１２】実施の形態１における演算要素管理処理（Ｓ１５０）のフローチャートである。
【図１３】実施の形態１における演算要素ビット列登録処理のフローチャートである。
【図１４】実施の形態１における到達ビット列生成処理のフローチャートである。
【図１５】実施の形態１における子孫要素番号取得処理のフローチャートである。
【図１６】実施の形態１における親要素番号取得処理のフローチャートである。
【図１７】実施の形態１における多階層計算式管理装置１００のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【０００９】
実施の形態１．
多階層計算式に用いられる複数の演算要素の親子関係を容易に管理するための形態について説明する。
【００１０】
図１は、実施の形態１における多階層計算式管理装置１００の機能構成図である。
実施の形態１における多階層計算式管理装置１００の機能構成について、図１に基づいて説明する。
【００１１】
多階層計算式管理装置１００（演算要素管理装置の一例）は、多階層計算式を管理する装置である。
多階層計算式は、親子関係を持つ複数の演算要素を用いた計算式である。
例えば、｛ｆ１｝＝｛ｆ２｝＋｛ｆ３｝という多階層計算式がある場合、多階層計算式によって算出される演算要素ｆ１、つまり、左辺にある演算要素ｆ１が親の演算要素である。また、多階層計算式に含まれる残りの演算要素ｆ２、ｆ３、つまり、右辺にある演算要素ｆ２、ｆ３が子の演算要素である。
さらに、｛ｆ２｝＝｛ｆ４｝＋｛ｆ５｝という多階層計算式がある場合、演算要素ｆ２、ｆ３、ｆ４、ｆ５は演算要素ｆ１の子孫の演算要素であり、演算要素ｆ１、ｆ２は演算要素ｆ４、ｆ５の祖先の演算要素である。
なお、｛ｆ３｝＝［ａ１］＋［ａ２］であり、｛ｆ４｝＝［ａ３］＋［ａ４］であり、｛ｆ５｝＝［ａ５］＋［ａ６］である場合、演算要素ｆ１の値はｆ１＝［ａ１］＋［ａ２］＋［ａ３］＋［ａ４］＋［ａ５］＋［ａ６］を計算することによって得られる。
実施の形態１において、｛｝内に記された符号は演算要素を識別し、［］内に記された符号は変数（変数要素ともいう）を識別する。
【００１２】
多階層計算式管理装置１００は、計算式入力部１１０と、計算式要素取得部１２０と、整合性検証部１３０と、計算式管理部１４０と、演算要素管理部１５０と、計算式出力部１６０とを備える。
さらに、多階層計算式管理装置１００は、演算要素ビット列管理部１７０と、計算式記憶部１９０（テーブル記憶部の一例）とを備える。
【００１３】
計算式入力部１１０は、多階層計算式管理装置１００に入力された多階層計算式を取得する。以下、入力された多階層計算式を入力計算式１０１という。
計算式要素取得部１２０は、入力計算式１０１から親の演算要素と子の演算要素とを取得する。以下、入力計算式１０１から取得される親の演算要素をソース要素といい、入力計算式１０１から取得される子の演算要素をターゲット要素という。
整合性検証部１３０は、入力計算式１０１が整合性がある多階層計算式であるか否かを判定する。
計算式管理部１４０は、整合性がある入力計算式１０１を計算式テーブル２１０に登録する。
演算要素管理部１５０は、ソース要素を演算要素管理テーブル２２０に登録する。
計算式出力部１６０は、登録された入力計算式１０１に関する情報を出力する。
【００１４】
演算要素ビット列管理部１７０は、演算要素管理テーブル２２０と接続ビット列テーブル２３０と到達ビット列テーブル２４０とを管理する。
演算要素ビット列管理部１７０の詳細については後述する。
【００１５】
計算式記憶部１９０は、多階層計算式管理装置１００が使用、生成または入出力するデータを記憶する。
例えば、計算式記憶部１９０は、入力計算式１０１と、計算式テーブル２１０と、演算要素管理テーブル２２０と、接続ビット列テーブル２３０と、到達ビット列テーブル２４０とを記憶する。
計算式テーブル２１０は、多階層計算式を管理するためのテーブルである。
演算要素管理テーブル２２０は、演算要素を管理するためのテーブルである。
接続ビット列テーブル２３０は、接続ビット列を管理するためのテーブルである。接続ビット列は演算要素の子要素（子の演算要素）を特定するためのビット列である。
到達ビット列テーブル２４０は、到達ビット列を管理するためのテーブルである。到達ビット列は演算要素の子孫要素（子孫の演算要素）を特定するためのビット列である。
【００１６】
計算式管理部１４０、演算要素管理部１５０および演算要素ビット列管理部１７０はリレーショナルデータベースシステム（ＲＤＢＭＳ）などのデータベース管理システムを用いて実現することができる。
【００１７】
図２は、実施の形態１における階層図１６１と接続ビット列１６２と到達ビット列１６３の一例を示す図である。
実施の形態１における階層図１６１と接続ビット列１６２と到達ビット列１６３の一例について、図２に基づいて説明する。
【００１８】
階層図１６１は、１番から８番の演算要素の親子関係を表している。例えば、階層図１６１は、１番の演算要素の子要素が２番の演算要素と３番の演算要素であることを表している。また、階層図１６１は、１番の演算要素の子孫要素が２番から８番の演算要素であることを表している。
階層図１６１が表す親子関係は、接続ビット列１６２および到達ビット列１６３で表すことができる。
接続ビット列１６２は、演算要素の子要素をビット値で示している。例えば、１番の演算要素の接続ビット列「０１１０００００」において、２番目と３番目のビットのビット値が１である。つまり、この接続ビット列は１番の演算要素の子要素が２番と３番の演算要素であることを示している。
到達ビット列１６３は、演算要素の子孫要素をビット値で示している。例えば、１番の演算要素の到達ビット列「０１１１１１１１」において、２番目から８番目のビットのビット値が１である。つまり、この到達ビット列は１番の演算要素の子孫要素が２番から８番の演算要素であることを示している。
【００１９】
図３は、実施の形態１における演算要素ビット列管理部１７０の機能構成図である。
実施の形態１における演算要素ビット列管理部１７０の機能構成について、図３に基づいて説明する。
【００２０】
演算要素ビット列管理部１７０は、演算要素ビット列登録部１７１と、到達ビット列生成部１７２と、子孫要素番号取得部１７３（子孫要素取得部の一例）と、親要素番号取得部１７４（親要素取得部の一例）とを備える。
演算要素ビット列登録部１７１は、入力計算式１０１に含まれるソース要素の子要素（ターゲット要素）を特定するための接続ビット列を接続ビット列テーブル２３０に登録する。また、演算要素ビット列登録部１７１は、ソース要素の子孫要素を特定するための到達ビット列を到達ビット列テーブル２４０に登録する。
到達ビット列生成部１７２は、ソース要素の到達ビット列を生成する。
子孫要素番号取得部１７３は、演算要素（ソース要素を含む）の子孫要素（子要素を含む）を識別する演算要素番号を接続ビット列テーブル２３０または到達ビット列テーブル２４０から取得する。
親要素番号取得部１７４は、演算要素（ソース要素を含む）の親要素を識別する演算要素番号を接続ビット列テーブル２３０から取得する。
【００２１】
図４は、実施の形態１における計算式テーブル２１０の一例を示す図である。
実施の形態１における計算式テーブル２１０の一例について、図４に基づいて説明する。
【００２２】
計算式テーブル２１０は、多階層計算式とソース要素番号とソース要素名とを対応付けるテーブルである。
ソース要素番号は、多階層計算式のソース要素を識別する番号である。
ソース要素名は、多階層計算式のソース要素を識別する名称である。
【００２３】
図５は、実施の形態１における演算要素管理テーブル２２０の一例を示す図である。
実施の形態１における演算要素管理テーブル２２０の一例について、図５に基づいて説明する。
【００２４】
演算要素管理テーブル２２０は、演算要素番号とブロック番号とビット番号とを対応付けるテーブルである。
演算要素番号は、演算要素を識別する番号である。
ブロック番号は、接続ビット列（または到達ビット列）を分割して生成される複数のブロックビット列のうち、当該演算要素に対応付けられるビットが含まれるブロックビット列を識別する番号である。
ビット番号は、当該ブロックビット列に含まれる複数のビットのうち、当該演算要素に対応付けられるビットを識別する番号である。
【００２５】
演算要素管理テーブル２２０は、接続ビット列（または到達ビット列）の１番目のブロックビット列の１番目のビット値を、１番の演算要素に対応付けている（２行目を参照）。
また、演算要素管理テーブル２２０は、接続ビット列（ま多は到達ビット列）の２番目のブロックビット列の１番目のビット値を、１０００１番の演算要素に対応付けている（７行目を参照）。
【００２６】
図６は、実施の形態１における接続ビット列テーブル２３０の一例を示す図である。
実施の形態１における接続ビット列テーブル２３０の一例について、図６に基づいて説明する。
【００２７】
接続ビット列テーブル２３０は、演算要素番号とブロック番号と反転フラグとブロックビット列とを対応付けるテーブルである。
演算要素番号は、演算要素を識別する番号である。
ブロック番号は、ブロックビット列を識別する番号である。
反転フラグは、ブロックビット列に含まれる各ビット値が反転されているか否かを表すフラグ値を示す。以下、ブロックビット列に含まれる各ビット値が反転されていることを意味するフラグ値を反転フラグ値という。また、ブロックビット列に含まれる各ビット値が反転されていないことを意味するフラグ値を非反転フラグ値という。実施の形態１において反転フラグ値は１であり、非反転フラグ値は０である。但し、反転フラグ値が０であり、非反転フラグ値が１であっても構わない。
ブロックビット列は、接続ビット列を構成する複数のブロックビット列のうち、ブロック番号によって識別されるブロックビット列を示す。但し、反転フラグが反転フラグ値を示す場合、ブロックビット列に含まれる各ビット値は反転されている。また、最終ビットを含む後半部分の各ビット値が０である場合、その後半部分の各ビット値は省略される。但し、ビット値が１である場合にビット値を省略しても構わない。各なお、接続ビット列テーブル２３０のブロックビット列のデータサイズは可変長である。
【００２８】
接続ビット列に含まれるブロックビット列の数（ブロック数）がＮであり、各ブロックビット列のサイズ（ブロック長）が８ビットである場合、接続ビット列テーブル２３０は以下のような接続ビット列を示している。
１番の演算要素の接続ビット列に含まれる１番目のブロックビット列の先頭の３ビットは「０１１」である。
また、１番目のブロックビット列の後半の５ビットは「０００００」である。この５ビットはビット値が０であるため省略されている。
さらに、１番目の演算要素の接続ビット列に含まれる２番目からＮ番目のブロックビット列のビット値は０である。これらのブロックビット列はビット値が０であるため省略されている。
つまり、１番目の演算要素の接続ビット列は「０１１０００００・・・０」である。
同様に、２番目の演算要素の接続ビット列は「０００１１０００・・・０」である。
【００２９】
３番目の演算要素の接続ビット列に含まれる１番目のブロックビット列の先頭の５ビットは「１１１１１」を反転した「０００００」である。
また、１番目のブロックビット列の後半の３ビットは「１１１」である。この３ビットは反転後のビット値が０であるため省略されている。
さらに、３番目の演算要素の接続ビット列に含まれる２番目からＮ番目のブロックビット列のビット値は０である。これらのブロックビット列はビット列が０であるため省略されている。
つまり、３番目の演算要素の接続ビット列は「０００００１１１０・・・０」である。
【００３０】
図７は、実施の形態１における到達ビット列テーブル２４０の一例を示す図である。
図７に示すように到達ビット列テーブル２４０は、接続ビット列テーブル２３０（図６参照）と同様の構成である。
但し、到達ビット列テーブル２４０のブロックビット列は、到達ビット列を構成する複数のブロックビット列のうち、ブロック番号によって識別されるブロックビット列を示す。
【００３１】
到達ビット列に含まれるブロックビット列の数（ブロック数）がＮであり、各ブロックビット列のサイズ（ブロック長）が８ビットである場合、到達ビット列テーブル２４０は以下のような到達ビット列を示している。
１番目の演算要素の到達ビット列は「０１１１１１１１０・・・０」である。
２番目の演算要素の到達ビット列は「０００１１００００・・・０」である。
３番目の演算要素の到達ビット列は「０００００１１１０・・・０」である。
【００３２】
図８は、実施の形態１における多階層計算式管理方法を示すフローチャートである。
実施の形態１における多階層計算式管理方法について、図８に基づいて説明する。
【００３３】
Ｓ１１０において、管理者は新たに管理する多階層計算式を多階層計算式管理装置１００に入力する。
そして、多階層計算式管理装置１００の計算式入力部１１０は、入力された多階層計算式を入力計算式１０１として取得する。
Ｓ１１０の後、処理はＳ１２０に進む。
【００３４】
Ｓ１２０において、計算式要素取得部１２０は、ソース要素を識別するソース要素名と、ターゲット要素を識別するターゲット要素名とを入力計算式１０１から取得する。
入力計算式１０１が｛Ｆ３｝＝｛Ｆ１｝＋｛Ｆ２｝である場合、計算式要素取得部１２０は、入力計算式１０１の左辺に含まれる｛｝内のＦ３をソース要素名として取得する。また、計算式要素取得部１２０は、入力計算式１０１の右辺に含まれる｛｝内のＦ１、Ｆ２を演算要素名として取得する。
入力計算式１０１が｛Ｆ１｝＝［Ａ１］＋［Ａ２］＋［Ａ３］である場合、計算式要素取得部１２０は入力計算式１０１の左辺に含まれる｛｝内のＦ１をソース要素名として取得する。但し、入力計算式１０１の右辺には演算要素を表す｛｝が無いため、計算式要素取得部１２０は演算要素名を取得できない。［Ａ１］、［Ａ２］、［Ａ３］は、多階層計算式で表される演算要素ではなく、数値を表す変数要素である。
Ｓ１２０の後、処理はＳ１３０に進む。
【００３５】
Ｓ１３０において、整合性検証部１３０は、入力計算式１０１に整合性があるか否かを判定する。整合性がある入力計算式１０１は正しい多階層計算式であり、整合性がない入力計算式１０１は正しくない多階層計算式である。
ソース要素およびソース要素の祖先要素（親を含む祖先の演算要素）がターゲット要素の子孫要素（子を含む子孫の演算要素）に含まれなければ、入力計算式１０１に整合性がある。
または、ターゲット要素およびターゲット要素の子孫要素がソース要素の祖先要素に含まれなければ、入力計算式１０１に整合性がある。
Ｓ１３０の後、処理はＳ１３９に進む。
【００３６】
図９は、実施の形態１における階層図１６１の一例を示す図である。
図９において、Ａｎｃ（Ａ）はソース要素Ａの祖先要素の集合であり、Ｄｅｓｃ（Ｂ）はターゲット要素Ｂの子孫要素の集合である。ソース要素Ａとターゲット要素Ｂとを除いた残りの演算要素の要素番号は省略している。
ターゲット要素Ｂの子孫要素の重合Ｄｅｓｃ（Ｂ）にソース要素Ａの祖先要素の集合Ａｎｃ（Ａ）が含まれる場合、ソース要素Ａとターゲット要素Ｂとの間でループの関係が生じてしまう。そのため、ソース要素Ａとターゲット要素Ｂとを含む入力計算式１０１には整合性がない。
一方で、ターゲット要素Ｂの子孫要素の重合Ｄｅｓｃ（Ｂ）にソース要素Ａの祖先要素の集合Ａｎｃ（Ａ）が含まれない場合、ソース要素Ａとターゲット要素Ｂとの間でループの関係が生じない。そのため、ソース要素Ａとターゲット要素Ｂとの関係において入力計算式１０１に整合性がある。
【００３７】
図１０は、実施の形態１における整合性検証処理（Ｓ１３０）のフローチャートである。
実施の形態１における整合性検証処理（Ｓ１３０）について、図１０に基づいて説明する。
【００３８】
Ｓ１３１において、整合性検証部１３０は、Ｓ１２０（図８参照）で入力計算式１０１からターゲット要素名が取得されたか否かを判定する。
ターゲット要素名が取得された場合（ＹＥＳ）、処理はＳ１３２に進む。
ターゲット要素名が取得されなかった場合（ＮＯ）、整合性検証処理（Ｓ１３０）は終了する。この場合、入力計算式１０１に整合性がある。
【００３９】
Ｓ１３２において、整合性検証部１３０は、Ｓ１２０で入力計算式１０１から取得されたソース要素名と同じ名称に対応付けられたソース要素番号を計算式テーブル２１０（図４参照）から取得する。このとき、計算式管理部１４０が整合性検証部１３０の代わりに計算式テーブル２１０からソース要素番号を取得しても構わない。
ソース要素名と同じ名称が計算式テーブル２１０に登録されていない場合、取得されるソース要素番号は無い。
Ｓ１３２の後、処理はＳ１３３に進む。
【００４０】
Ｓ１３３において、整合性検証部１３０は、入力計算式１０１から取得されたターゲット要素名のうち未選択のターゲット要素名を一つ選択する。
以下、Ｓ１３２で選択されたターゲット要素名を単にターゲット要素名という。
Ｓ１３３の後、処理はＳ１３４に進む。
【００４１】
Ｓ１３４において、整合性検証部１３０は、計算式テーブル２１０（図４参照）にターゲット要素名と名称が同じであるソース要素名が登録されているか否かを判定する。このとき、計算式管理部１４０が整合性検証部１３０の代わりに計算式テーブル２１０を参照してもよい。
ターゲット要素名と名称が同じであるソース要素名が登録されている場合（ＹＥＳ）、処理はＳ１３５に進む。
ターゲット要素名と名称が同じであるソース要素名が登録されていない場合（ＮＯ）、整合性検証処理（Ｓ１３０）は終了する。この場合、不明なターゲット要素が入力計算式１０１に含まれるため、入力計算式１０１に整合性がない。
【００４２】
Ｓ１３５において、整合性検証部１３０は、ターゲット要素の各子孫要素の演算要素番号を子孫要素番号取得部１７３から取得する。子孫要素番号取得部１７３は、到達ビット列テーブル２４０（図７参照）からターゲット要素の各子孫要素の演算要素番号を取得する。子孫要素番号取得部１７３が子孫要素の演算要素番号を取得する子孫要素番号取得処理については後述する。
以下、Ｓ１３５で取得される演算要素番号の集合をターゲット要素の子孫要素集合という。
Ｓ１３５の後、処理はＳ１３６に進む。
【００４３】
Ｓ１３６において、整合性検証部１３０は、ターゲット要素の子孫要素集合にソース要素番号が含まれるか否かを判定する。
ターゲット要素の子孫要素集合にソース要素番号が含まれる場合（ＹＥＳ）、整合性検証処理（Ｓ１３０）は終了する。この場合、入力計算式１０１に整合性がない。
ターゲット要素の子孫要素集合にソース要素番号が含まれない場合（ＮＯ）、処理はＳ１３７に進む。
【００４４】
Ｓ１３７において、整合性検証部１３０は、未選択であるターゲット要素番号があるか否かを判定する。
未選択であるターゲット要素番号がある場合（ＹＥＳ）、処理はＳ１３３に戻る。
未選択であるターゲット要素番号がない場合（ＮＯ）、整合性検証処理（Ｓ１３０）は終了する。
図８に戻り、Ｓ１３９から説明を続ける。
【００４５】
Ｓ１３９において、整合性検証部１３０は、Ｓ１３０の検証結果に基づいて、入力計算式１０１に整合性があるか否かを判定する。
入力計算式１０１に整合性がある場合（ＹＥＳ）、処理はＳ１４０に進む。
入力計算式１０１に整合性がない場合（ＮＯ）、計算式出力部１６０は入力計算式１０１に整合性がないことを示すエラーメッセージを表示し、多階層計算式管理方法の処理は終了する。
【００４６】
Ｓ１４０において、計算式管理部１４０は、入力計算式１０１を計算式テーブル２１０（図４参照）に以下のように登録する。
入力計算式１０１のソース要素名が計算式テーブル２１０に登録されている場合、計算式管理部１４０は、多階層計算式を入力計算式１０１に更新する。
入力計算式１０１のソース要素名が計算式テーブル２１０に登録されていない場合、計算式管理部１４０は、計算式テーブル２１０に新たなレコードを生成し、ソース要素番号と入力計算式１０１のソース要素名と入力計算式１０１（多階層計算式）とを新たなレコードに設定する。ソース要素番号は、計算式テーブル２１０に含まれる最大のソース要素番号に１を加算した番号である。
Ｓ１４０の後、処理はＳ１５０に進む。
【００４７】
Ｓ１５０において、演算要素管理部１５０は、入力計算式１０１に基づいて、演算要素管理テーブル２２０と接続ビット列テーブル２３０と到達ビット列テーブル２４０とを更新する。
演算要素管理処理（Ｓ１５０）については後述する。
Ｓ１５０の後、処理はＳ１６０に進む。
【００４８】
Ｓ１６０において、計算式出力部１６０は、登録された入力計算式１０１に関する情報を出力する。
例えば、計算式出力部１６０は、入力計算式１０１と入力計算式１０１が登録されたことを示す登録メッセージとを表示する。また、計算式出力部１６０は、演算要素管理テーブル２２０と接続ビット列テーブル２３０と到達ビット列テーブル２４０とに基づいて、入力計算式１０１のソース要素およびターゲット要素に関する階層図１６１（図２、図９参照）を生成する。そして、計算式出力部１６０は階層図１６１を表示する。
Ｓ１６０の後、多階層計算式管理方法の処理は終了する。
【００４９】
図１１、図１２は、実施の形態１における演算要素管理処理（Ｓ１５０）のフローチャートである。
実施の形態１における演算要素管理処理（Ｓ１５０）について、図１１および図１２に基づいて説明する。
【００５０】
Ｓ１５０１（図１１参照）において、演算要素管理部１５０は、入力計算式１０１に含まれるソース要素名に対応付けられたソース要素番号を、計算式テーブル２１０（図４参照）から取得する。このとき、計算式管理部１４０が、演算要素管理部１５０の代わりにソース要素番号を取得してもよい。
演算要素管理部１５０は、取得したソース要素番号を演算要素管理テーブル２２０（図５参照）に登録する。但し、ソース要素番号と同じ演算要素番号が演算要素管理テーブル２２０に登録済みである場合、演算要素管理部１５０はソース要素番号を新たに登録しなくてよい。
ソース要素番号を登録する場合、演算要素管理部１５０は、演算要素管理テーブル２２０に新たなレコードを生成し、ソース要素番号（演算要素番号）とブロック番号とビット番号とを新たなレコードに設定する。
設定するビット番号は、演算要素管理テーブル２２０に含まれる最大の演算要素番号に対応付けられているビット番号に１を加算した番号である。但し、１を加算した番号がブロック長を超えた場合、設定するビット番号は１である。
設定するブロック番号は、演算要素管理テーブル２２０に含まれる最大のブロック番号と同じ番号である。但し、設定するビット番号が１である場合、設定するブロック番号は最大のブロック番号に１を加算した番号である。
Ｓ１５０１の後、処理はＳ１５１０に進む。
【００５１】
Ｓ１５１０（図１１参照）において、演算要素管理部１５０は、入力計算式１０１に含まれるターゲット要素名に対応付けられたターゲット要素番号を、計算式テーブル２１０（図４参照）から取得する。このとき、計算式管理部１４０が、演算要素管理部１５０の代わりにソース要素番号とターゲット要素番号とを取得してもよい。
演算要素管理部１５０は、取得したターゲット要素番号に対応付けられたブロック番号とビット番号とを、演算要素管理テーブル２２０から取得する。
演算要素管理部１５０は、取得したブロック番号とビット番号とを用いて、ソース要素の接続ビット列を生成する。
例えば、ターゲット要素が１つであり、ターゲット要素のブロック番号が１であり、ターゲット要素のビット番号が２である場合、ソース要素の接続ビット列は「０１０・・・０」である。
Ｓ１５１０の後、処理はＳ１５１１に進む。
【００５２】
Ｓ１５１１において、演算要素管理部１５０は、演算要素ビット列登録部１７１を用いて、ソース要素の接続ビット列を接続ビット列テーブル２３０に登録する。演算要素ビット列登録部１７１が接続ビット列を登録する演算要素ビット列登録処理については後述する。
Ｓ１５１１の後、処理はＳ１５１２に進む。
【００５３】
Ｓ１５１２において、演算要素管理部１５０は、Ｓ１５２０（図１２参照）以降の処理で用いる更新要素集合にソース要素番号を追加する。
以下、更新要素集合に含まれる演算要素番号（ソース要素番号を含む）を更新要素番号といい、更新要素番号によって識別される演算要素を更新要素という。
Ｓ１５１２の後、処理はＳ１５２０に進む。
【００５４】
Ｓ１５２０（図１２参照）において、演算要素管理部１５０は、更新要素集合から未選択の更新要素番号を一つ選択する。
Ｓ１５２０の後、処理はＳ１５２１に進む。
【００５５】
Ｓ１５２１において、演算要素管理部１５０は、子孫要素番号取得部１７３を用いて、更新要素の各子要素の演算要素番号を取得する。子孫要素番号取得部１７３は、更新要素の各子要素の演算要素番号を接続ビット列テーブル２３０（図６参照）から取得する。子孫要素番号取得部１７３が子要素の演算要素番号を取得する子孫要素番号取得処理については後述する。
以下、Ｓ１５２１で取得される演算要素番号の集合を更新要素の子要素集合という。
Ｓ１５２１の後、処理はＳ１５２２に進む。
【００５６】
Ｓ１５２２において、演算要素管理部１５０は、到達ビット列生成部１７２を用いて、更新要素の到達ビット列を生成する。到達ビット列生成部１７２は、更新要素の子要素集合と到達ビット列テーブル２４０（図７参照）とに基づいて、更新要素の到達ビット列を生成する。到達ビット列生成部１７２が到達ビット列を生成する到達ビット列生成処理については後述する。
Ｓ１５２２の後、処理はＳ１５２３に進む。
【００５７】
Ｓ１５２３において、演算要素管理部１５０は、演算要素ビット列登録部１７１を用いて、更新要素の到達ビット列を到達ビット列テーブル２４０（図７参照）に登録する。演算要素ビット列登録部１７１が到達ビット列を登録する演算要素ビット列登録処理については後述する。
Ｓ１５２３の後、処理はＳ１５３０に進む。
【００５８】
Ｓ１５３０において、演算要素管理部１５０は、親要素番号取得部１７４を用いて、更新要素の各親要素の演算要素番号を取得する。親要素番号取得部１７４は、更新要素の各親要素の演算要素番号を接続ビット列テーブル２３０（図６参照）から取得する。親要素番号取得部１７４が親要素の演算要素番号を取得する親要素番号取得処理については後述する。
以下、Ｓ１５３０で取得される演算要素番号の集合を更新要素の親要素集合という。
Ｓ１５３０の後、処理はＳ１５３１に進む。
【００５９】
Ｓ１５３１において、演算要素管理部１５０は、更新要素の親要素集合を更新要素集合に追加する。
Ｓ１５３１の後、処理はＳ１５３２に進む。
【００６０】
Ｓ１５３２において、演算要素管理部１５０は、Ｓ１５２０で選択していない未選択の更新要素番号があるか否かを判定する。
未選択の更新要素番号がある場合（ＹＥＳ）、処理はＳ１５２０に戻る。
未選択の更新要素番号がない場合（ＮＯ）、演算要素管理処理（Ｓ１５０）は終了する。
【００６１】
図１３は、実施の形態１における演算要素ビット列登録処理のフローチャートである。
実施の形態１における演算要素ビット列登録処理について、図１３に基づいて説明する。
演算要素ビット列登録処理はＳ１５１１（図１１参照）とＳ１５２３（図１２参照）で実行される。
Ｓ１５１１ではソース要素の接続ビット列が接続ビット列テーブル２３０に登録され、Ｓ１５２３では更新要素の到達ビット列が到達ビット列テーブル２４０に登録される。
図１３において、Ｓ１５１１のソース要素またはＳ１５２３の更新要素を対象要素といい、Ｓ１５１１の接続ビット列またはＳ１５２３の到達ビット列を対象ビット列という。また、Ｓ１５１１の接続ビット列テーブル２３０またはＳ１５２３の到達ビット列テーブル２４０を対象テーブルという。
【００６２】
Ｓ２１０において、演算要素ビット列登録部１７１は、対象ビット列のブロック長に基づいて、対象ビット列をブロック単位に分割する。
例えば、対象ビット列が１６ビットのビット列「００１０１１１００１１１１１１１」であり、対象ビット列のブロック長が８ビットである場合、演算要素ビット列登録部１７１は対象ビット列を２個のブロックビット列「００１０１１１０」「０１１１１１１１」に分割する。
Ｓ２１０の後、処理はＳ２１１に進む。
【００６３】
Ｓ２１１において、演算要素ビット列登録部１７１は、Ｓ２１０で得られた複数のブロックビット列から未選択のブロックビット列を一つ選択する。
以下、Ｓ２１１で選択されるブロックビット列を単にブロックビット列という。
Ｓ２１１の後、処理はＳ２１２に進む。
【００６４】
Ｓ２１２において、演算要素ビット列登録部１７１は、ブロックビット列の最終ビットのビット値が１であるか否かを判定する。
最終ビットのビット値が１である場合、演算要素ビット列登録部１７１はブロックビット列の各ビット値を反転する。
最終ビットのビット値が０である場合、演算要素ビット列登録部１７１はブロックビット列の各ビット値を反転しない。
これにより、ブロックビット列の最終ビットのビット値は０になる。
例えば、ブロックビット列「００１０１１１０」の最終ビットのビット値は０であるため、演算要素ビット列登録部１７１は、ブロックビット列の各ビット値を反転しない。
また、ブロックビット列「０１１１１１１１」の最終ビットのビット値は１であるため、演算要素ビット列登録部１７１はブロックビット列の各ビット値を反転する。各ビット値を反転後のブロックビット列は「１０００００００」である。
Ｓ２１２の後、処理はＳ２１３に進む。
【００６５】
Ｓ２１３において、演算要素ビット列登録部１７１は、ブロックビット列のうちのビット値が０（削除ビット値の一例）である後半部分（最終ビットを含む）をトリムする。つまり、演算要素ビット列登録部１７１は、ビット値が０である後半部分を削除する。但し、ビット値が１である後半部分を削除しても構わない。
例えば、演算要素ビット列登録部１７１は、ブロックビット列「００１０１１１０」の最終ビットをトリムする。トリム後のブロックビット列は「００１０１１１」である。
また、演算要素ビット列登録部１７１は、ブロックビット列「０１１１１１１１」の後半７ビットをトリムする。トリム後のブロックビット列は「１」である。
Ｓ２１３の後、処理はＳ２１４に進む。
【００６６】
Ｓ２１４において、演算要素ビット列登録部１７１は、対象要素の演算番号と、ブロックビット列のブロック番号と、ビット値の反転の有無を示す反転フラグと、ブロックビット列とを対象テーブルに登録する。対象テーブルは、接続ビット列テーブル２３０（図６参照）または到達ビット列テーブル２４０（図７参照）である。
Ｓ２１４の後、処理はＳ２１５に進む。
【００６７】
Ｓ２１５において、演算要素ビット列登録部１７１は、Ｓ２１１で選択していない未選択のブロックビット列があるか否かを判定する。
未選択のブロックビット列がある場合（ＹＥＳ）、処理はＳ２１１に戻る。
未選択のブロックビット列がＮい場合（ＮＯ）、演算要素ビット列登録処理は終了する。
【００６８】
図１４は、実施の形態１における到達ビット列生成処理のフローチャートである。
実施の形態１における到達ビット列生成処理について、図１４に基づいて説明する。
到達ビット列生成処理はＳ１５２２（図１２参照）で実行される。Ｓ１５２２では、更新要素の子要素集合に基づいて更新要素の到達ビット列が生成される。
図１４において、更新要素の子要素集合を対象要素集合といい、更新要素の子要素を対象要素といい、対象要素の演算要素番号を対象要素番号という。
【００６９】
Ｓ２２０において、到達ビット列生成部１７２は、対象要素集合から未選択の対象要素番号を一つ選択する。
以下、Ｓ２２０で選択される対象要素番号を単に対象要素番号という。また、Ｓ２２０で選択される対象要素番号によって識別される対象要素を単に対象要素という。
Ｓ２２０の後、処理はＳ２２１に進む。
【００７０】
Ｓ２２１において、到達ビット列生成部１７２は、対象要素番号と同じ演算要素番号に対応付けられた全てのブロックビット列を到達ビット列テーブル２４０（図７参照）から取得する。また、到達ビット列生成部１７２は、取得するブロックビット列毎にブロックビット列に対応付けられたブロック番号と反転フラグのフラグ値とを到達ビット列テーブル２４０から取得する。
Ｓ２２１の後、処理はＳ２２２に進む。
【００７１】
Ｓ２２２において、到達ビット列生成部１７２は、Ｓ２２１で取得された各ブロックビット列のビット値を以下のように復元する。
到達ビット列生成部１７２は、ブロックビット列毎にブロックビット列がブロック長と同じサイズになるようにブロックビット列の末尾にビット値が０であるビットを付加する。例えば、ブロック長が８ビットであり、ブロックビット列が「０００１１」である場合、到達ビット列生成部１７２はビット値が０である３ビットを付加してブロックビット列を「０００１１０００」にする。
到達ビット列生成部１７２は、ビット値が判定されているブロックビット列のビット値を判定する。このとき、到達ビット列生成部１７２はブロックビット列に対応付けられた反転フラグに基づいてビット値が判定しているか否かを判定する。
Ｓ２２２の後、処理はＳ２２３に進む。
【００７２】
Ｓ２２３において、到達ビット列生成部１７２は、Ｓ２２０で選択していない未選択の対象要素があるか否かを判定する。
未選択の対象要素がある場合（ＹＥＳ）、処理はＳ２２０に戻る。
未選択の対象要素がない場合（ＮＯ）、処理はＳ２２４に進む。
【００７３】
Ｓ２２４において、到達ビット列生成部１７２は、各対象要素のブロックビット列をブロック番号毎にグルーピングする。以下、グルーピングされた１つ以上のブロックビット列をブロックビット列グループという。
例えば、対象要素集合に含まれる対象要素が第一の演算要素および第二の演算要素である場合、到達ビット列生成部１７２は、第一の演算要素のｎ番目のブロックビット列と第二の演算要素のｎ番目のブロックビット列とをグルーピングする。
Ｓ２２４の後、処理はＳ２２５に進む。
【００７４】
Ｓ２２５において、到達ビット列生成部１７２は、ブロック番号毎にブロックビット列グループの論理和を算出する。
例えば、第一のブロックビット列「０００１１０００」と第二のブロックビット列「０００００１１１」がブロックビット列グループを構成する場合、ブロックビット列グループの論理和は「０００１１１１１」である。
Ｓ２２５の後、処理はＳ２２６に進む。
【００７５】
Ｓ２２６において、到達ビット列生成部１７２は、ブロック番号毎のブロックビット列グループの論理和をブロック番号順に並べる。ブロック番号順に並べたブロックビット列グループの論理和が対象要素の到達ビット列である。
Ｓ２２６の後、到達ビット列生成処理は終了する。
【００７６】
到達ビット列テーブル２４０がリレーショナルデータベースシステム（ＲＤＢＭＳ）を用いて管理されている場合、到達ビット列生成処理（図１４参照）のＳ２２０からＳ２２５は、リレーショナルデータベースシステムに以下のようなクエリを発行することによって実行されても構わない。
ＳＥＬＥＣＴ  ｂｉｔ＿ｏｒ（ビット列）
ＦＲＯＭ
（ＳＥＬＥＣＴ  演算要素ＩＤ，ブロック番号，到達可能ビット列
ＦＲＯＭ  到達可能関係記憶部
ＷＨＥＲＥ  ビット値フラグ  ＝  １
）ＡＳ  Ｔ１，
（ＳＥＬＥＣＴ  演算要素ＩＤ，ブロック番号，到達可能ビット列  ＃  Ｂ‘１１１１１１１１１’
ＦＲＯＭ  到達可能関係記憶部
ＷＨＥＲＥ  ビット値フラグ  ＝  ０
）ＡＳ  Ｔ２
ＧＲＯＵＰ  ＢＹ  ブロック番号
【００７７】
図１５は、実施の形態１における子孫要素番号取得処理のフローチャートである。
実施の形態１における子孫要素番号取得処理について、図１５に基づいて説明する。
子孫要素番号取得処理はＳ１３５（図１０参照）およびＳ１５２１（図１２参照）で実行される。Ｓ１３５ではターゲット要素の子孫要素集合が取得され、Ｓ１５２１では更新要素の子要素集合が取得される。
図１５において、Ｓ１３５のターゲット要素またはＳ１５２１の更新要素を対象要素といい、対象要素を識別する演算要素番号を対象要素番号という。
【００７８】
Ｓ２３０において、子孫要素番号取得部１７３は、対象要素のブロックビット列とブロック番号と反転フラグのフラグ値とを、接続ビット列テーブル２３０（図６参照）または到達ビット列テーブル２４０（図７参照）から取得する。対象要素番号と同じ演算要素番号に対応付けられたブロックビット列、ブロック番号および反転フラグのフラグ値が対象要素のブロックビット列、ブロック番号および反転フラグのフラグ値である。
例えば、Ｓ１３５で子孫要素集合を取得する場合、子孫要素番号取得部１７３は、対象要素のブロックビット列などを到達ビット列テーブル２４０（図７参照）から取得する。
また、Ｓ１５２１で子要素集合を取得する場合、子孫要素番号取得部１７３は、対象要素のブロックビット列などを接続ビット列テーブル２３０（図６参照）から取得する。
Ｓ２３０の後、処理はＳ２３１に進む。
【００７９】
Ｓ２３１において、子孫要素番号取得部１７３は、対象要素のブロックビット列のうち、ビット値が反転されているブロックビット列のビット値を反転する。ビット値が反転されているブロックビット列は、反転フラグ値を示す反転フラグに対応付けられたブロックビット列である。
Ｓ２３１の後、処理はＳ２３２に進む。
【００８０】
Ｓ２３２において、子孫要素番号取得部１７３は、対象要素のブロックビット列毎にブロックビット列から子孫要素のビット番号を取得し、子孫要素のブロック番号を取得する。
ビット値が１であるビットのビット番号が子孫要素のビット番号である。また、子孫要素のビット番号が取得されたブロックビット列のブロック番号が子要素のブロック番号である。
Ｓ２３２の後、処理はＳ２３３に進む。
【００８１】
Ｓ２３３において、子孫要素番号取得部１７３は、各子孫要素のブロック番号とビット番号とに基づいて、各子孫要素の演算要素番号を以下のように算出する。
演算要素番号＝（ブロック番号−１）×ブロック長＋ビット番号
例えば、ブロック番号が２であり、ブロック長が８であり、ビット番号が３である場合、対象要素の子孫要素の演算要素番号は１１（＝（２−１）×８＋３）である。
Ｓ２３３で算出される１つ以上の演算要素番号が子孫要素集合または子要素集合である。
Ｓ２３３の後、子孫要素番号取得処理は終了する。
【００８２】
図１６は、実施の形態１における親要素番号取得処理のフローチャートである。
実施の形態１における親要素番号取得処理について、図１６に基づいて説明する。
親要素番号取得処理はＳ１５３０（図１２参照）で実行される。Ｓ１５３０では更新要素の親要素集合が取得される。
図１６において、Ｓ１５３０の更新要素を対象要素といい、対象要素を識別する演算要素番号を対象要素番号という。
【００８３】
Ｓ２４０において、親要素番号取得部１７４は、演算要素管理テーブル２２０（図５参照）から対象要素のブロック番号およびビット番号を取得する。対象要素番号と同じ演算要素番号に対応付けられたブロックブロック番号およびビット番号が、対象要素のブロック番号およびビット番号である。このとき、演算要素管理部１５０が親要素番号取得部１７４の代わりに対象要素のブロック番号およびビット番号を取得してもよい。
Ｓ２４０の後、処理はＳ２４１に進む。
【００８４】
Ｓ２４１において、親要素番号取得部１７４は、演算要素毎に対象要素のブロック番号と同じブロック番号に対応付けられたブロックビット列を接続ビット列テーブル２３０（図６参照）から取得する。
Ｓ２４１の後、処理はＳ２４２に進む。
【００８５】
Ｓ２４２において、親要素番号取得部１７４は、各演算要素のブロックビット列のうち、ビット値が反転されているブロックビット列のビット値を反転する。ビット値が反転されているブロックビット列は、反転フラグ値を示す反転フラグに対応付けられたブロックビット列である。
Ｓ２４２の後、処理はＳ２４３に進む。
【００８６】
Ｓ２４３において、親要素番号取得部１７４は、各演算要素のブロックビット列のうち、対象要素のビット番号によって識別されるビットのビット値が１であるブロックビット列を選択する。
Ｓ２４３の後、処理はＳ２４４に進む。
【００８７】
Ｓ２４４において、親要素番号取得部１７４は、Ｓ２４３で選択されたブロックビット列に対応付けられた演算要素番号を接続ビット列テーブル２３０から取得する。
Ｓ２４４で取得される演算要素番号が対象要素の親要素番号である。
Ｓ２４４の後、親要素番号取得処理は終了する。
【００８８】
Ｓ２４１からＳ２４４は、各対象要素のブロックビット列に対して正規表現を用いて実現することができる。例えば、Ｐｏｓｔｇｒｅｓのデータベースを用いる場合のｌｉｋｅ式には‘＿１＿＿＿＿％’のように表記する。この例では、２ビット目が１であるブロックビット列を選択する正規表現を示している。そして、このような正規表現を適用してデータベースに問い合わせ、結果として演算要素番号を取得する。
【００８９】
図１７は、実施の形態１における多階層計算式管理装置１００のハードウェア構成の一例を示す図である。
実施の形態１における多階層計算式管理装置１００のハードウェア構成の一例について、図１７に基づいて説明する。但し、多階層計算式管理装置１００のハードウェア構成は図１７に示す構成と異なる構成であってもよい。
【００９０】
多階層計算式管理装置１００は、演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５を備えるコンピュータである。
演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５はバス９０９に接続している。
【００９１】
演算装置９０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
補助記憶装置９０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリまたはハードディスク装置である。
主記憶装置９０３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、有線または無線でインターネット、ＬＡＮ（ローカルエリアネットワーク）、電話回線網またはその他のネットワークを介して通信を行う。
入出力装置９０５は、例えば、マウス、キーボード、ディスプレイ装置である。
【００９２】
プログラムは、通常は補助記憶装置９０２に記憶されており、主記憶装置９０３にロードされ、演算装置９０１に読み込まれ、演算装置９０１によって実行される。
例えば、オペレーティングシステム（ＯＳ）が補助記憶装置９０２に記憶される。また、「〜部」として説明している機能を実現するプログラムが補助記憶装置９０２に記憶される。そして、ＯＳおよび「〜部」として説明している機能を実現するプログラムは主記憶装置９０３にロードされ、演算装置９０１によって実行される。「〜部」は「〜処理」「〜工程」と読み替えることができる。
【００９３】
「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等の処理の結果を示す情報、データ、ファイル、信号値または変数値が主記憶装置９０３または補助記憶装置９０２に記憶される。また、多階層計算式管理装置１００が使用するその他のデータが主記憶装置９０３または補助記憶装置９０２に記憶される。
【００９４】
実施の形態１において、例えば、以下のような多階層計算式管理装置１００について説明した。
多階層計算式管理装置１００は、整合性の検証を短時間で実行するために必要な到達可能関係および接続関係をブロック化したビット列を用いて管理している。さらに、多階層計算式管理装置１００は、必要な範囲のビット列に対してビット列を反転およびトリムしている。さらに、多階層計算式管理装置１００は、計算式が修正された場合でも、変更の影響が無い下位の到達可能関係を用いた単純なビット列の論理演算によって、到達可能関係を更新する。
実施の形態１は、例えば、以下のような効果を奏する。
計算式が多階層、かつ、大規模になった場合でも、多階層計算式管理装置１００はデータ量を削減し、演算の関係性を管理することができる。また、多階層計算式管理装置１００は、関係性をブロック化したビット列を用いて管理しているので、到達可能関係または接続関係を検索し、更新箇所を限定し、整合性検証および更新にかかる時間を短縮することができる。
また、多階層計算式管理装置１００は、ビット演算の組み合わせによって到達可能行列の検索および更新を行うため、高速に演算することができる。
【００９５】
実施の形態１は、多階層計算式管理装置１００の形態の一例である。
つまり、多階層計算式管理装置１００は、実施の形態１で説明した構成要素の一部を備えなくても構わない。また、多階層計算式管理装置１００は、実施の形態１で説明していない構成要素を備えても構わない。
実施の形態１に係る方法およびプログラムは、実施の形態１においてフローチャート等を用いて説明した処理手順と一部異なる処理手順で実現されても構わない。
【符号の説明】
【００９６】
１００  多階層計算式管理装置、１０１  入力計算式、１１０  計算式入力部、１２０  計算式要素取得部、１３０  整合性検証部、１４０  計算式管理部、１５０  演算要素管理部、１６０  計算式出力部、１７０  演算要素ビット列管理部、１７１  演算要素ビット列登録部、１７２  到達ビット列生成部、１７３  子孫要素番号取得部、１７４  親要素番号取得部、１９０  計算式記憶部、２１０  計算式テーブル、２２０  演算要素管理テーブル、２３０  接続ビット列テーブル、２４０  到達ビット列テーブル、１６１  階層図、１６２  接続ビット列、１６３  到達ビット列、９０１  演算装置、９０２  補助記憶装置、９０３  主記憶装置、９０４  通信装置、９０５  入出力装置、９０９  バス。
【図１】
2015108991.tif 000003
【図２】
2015108991.tif 000004
【図３】
2015108991.tif 000005
【図４】
2015108991.tif 000006
【図５】
2015108991.tif 000007
【図６】
2015108991.tif 000008
【図７】
2015108991.tif 000009
【図８】
2015108991.tif 000010
【図９】
2015108991.tif 000011
【図１０】
2015108991.tif 000012
【図１１】
2015108991.tif 000013
【図１２】
2015108991.tif 000014
【図１３】
2015108991.tif 000015
【図１４】
2015108991.tif 000016
【図１５】
2015108991.tif 000017
【図１６】
2015108991.tif 000018
【図１７】
2015108991.tif 000019