述語記号に対応し所定の順序で並べられた複数の列と前記複数の列のいずれかの位置に配置されるセルを含む行とにより構成される表であり各セルにはそのセルの位置する列に対応する述語記号に適用することにより論理式を形成する値が格納されている表、に対応付けられるグラフデータ構造を有するルールベースであり、メモリ空間に配置されるルートノードと、前記表の各行における複数のセルの並びに対応して前記メモリ空間に前記列の順序にてポインタにより直列に接続される複数のノードの各並びと、を有し、前記複数のノードの各並びの端のノードをポインタにより前記ルートノードに接続し、前記ルートノードから前記ノードを、ポインタをたどって順に読み出し走査可能とし、前記表の各行は、複数の論理式を論理積として右辺に並べ他の論理式を右辺に並べたルールを表すことを特徴とする、グラフデータ構造を有するルールベースと、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得する情報取得部と、前記情報取得部により取得された情報により、前記ルールいずれかの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査し、前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記情報取得部により取得された情報により、前記ルールの全ての右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出する推論部とを有する推論装置。前記表の隣接する行において同じ列の位置に配置されるセルが格納する値が同じ値であれば、前記同じ値を格納する前記セルが統合されていることを特徴とする請求項1に記載の推論装置。前記複数のルールに並ぶ論理式の述語記号を順に左から右に並ぶ列名とし、各行を各ルールに対応付けて対応する列に前記各ルールに並ぶ論理式が有する定数を並べた表を作成した場合、最も右に並ぶ列を除き、各列に格納される値の種類の数は、その右隣の列の値の種類の数以下となることを特徴とする請求項1記載の推論装置。述語記号に対応し所定の順序で並べられた複数の列と前記複数の列のいずれかの位置に配置されるセルを含む行とにより構成される表であり各セルにはそのセルの位置する列に対応する述語記号に適用することにより論理式を形成する値が格納されている表、に対応付けられるグラフデータ構造を有するルールベースであり、メモリ空間に配置されるルートノードと、前記表の各行における複数のセルの並びに対応して前記メモリ空間に前記列の順序にてポインタにより直列に接続される複数のノードの各並びと、を有し、前記複数のノードの各並びの端のノードをポインタにより前記ルートノードに接続し、前記ルートノードから前記ノードを、ポインタをたどって順に読み出し走査可能とし、前記表の各行は、複数の論理式を論理積として右辺に並べ他の論理式を右辺に並べたルールを表すことを特徴とする、グラフデータ構造により記憶されるルールベースを参照するコンピュータが実行する推論方法であり、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得しメモリに記憶し、前記取得された情報により、前記ルールいずれかの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査して前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記取得された情報により、前記ルールの全ての右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出することを含む推論方法。複数の論理式を論理積として左辺に並べ他の論理式を右辺に並べた複数のルールを、それぞれのルールに関して、ルールに並ぶ論理式を表すノードを直列に接続し列の両端のノードをルートノードに接続したグラフデータ構造により、記憶するルールベースと、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得する情報取得部と、前記情報取得部により取得された情報により、前記複数のルールいずれかのルールの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査し、前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記情報取得部により取得された情報により、前記複数のルールの全てのルールの右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出する推論部とを有する推論装置。前記複数のルールそれぞれの右辺に並ぶ論理式の中に同じ論理式があれば、前記グラフデータ構造において前記同じ論理式を表すノードがマージされていることを特徴とする請求項5に記載の推論装置。前記複数のルールそれぞれの左辺に並ぶ論理式を表すノードのうち前記ルートノードから等しい距離にあるノードの表す論理式の述語記号が同じであることを特徴とする請求項5に記載の推論装置。前記複数のルールに並ぶ論理式の述語記号を順に左から右に並ぶ列名とし、各行を各ルールに対応付けて対応する列に前記各ルールに並ぶ論理式が有する定数を並べた表を作成した場合、最も右に並ぶ列を除き、各列に格納される値の種類の数は、その右隣の列の値の種類の数以下となることを特徴とする請求項7に記載の推論装置。前記複数のルールそれぞれの左辺に並ぶ論理式を表すノードそれぞれに直接接続されるノードの表す論理式が同じであれば、その同じ論理式を表すノードが前記グラフデータ構造においてマージされていることを特徴とする請求項7に記載の推論装置。複数の論理式を論理積として左辺に並べ他の論理式を右辺に並べた複数のルールを、それぞれのルールに関して、ルールに並ぶ論理式を表すノードを直列に接続し列の両端のノードをルートノードに接続したグラフデータ構造により、記憶するルールベースを参照するコンピュータが実行する推論方法であり、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得しメモリに記憶し、前記取得された情報により、前記複数のルールいずれかのルールの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査して前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記取得された情報により、前記複数のルールの全てのルールの右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出することを含む推論方法。述語記号に対応し所定の順序で並べられた複数の列と前記複数の列のいずれかの位置に配置されるセルを含む行とにより構成される表であり各セルにはそのセルの位置する列に対応する述語記号に適用する値が格納されている表、に対応付けられるグラフデータ構造を有するルールベースであり、メモリ空間に配置されるルートノードと、前記表の各行における複数のセルの並びに対応して前記メモリ空間に前記列の順序にてポインタにより直列に接続される複数のノードの各並びと、を有し、前記複数のノードの各並びの端のノードをポインタにより前記ルートノードに接続し、計算機に前記ルートノードから前記ノードを、ポインタをたどって順に読み出し可能とすることを特徴とする、グラフデータ構造を有するルールベース。前記表の隣接する行において同じ列の位置に配置されるセルが格納する値が同じ値であれば、前記同じ値を格納する前記セルが統合されていることを特徴とする請求項11に記載の、グラフデータ構造を有するルールベース。列の位置に配置されるセルに格納される値の種類が少ないほどその列は前記順序の最初の方に位置することを特徴とする請求項11または12に記載の、グラフデータ構造を有するルールベース。従来のルールエンジンにおいてはルールベースに格納されるルールは、木構造として表現されていた。このため、木構造のルートからリーフに向かう方向の推論は高速に行なえるが、逆方向の推論を行なうことは不可能であるか、行なえたとしても効率が悪くなっていた。そこで、与えられた条件から結論を導くこと及び期待される結論を得るための条件を得ることの両方を効率良く行なえる推論装置について開示を行なう。すなわち、本発明の一実施形態として、複数の論理式を論理積として左辺に並べ他の論理式を右辺に並べた複数のルールを、それぞれのルールに関して、ルールに並ぶ論理式を表すノードを直列に接続し列の両端のノードをルートノードに接続したグラフデータ構造により、記憶するルールベースと、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得する情報取得部と、前記情報取得部により取得された情報により、前記複数のルールのいずれかのルールの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査し、前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記情報取得部により取得された情報により、前記複数のルールの全てのルールの右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出する推論部とを有する推論装置を提供する。また、本発明の一実施形態として、述語記号に対応し所定の順序で並べられた複数の列と前記複数の列のいずれかの位置に配置されるセルを含む行とにより構成される表であり各セルにはそのセルの位置する列に対応する述語記号に適用することにより論理式を形成する値が格納されている表、に対応付けられるグラフデータ構造を有するルールベースであり、メモリ空間に配置されるルートノードと、前記表の各行における複数のセルの並びに対応して前記メモリ空間に前記列の順序にてポインタにより直列に接続される複数のノードの各並びと、を有し、前記複数のノードの各並びの端のノードをポインタにより前記ルートノードに接続し、前記ルートノードから前記ノードを、ポインタをたどって順に読み出し走査可能とし、前記表の各行は、複数の論理式を論理積として右辺に並べ他の論理式を右辺に並べたルールを表すことを特徴とする、グラフデータ構造を有するルールベースと、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得する情報取得部と、前記情報取得部により取得された情報により、前記ルールいずれかの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査し、前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記情報取得部により取得された情報により、前記ルールの全ての右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出する推論部とを有する推論装置を提供する。また、本発明の一実施形態として、複数の論理式を論理積として左辺に並べ他の論理式を右辺に並べた複数のルールを、それぞれのルールに関して、ルールに並ぶ論理式を表すノードを直列に接続し列の両端のノードをルートノードに接続したグラフデータ構造により、記憶するルールベースを参照するコンピュータが実行する推論方法であり、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得しメモリに記憶し、前記取得された情報により、前記複数のルールのいずれかのルールの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査して前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記取得された情報により、前記複数のルールの全てのルールの右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出することを含む推論方法を提供する。また、本発明の一実施形態として、述語記号に対応し所定の順序で並べられた複数の列と前記複数の列のいずれかの位置に配置されるセルを含む行とにより構成される表であり各セルにはそのセルの位置する列に対応する述語記号に適用することにより論理式を形成する値が格納されている表、に対応付けられるグラフデータ構造を有するルールベースであり、メモリ空間に配置されるルートノードと、前記表の各行における複数のセルの並びに対応して前記メモリ空間に前記列の順序にてポインタにより直列に接続される複数のノードの各並びと、を有し、前記複数のノードの各並びの端のノードをポインタにより前記ルートノードに接続し、前記ルートノードから前記ノードを、ポインタをたどって順に読み出し走査可能とし、前記表の各行は、複数の論理式を論理積として右辺に並べ他の論理式を右辺に並べたルールを表すことを特徴とする、グラフデータ構造により記憶されるルールベースを参照するコンピュータが実行する推論方法であり、複数の入力領域に入力された情報であり前記論理式の真偽を判定するための情報を取得しメモリに記憶し、前記取得された情報により、前記ルールいずれかの右辺の論理式が真と判定されると、前記真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査して前記真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出し、前記取得された情報により、前記ルールの全ての右辺の論理式の真偽が不定であると判定されると、前記直列に接続されたノードを走査し、前記複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出することを含む推論方法を提供する。また、本発明の一実施形態として、述語記号に対応し所定の順序で並べられた複数の列と前記複数の列のいずれかの位置に配置されるセルを含む行とにより構成される表であり各セルにはそのセルの位置する列に対応する述語記号に適用する値が格納されている表、に対応付けられるグラフデータ構造を有するルールベースであり、メモリ空間に配置されるルートノードと、前記表の各行における複数のセルの並びに対応して前記メモリ空間に前記列の順序にてポインタにより直列に接続される複数のノードの各並びと、を有し、前記複数のノードの各並びの端のノードをポインタにより前記ルートノードに接続し、計算機に前記ルートノードから前記ノードを、ポインタをたどって順に読み出し可能とすることを特徴とする、グラフデータ構造を有するルールベースを提供する。本発明の一実施形態によれば、与えられた条件から結論を導くこと及び期待される結論を得るための条件を得ることを行なえる推論装置が提供できる。また、ルールベースにおけるルールの表現において、共通するノードを統合マージすることにより、ルールベースに必要な記憶領域を削減し、また、推論を効率的に行なうことができる。以下、本発明を実施するための形態を以下に説明する。なお本発明は以下の説明に限定されることはなく、種々に変形して実施することができる。構成図1は、本発明の一実施形態に係る推論システムの機能ブロック図を示す。推論システム100は、推論装置101と、入力装置102と、出力装置103とを備える。入力装置102は、ユーザの操作の結果や他の装置の動作の結果として生成されるデータを推論装置101に入力し、出力装置103は、推論装置101による推論の結果を受信しディスプレイに表示などをして出力する。このような推論システムの例としては次のようなものがある。入力装置102のディスプレイには、電子的な申請を行なうためのフォームが表示され、ユーザがそのフォームに入力を行ない、入力の結果を推論装置101に送信する。推論装置101は、フォームへの入力が正しいかどうかを推論し、その推論の結果を出力装置103に送信し、出力装置103が推論の結果を表示する。なお、本発明の一実施形態においては、入力装置102と出力装置103とは別個の装置となっている必要はなく、同一の装置が、入力装置102の機能と出力装置103の機能とを有していてもよい。例えば、入力装置102のディスプレイに表示されるウィンドウの一部が出力装置103に対応していてもよい。なお、電子的な申請には、確定申告などの電子申請、インターネットを用いる特許出願など、大学の履修科目の電子提出などがある。特に、本実施形態に係る推論システムの推論装置101は、後に説明するように後ろ向き推論も行なうことができる。このため、例えば大学の履修科目の提出においては、入力装置102から推論装置101に、学生の既に履修した科目と単位数の情報を入力し、大学の卒業要件を表す規則を格納したルールベースを有する推論装置101が卒業要件を満たすためには、今後どの科目を履修すればよいのかを推論し、その結果を出力装置103に出力するようにすることもできる。また、銀行の窓口業務においては、来店者から様々な要望が提示される場合が多い。例えば、紛失した預金通帳の再発行を依頼したい、届出印の変更を依頼したいなどの要望が提示される。そこで、入力装置102から入力された顧客の要望と、顧客の取引状況、顧客が現時点において提示できる身分確認書類などの情報から、銀行の規則を格納したルールベースを有する推論装置101が、顧客の要望がかなえられるか、もしかなえられない場合には、要望をかなえるために何を行なえばよいかを推論し、出力装置103に出力することもできる。また、入力装置102と出力装置103とにより、電子化された申請書などを規則にしたがって配信するワークフローシステムを構成し、申請書などの配信先を決定するために、ワークフローシステムから申請書などの内容が推論装置101に送信され、ワークフローの規則を格納したルールベースを有する推論装置101による推論の結果得られる配信先などの情報がワークフローシステムに送信されるようになっていてもよい。このような構成により、規則とプログラム処理のロジックとを分離することができ、規則が変更になってもその変更は推論装置の有するルールベースの記憶内容の変更となるが、システム全体に改修などの変更が波及することを防止することができる。以下、推論装置101の構成について説明する。推論装置101は、ルールベース110と、次ノード取得部111と、真偽判定部112と、情報取得部113と、推論部114とを有する。ルールベース110は、1または複数の規則ルールを表すデータ構造を記憶する。ルールベース110は、記憶装置を有し、記憶装置にデータ構造が記憶される。ルールは、F1F2...Fn⊃Gのようなプロダクションルールの形式により表現がされる。すなわち⊃の左辺に、1又はにより結合された複数の論理式F1-Fnの論理式が並び、⊃の右辺に論理式Gが並ぶルールが用いられる。このようなルールは、⊃の左辺に配置された論理式F1-Fnの全てが真であれば、⊃の右辺に配置された論理式Gが真となることを意味する。また、別の側面においては、⊃の右辺に配置された論理式Gが真となるには、⊃の左辺に配置された論理式F1-Fnの全てが真となることが必要であることを意味する。論理式は、原子式であってもよい。例えば、x=vのような変数xの値が定数vであることを表す等式の原子式やx≦vやx≧vなどの不等式の原子式であってもよい。また、パスポートを持っているを表すHaveパスポートのようにパスポートという定数が含まれ、パスポートにHaveという述語記号を適用した形式であってもよい。x=vという等式やx≦vやx≧vなどの不等式においては、一般には、=、≦および≧などが述語記号であると考えることもできるが、本実施形態においては、変数を含む等式および不等式においては、変数名を述語記号とみなして扱う場合がある。また、A⊃BおよびA⊃Cのように、⊃の左辺が同じであるが右辺が異なるルールが複数ある場合これらのルールをまとめて例えばA⊃B^Cのように、⊃の左辺が^により結合された論理式となっていてもよい。図2は、m個のルールの例を示す。図2において、A1、A2、...、An、Bは、述語記号を表し、a11、a12、...、a1n、a21、a22、...、a2n、am1、am2、...、amn、b1、b2、...、bmは述語記号に適用される定数を表す。定数が述語記号に適用されることにより、論理式が形成される。ここにa11などの表す定数は、単一の値により構成されるスカラー値に限定されず、複数の値により構成されていてもよい。例えばベクトル値となっていてもよい。また、a11、a12、...、a1n、a21、a22、...、a2n、am1、am2、...、amn、b1、b2、...、bmの中には同じ定数が複数回現れてもよい。なお、より一般的には、⊃の左辺に並ぶ述語記号の順序はルール毎に異なっていてもよい。このように、⊃の左辺に並ぶ述語の順序がルール毎に異なっている場合には、述語を並び換えて全てのルールにおいて同じ順序で述語記号が並ぶようにしてもよい。また、それぞれのルールの左辺に並ぶ述語記号の全体は、ルールごとに異なっていてもよい。この場合には、全ての述語に対して、特殊な定数-例えば-を適用すると真であるとみなす。そして、あるルールR1の⊃の左辺には述語記号Pが無く、他のルールR2の⊃の左辺には述語記号Pが現れる場合には、R1の左辺にPを加える操作を行なうことにより、⊃の左辺に並ぶ述語記号を、全てのルールにおいて、同じとすることができる。図3は、図2に示すルールの集まりの解釈のための表の一例を示す。図2におけるルールに現れる述語記号A1、A2、...、An、Bは、図3に示す表における列の名前に対応している。列は、A1、A2、...、An、Bの順序で並べられている。そして、図3の表において、1行目は、例えば、列A1の値がa11であり、かつ、列A2の値がa12であり、かつ、...、かつ、列Anの値がa1nであれば、列Bの値はb1となることを表すセルを有する。そこで、例えば、表の各セルを、列の名前に対応する変数の値がセルに格納されている値に等しいことを表していると解釈する。また、一行の最も右に位置するセルはルールの⊃の右辺に対応させ、その他のセルは⊃の左辺に対応させ、⊃の左辺に対応するセルは、^により結合されていると解釈する。したがって、図3において、表の一行目は、A1a11^A2a12^...^Ana1n⊃Bb1というルールに対応している。他の行についても同様である。このような表を用いることにより、ルールを表の形式により人間にとって分かりやすく表現することができる。また、各ルールにおいて述語記号の並び方が同じであるので、このような表の形式によりルールの集まりを表現できることになる。また、セルに格納される値の表現を拡張し、各セルに不等号と値とを格納することにより、列に対応する変数の値とセルに格納されている値との大小関係を示す不等式を表しているとすることもできる。例えば、Anの列のセルに>1が、例えば文字列により、格納されていれば、そのセルはAn>1という不等式を表しているとすることもできる。さらに、例えば>1<10が格納されていれば、An>1かつAn<10という不等式を表しているとすることもできる。図4は、図3に示す表の具体例を示す。図4の表は、企業などの組織における稟議書の要否を表している。即ち、稟議書の対象の種類を表す稟議種類と、申請者の役職と、稟議書の対象の金額と、稟議書要否との関係を示している。例えば、図4に示す表の1行目は、物品購入、アシスタント、および必要という定数を格納するセルがこの順に並んでいるので、稟議種類が物品購入であり、かつ、役職がアシスタントであれば、稟議書は必要であるというルールを表す。すなわち、稟議書=物品購入^役職=アシスタント⊃稟議書要否=必要というルールを表す。なお、は上述したような特殊な値であり、金額=は真であるとみなすことにすれば、稟議書=物品購入^役職=アシスタント^金額=⊃稟議書要否=必要というルールを表していると解釈することができる。また、図4に示す表の2行目は、稟議種類=物品購入役職=マネージャ金額≦1000ドル⊃稟議書要否=不要というルールを表している。したがって、各行は、左辺に現れる変数が稟議種類、役職および金額の3つであり、右辺に現れる変数が稟議書要否であるルールを表していることとなり、ルール間で、現れる変数を同じにすることができる。なお、表計算ソフトウェアを用いれば、表の取扱を容易とすることができる。このため、表計算ソフトウェアを用いて表を作成することによりルールの作成を容易に行なうことができる。また、表計算ソフトウェアの一部には、表を表すデータを格納する際には、XMLeXtensibleMark-upLanguageにより表現されるデータとして格納する。このように表を表すデータがXMLを用いて表現される場合には、表のデータは表計算ソフトウェアのみならず、広い範囲に属するソフトウェアにより処理することが可能である。したがって、ルールの集合を表計算ソフトウェアにより作成し、作成したルールを、XMLを用いた表現に変換することができる。変換されたXMLを用いた表現は、推論装置101などにより読み込まれ、ルールベースに記憶されるデータ構造を生成することができる。また、XMLを用いた表現を、後に説明するようなセルのマージ、列の並び換えの処理を行なってから、ルールベースに記憶されるデータ構造を生成してもよい。図5は、図2に示されるルールを表すデータ構造を示す模式図である。したがって、図5に示す模式図は、図3に示す表に対応するデータ構造を示す。なお、ルールベース110に、このようなデータ構造がメモリなどに記憶されることにより、ルールが記憶される。図5に示す模式図で表されるデータ構造がルールベース110に記憶される。ルールを表すデータ構造は、ルートノード501を含む。ルートノード501は、全てのルールに対して共通して存在する。また、ルートノード501は、各ルールの⊃の左辺の一番左端の論理式を表現するノードにエッジにより接続される。また、ルートノード501は、各ルールの⊃の右辺の論理式を表現するノードにエッジにより接続される。各ルールは、⊃の左辺の論理式を表現するノードと⊃の右辺の論理式を表現するノードとをエッジにより直列に接続したデータ構造により表すことができる。また、ノードの順序は、例えば表3の列の並びの順序に対応している。このような直列に接続されたノードの両端のノードがルートノード501に接続される。例えば、図2に示されるルールのうち、A1a11A2a12...Ana1n⊃Bb1は、A1a11を表現するするノード502とA2a12を表現するノード505と...Ana1nを表現するノード506とBb1を表現するノード507をエッジにより直列に接続されたデータ構造により表すことができる。他のルールについても同様である。そして、各ルールの⊃の最も左に位置する論理式を表現するノード502、503、...、504がルートノード501にエッジにより接続され、⊃の右辺の論理式を表現するノード507、508、...、509がルートノード501にエッジにより接続される。すなわち、ルールベース110に記憶されるデータ構造は、それぞれルールに並ぶ論理式を表すノードを直列に接続して各ルールに対応するノードの列を形成し、各列の両端のノードをルートノードに接続したグラフデータ構造となっている。また、一つのエッジの両端のノードは、直接に接続されていると記載する場合がある。なお、本実施形態においては、ノードを接続するエッジは方向を有すると考えることもできる。すなわち、ノードとエッジにより有向グラフが形成されると考えることもできる。エッジが方向を有する理由の一つは、⊃の左辺の論理式が真であれば右辺の論理式が真となるという⊃の方向性に対応させるためである。そこで、図5において、エッジの始点を表すためにの記号が用いられ、エッジの終点を表すために-の記号が付されている。これにより、例えばノード502、505、...506、507のどれが⊃の右辺の論理式を表現するノードであり、したがって、どれが⊃の左辺の論理式を表現するノードであるかを判別することができる。すなわち、ルートノードを終点とするエッジの始点のノードが、⊃の右辺の論理式を表現するノードであり、その他のノードルートノードを除くが⊃の左辺の論理式を表現するノードである。本実施形態においては、各ルールの⊃の左辺の論理式を表現する任意のノードを終点とするエッジは1本である。この性質により、本発明の一実施形態においては、期待される結論を得るための後ろ向き推論を効率良く行なえる。また、全てのルールにおいて同じ順序で述語記号が並ぶ順序が同じであるので、ルートノードから距離が同じノードが表現する論理式の述語記号は同一となる。これにより、ルールの集まりを表として表現することが可能となる。ここに、あるノードから別のノードへの距離とは、あるノードと別のノードとの間のエッジの数をいう。例えば、ルートノード501からノード502の距離は1であり、ルートノード501からノード505の距離は2となる。また、ルートノード501を一つ用意する代わりに、次のようにしてもよい。すなわち、⊃の左辺のうち最も左の論理式を表現するノードに接続する第1のノードと、⊃の右辺の論理式を表現するノードに接続する第2のノードとを用意してもよい。すなわち、各列の左端のノードに直接接続される第1のノードと、各列の右端のノードに直接接続される第2のノードとを用意してもよい。以下では、ルートノード501を一つ用意する場合について説明するが、第1のノードと第2のノードとを用意する場合についても容易に理解される。図6aは、図5に示すデータ構造において、ルートノード501を始点または終点とするエッジを表すデータ構造の模式図である。図6aにおいて、の右側には、始点がルートノード501となるエッジの終点のノードを示す情報が格納され、-の右側には、終点がルートノード501となるエッジの始点のノードを示す情報が格納されている。ノードを示す情報としては、例えばノードに対応するデータ構造が記憶されているアドレスを指し示すポインタを用いることができる。このように図6aに示される模式図に相当する情報がルールベース110の記憶装置のメモリ空間に格納される。図6bは、図5に示すデータ構造において論理式Aiajkを表現するノードを始点または終点とするエッジを表すデータ構造の模式図である。図6bにおいて、の右側には、論理式Aiajkを表現するノードが始点となるエッジの終点ノードを示す情報が格納され、-の右側には、論理式Aiajkを表現するノードが終点となるエッジの始点のノードを示す情報が格納される。次ノード取得部111は、ノードが指定された場合に、指定されたノードにエッジにより接続されている他のノードをルールベース110から取得する。本実施形態では、エッジは方向を有するので、次ノード取得部111は、2つのモードを有する。1つのモードでは、指定されたノードを始点とするエッジの終点となっているノードを取得し、別のモードでは、指定されたノードを終点とするエッジの始点となっているノードを取得する。なお、ノードは、例えばルールベース110において記憶されているアドレスで指定される。なお、指定されたノードがルートノードである場合には、ルートノードとエッジにより接続されているノードは、複数となる。このため、次ノード取得部111は、複数のノードを取得する場合がある。したがって、指定されたノードが、ルートノード501であり、モードが、指定されたノードを始点とするエッジの終点となっているノードを取得するモードとなっている場合には、次ノード取得部111は、ノード502、ノード503、...、ノード504を取得する。情報取得部113は、入力装置102により入力された情報を、入力装置102より取得する。図7は、入力装置102の有するディスプレイなどに表示される情報の入力画面の一例を示す。図7においては、ディスプレイにウィンドウ701が表示され、ウィンドウ701に、テキストエリアなどの入力領域702、703、704が表示される。それぞれの入力領域の左側には、稟議種類、役職、金額、稟議書要否の文字列が表示されている。これにより、例えば、テキストエリア702には、稟議種類の定数に対応する値を入力することが示される。図7においては、稟議種類の値として出張、役職の値としてアシスタント、金額の値として516ドルが入力されている。稟議書種類の値は入力されていない。これは、稟議種類、役職および金額の値から稟議書要否を判断することを推論装置101に要求することを意味する。すなわち、この場合には、前向き推論が行なわれる。なお、テキストエリアを用いてテキストが入力されるかわりに、プルダウンメニューなどを用いて選択された値が入力されるようになっていてもよい。本発明の一実施形態においては、一般的に、⊃の右辺の論理式についての値が入力されていない場合には、前向き推論が行なわれる。また、⊃の右辺の論理式についての値が入力されている場合には、後ろ向き推論が行なわれる。情報取得部113は、入力装置102による入力された値を表す情報を入力装置102より取得した後、その情報を推論装置101のメモリなどの記憶装置に格納する。例えば、稟議種類に対応して指定されたメモリアドレスなどに出張を表す定数記号を記憶する。真偽判定部112は、ノードが指定された場合に、指定されたノードに対応する論理式の真偽を判定する。論理式の真偽の判定には、情報取得部113により推論装置101のメモリなどの記憶装置に記憶された情報が参照される。例えば、指定されたノードが稟議種類=出張に対応する場合、推論装置101のメモリなどの記憶装置における稟議種類に対応するメモリアドレスなどに出張を表す情報が記憶されていれば、真であると判定し、物品購入を表す情報が記憶されていれば、偽であると判定する。また、推論装置101のメモリなどの記憶装置における稟議種類に対応するメモリアドレスなどに情報が記憶されていなければ、真偽が判定できないことを示す不定であることを判定してもよい。推論部114は、情報取得部113により推論装置101のメモリなどの記憶装置に記憶された情報およびルールベース110に記憶されているルールを表すデータ構造を参照して推論を行なう。また、推論の結果を出力装置103に出力する。例えば、図7に示す入力が行なわれた場合には、推論部114は稟議書要否=必要を推論する。そこで、テキストエリア705に稟議書が必要であることを示す値を表示するための結果を出力装置103に送信する。前向き推論推論部114が推論を行なう際の処理の一例について以下説明する。ここでは、与えられた条件から結論を導く推論、すなわち前向き推論、について説明する。以下の説明では、スタックを用い、いわゆる深さ優先depthfirstの探索で推論を行なう処理の一例を説明する。スタックとは、ノードあるいはノードへのポインタなどのノードを表す情報を後入れ先出しLastInFirstOutで記憶する構造である。図8にスタックの一例を示す。図8においては、スタック800の下から順に1番目のスロット801、2番目のスロット802、...、n番目のスロット803がある。スロット801、802、803には、それぞれ、論理式Acade、Agaki、Ajalmを表現するノードの情報例えばノードのアドレスが格納されている。この状態で新たにノードの情報をスタックに入れると、その情報は、n1番目のスロットに記憶される。すなわち、一番上のスロットが用意され、一番上のスロットにノードの情報が記憶される。このように、一番上のスロットが用意される意味において、新たにノードの情報をスタックに入れることを、ノードをスタックに積む、あるいはノードをプッシュするという。また、図8に示す状態でスタックからノードを表す情報を取り出すと、一番上のスロット803に格納されているノードであるAjaklを表現するノードの情報が得られる。また、次の一番上のスロットは、スロット803の直下のスロットとなる。そこで、このようにスタックからノードの情報を取り出すことを、スタックをポップするという。また、スタックにおいて一番下のスロット801にのみノードの情報が格納されている状態でスタックをポップすると、スタックは空の状態となる。図9は、推論部114が前向き推論を行なう際の処理を説明するフローチャートを示す。このフローチャートの処理を行なう前には、スタックは空の状態となっているとする。また、次ノード取得部111は、指定されたノードを始点とするエッジの終点となっているノードを取得するモードとなる。図9に示すフローチャートの処理は、例えば、入力装置102から推論の実行の命令を表す情報が情報取得部113に取得されたときなどに、行なわれる。前向き推論を行なうかどうかは、⊃の右辺の論理式の真偽値が不定であるかどうかにより、判断することができる。例えば、図7において、テキストエリア705に値が入力されていない場合には、稟議要否=必要および稟議要否=不要それぞれの真偽値は不定となるので、前向き推論を行なうことができる。ステップS901の処理においては、ルートノードをプッシュする。これにより、ルートノードがスタックの一番上のスロットに格納される。ステップS902の処理において、スタックが空であるかどうかを判断する。スタックが空であれば、推論が終了したことになる。そこで、推論の終了を示す情報を出力装置103に送信したり、推論の結果を出力装置103に送信したりする。ステップS902の処理において、スタックが空でなければ、ステップS903へ処理を移行させて、スタックをポップする。これによりノードの情報が得られる。ステップ904の処理において、ステップS903で得られた情報のノードが、⊃の右辺の論理式を表現するノードであるかどうかを判断する。⊃の右辺の論理式を表現するノードであるかどうかどうかは、例えば、そのノードを始点とするエッジの終点がルートノードであるかどうかにより判断することができる。なお、以下では、⊃の右辺の論理式を表すノードを結論のノードということがある。ステップ904の処理において、ステップS903で得られたノードが結論のノードでないと判断されると、ステップS905へ処理を移行させる。ステップS905の処理において、ステップS903で得られたノードが表す論理式の真偽値が真であるかどうかを真偽判定部112により判定する。もし、真偽判定部112による真偽値の判定の結果が真であれば、ステップS906へ処理を移行させ、偽であれば、ステップS902に戻る。なお、真偽判定部112による真偽値の判定の結果が不定である場合には、ステップS903で得られたノードが表す論理式などを出力装置103に出力してもよい。例えば、役職=マネージャの真偽を判定した結果、不定であった場合には、役職=マネージャを出力装置103に送信してもよい。これにより、出力装置103は、役職はマネージャですかや役職を入力して下さいなどの表示を行なうことができる。これにより、入力装置102のユーザに未入力の項目があることや、未入力の項目の入力を促すことができる。入力を促した結果、入力装置102より情報が情報取得部113に取得された場合には、再度ステップS903で得られたノードの真偽を判定して、真偽値に応じてステップS906またはステップS902に処理を移行させてもよい。また、ステップS903で得られたノードが表す論理式の真偽値の判定をステップS905において行なった結果が偽である場合には、ステップS903で得られたノードが表す論理式を記憶しておき、ステップS902に処理を移行させるのではなく、ステップS906へ処理を移行させてもよい。この後、ステップS908に処理が移行した場合には、記憶された論理式を出力装置103へ出力し、出力装置103は、実際には偽であった論理式が真であると仮定すると、どのような結論が得られるかを出力するようにしてもよい。ステップS906の処理において、ステップS903で得られたノードの次のノードを次ノード取得部111により取得する。そして、ステップS907の処理において、ステップS906の処理により取得されたノードをプッシュし、ステップS902に戻る。もし、複数のノードが次ノード取得部111により取得された場合には、その複数のノードをプッシュする。また、ステップ904の処理において、ステップS903で得られたノードが結論のノードであると判断されると、ステップS908へ処理を移行させる。ステップS08の処理において、結論の結果を得る。結論の結果を得るとは、結論のノードが表す論理式を得ることである。また、さらに得られた論理式に含まれる値を得てもよい。例えば、稟議書要否=必要という論理式が得られた場合には、必要を表す値を得てもよい。得られた値は、出力装置103に出力されてもよい。稟議書要否=必要という論理式を表す情報が出力装置103に送信された場合には、=をを判断した結果、という定型的な文字列に置換し、さらに別の定型的な文字列となりますを補い、稟議書要否を判断した結果、必要となりますなどというメッセージを表示してもよい。図9を用いて、深さ優先の探索で推論を行なう処理について説明したが、幅優先breadthfirstの探索で推論を行なうこともできる。この場合には、それぞれのルールに対応する作業領域をメモリなどに用意し、それぞれのルールの⊃の左辺の論理式を表現するノードを順に走査し、それぞれの作業領域に、その作業領域に対応するルールに、真偽判定部112により偽と判断された論理式があるかどうかを記録する。もし、偽と判断された論理式があると作業領域に記録された場合には、その作業領域に対応するルールについては走査を中止し、結論のノードに到達した場合に、そのノードに関する情報を出力装置103に送信する。本実施形態では、ルートノードから距離が同じノードが表現する論理式の述語記号は同一となるので、真偽の判定を複数のノードについて同時に行なうことができる。例えば、図5において、述語記号A1について、A1a11、A1a21、...、A1am1の真偽の判定をまとめて行なうことができる。次に、A1a11、A1a21、...、A1am1の中の偽でないと判定された論理式を表すノードを有するルールの述語記号A2についての真偽の判定をまとめて行なう。以下においては、ルールベースに記憶するノード数を減少させる方法、また、推論を効率的に行なうためのデータ構造について説明する。セルまたはノードのマージ図3および図4に示すように、列の数と行の数との積の値の個数のセルにより構成される表の各行のセルを、1つのルールに対応付け、ルールベースに記憶するデータ構造を構成すると、列の数と行の数との積の値の個数のノードおよびルートノードが得られる。しかし、一般的には表のセルに格納される異なる値の数は、列の数と行の数との積の数よりも小さいことがある。例えば、図4に示す表は4列10行からなるが、セルに格納される異なる値は、物品購入、出張、一般、アシスタント、マネージャ、、1000ドル以下、1000ドル超、100ドル以下、100ドル超、500ドル以下、500ドル超、700ドル以下、700ドル超、必要、不要の16個である。特に、図4に示す表において、列の中の最も左の列である稟議種類の列のセルに格納される異なる値は3個であり、行数の10よりも小さい。このため、図4に示す表の各行を、1つのルールに対応付け、ルールベースに記憶するデータ構造を図5のように構成した場合において、ルートノード501から同じ距離にあるノード502、ノード503、...、ノード504の中に同じ論理式を表現するノードが存在することになる。このため、図9のステップS906において同じ論理式を表現するノードが複数回取得され、ステップS905において、同じ論理式の真偽値の判定が行なわれることとなる。そこで、表の行の全てをそれぞれ列の値によりソート並び換えを行ない、左の列から同じ値のセルをマージすることを行なってもよい。例えば、図4に示す表においては表の行の全てをそれぞれ列の値によりソート並び換えがされており、1行目から3行目までにおいて、稟議種類の列の値は物品購入であり同じである。そこで、1行目から3行目までにおいて稟議種類の列セルをマージすること統合して1つのセルにすることができる。次に、1行目から3行目までにおいて、役職の列の値を見ると、1行目はアシスタントであり、2行目と3行目とはマネージャであり、2行目と3行目とのマネージャのセルをマージすることができる。以上のようなセルのマージの操作を他の行についても行なった結果が図10である。図10に示すように、セルのマージの処理を行なうと、任意のセルの右隣のセルの数は、1または2以上となる。このようにセルのマージの処理をした表より、ルールベースに記憶するデータ構造を生成するには、次の手続により行なう。まず、列を左から右に走査しながら、各列において、その列のセルそれぞれに対応させてノードを生成する。次に、それぞれのノードについて、ノードに対応するセルの右隣のセルに対応するノードをエッジにより接続する。最後に、ルートノードと、最も左の列のセルに対応するノード及び最も右の列のセルに対応するノードとをエッジによりルートノードに接続する。なお、最も右の列については、列に格納されている異なる値に対応させたノードを生成するものとする。最も右の列のセルに対応するノードは、そのセルの値に対応させたノードとする。図11は、上記の手続により図10に示す表から生成されたデータ構造を示す。ノード1102が稟議種類の列の物品購入が格納されているセルに対応している。ノード1105は、ノード1102に対応するセルの右隣のアシスタントが格納されているセルに対応し、ノード1106は、ノード1102に対応するセルの右隣のマネージャが格納されているセルに対応する。ノード1111は、ノード1105に対応するセルの右隣のが格納されているセルに対応し、ノード1112は、ノード1106に対応するセルの右隣の1000ドル以下が格納されているセルに対応し、ノード1113は、ノード1106に対応するセルの右隣の1000ドル超が格納されているセルに対応する。他のセル1103-1120についても同様に説明することができる。また、ノード1121は、稟議書要否の列に格納されている必要のセルに対応するノードであり、ノード1122は、稟議書要否の列に格納されている不要のセルに対応するノードである。したがって、複数のルールそれぞれの右辺に並ぶ論理式の中に同じ論理式があれば、ルールベース110に記憶されるグラフデータ構造においては、ノードがマージされるようになっていてもよい。以上においては、セルのマージを行なった表からデータ構造を生成する手続について述べた。一方、セルのマージを行なう前の表からデータ構造を生成し、ノードをルートノードからマージして同じデータ構造を得ることもできる。この手続をMergeルートノードと名付けるとすると、MergeNとは、1Nを始点とするエッジの終点のノードがルートノードであれば、ルートノードを終点とするノードの始点のノードについて、同じ論理式に対応するノードをマージして手続を終了し、2Nを始点とするエッジの終点のノードについて、同じ論理式に対応するノードをマージし、マージして得られたそれぞれのノードMについてMergeMを行なう。なお、セルまたはノードのマージを行なっても、ルートノードから距離が同じノードが表現する論理式の述語記号は同一である。また、各ルールの⊃の左辺の論理式を表現する任意のノードを終点とするエッジは1本である。表の列の並び換えセルまたはノードのマージを行なう前に、表の列の並び換えを行なってもよい。図12は、図4に示す表の列の交換を行ない、セルのマージを行なって得られる表を示す。すなわち、図10に示す表の列のうち、役職を最も左の列とし、その右隣を稟議種類の列とする列の並び換えの手続を行なって得られる表である。このような列の並び換えを行なったのは、稟議種類の列に格納される異なる値が物品購入、出張および一般であり個数が3であるのに対し、役職の列に格納される異なる値がアシスタントおよびマネージャであり個数が2であるので、個数が少ない役職の列を稟議種類の列よりも優先した結果である。また、金額の列に格納される異なる値の個数は9であるので、役職および稟議種類の列が金額の列よりも優先される。なお、稟議書要否は、もっとも右側の列であり、結論に対応する列なので並び換えない。すなわち、表の列の並び換えは、それぞれの列に格納されている異なる値の個数を求め、個数の少ない列を優先して左に位置するように行なうこととなる。これは、複数のルールに並ぶ論理式の述語記号を順に左から右に並ぶ列名とし、各行を各ルールに対応付けて対応する列に各ルールに並ぶ論理式が有する定数を並べた表を作成した場合、最も右に並ぶ列を除き、各列に格納される値の種類の数は、その右隣の列の値の種類の数以下となると言い換えることができる。図13は、図12に示す表から生成されるデータ構造を示す。そのデータ構造は、符号1301-1321で示されるように、21個のノードにより構成されている。一方、列の並び換えを行なっていない図10からは、図11に示されるように符号1101から1122に示される22個のノードにより構成されるデータ構造が得られ、表の列の並び換えを行なうことにより、ノードの数を減少させることができる。後ろ向き推論以下に、期待される結論を得るための条件を得る推論、すなわち後ろ向き推論、について説明する。図14は、推論部114が後ろ向き推論を行なう際の処理を説明するフローチャートを示す。このフローチャートの処理を行なう前には、スタックは空の状態となっているとする。また、このフローチャートの処理は、例えば、入力装置102から推論の実行の命令を表す情報が情報取得部113に取得されたときなどに、行なわれる。また、後ろ向き推論を行なうかどうかは、⊃の右辺の論理式の真偽値が不定でないかどうかにより判断することができる。例えば、図7において、テキストエリア705に値として必要が入力されている場合には、稟議要否=必要および稟議要否=不要それぞれの真偽値は不定ではなくなるので、後ろ向き推論を行なうことができる。ステップS1401の処理においては、ルートノードをスタックにプッシュする。これによりルートノードがスタックの一番上のスロットに格納される。ステップS1402の処理において、スタックが空であるかどうかを判断する。スタックが空であれば、推論が終了したことになる。そこで、推論の終了を出力装置103に送信したり、推論の結果を出力装置103に送信したりする。ステップS1402の処理において、スタックが空でなければ、ステップS1403へ処理を移行させて、スタックをポップする。これによりノードが得られる。ステップS1404において、ステップS1403で得られたノードの表す論理式が真であるかどうかを真偽判定部112により判定する。もし、真偽判定部112による真偽の判定が真であれば、ステップS1406へ処理を移行する。真でなければステップS1405へ処理を移行させ、ステップS1403で得られたノードの表す論理式が真であることを表示する。例えば、役職=アシスタントの論理式に対応して、役職はアシスタントでなければならない旨の表示を行なう。なお、真偽判定部112による判定が偽であれば、なにもせずにステップS1402へ処理を移行させ、ステップS1405が実行されるのは、真偽判定部112による判定が不定である場合となるようにしてもよい。真偽判定部112による判定が偽であれば、ステップS1403で得られたノードの表す論理式を記憶し、ステップS1402においてスタックが空であると判断されたときに記憶された論理式を出力装置103に出力し、出力装置103は、偽と判定された論理式が真であれば、期待される結論が得られる旨を表示してもよい。ステップS1406の処理において、ステップS1403で得られたノードの次のノードを次ノード取得部111により取得する。そして、ステップS1407の処理において、ステップS1407の処理により得られたノードの中にルートノードが存在するかどうかを判断する。もし、ルートノードがステップS1407の処理により得られたノードの中にルートノードが存在すれば、ステップS1402へ戻る。もし、ステップS1407の判断により、ルートノードがステップS1407の処理により得られたノードの中にルートノードが存在しなければ、ステップS1407の処理により得られたノードをスタックにプッシュする。なお、ステップS1405において、必要な条件として表示するかわりに、論理式を充足するべき条件としてメモリなどに記憶してもよい。そして、ステップS1407において、ルートノードがステップS1407の処理により得られたノードの中にルートノードが存在した場合に、記憶された条件を出力装置103に出力し、充足されるべき論理式として提示してもよい。特に、論理式が不等式である場合には、線形計画法などにより、最適解を求めるようにしてもよい。図14を用いて、深さ優先で推論を行なう処理について説明したが、幅優先で推論を行なうこともできる。本発明の一実施形態に係る推論装置は、コンピュータを用いて実現することができる。例えば、ルールベースをメモリや二次記憶装置に複数のルールを表すグラフデータ構造を記憶する。入力装置より受信した情報をメモリなどの記憶領域に記憶する。そして、複数のルールいずれかのルールの右辺の論理式が真となるかを判断し、そうであれば、後ろ向き推論を行ない、真と判定された論理式が右辺に並ぶルールの左辺に並ぶ論理積の複数の論理式を表すノードを走査して、真と判定された論理式が右辺に並ぶルールが成り立つために真と判定されるべき論理式を算出する。また、複数のルールの全てのルールの右辺の論理式の真偽が不定であると判定されると、前向き推論を行ない、直列に接続されたノードを走査し、複数のルールのいずれかのルールの右辺に並ぶ論理式のうち真となる論理式を算出する。