(57)【要約】      （修正有）【課題】自由な自然言語文字列を許容してＰＲＯＬＯＧと同様の推論を可能とするシステムにおいて、表記ゆれ・音声認識精度・タイプミスについてのリスクと入力コストを低減する。【解決手段】ファクトやルールを構成するリテラルからなるリテラル集合の一部又は全部からユーザーが一又は複数を質問文として選択することにより、コンピュータに該質問文で質問できるようにする。【選択図】なし【特許請求の範囲】
【請求項１】
文字列中に変数を埋め込むことを許容したリテラルからなるルールを解釈して
ＰＲＯＬＯＧの機能の一部又は全部を実施するコンピュータプログラムであって、
ファクト、
ルール、又は、
それらの文法もしくは解釈を拡張した記述
を構成するリテラルからなる
第一のリテラル集合の一部又は全部から
ユーザーが一又は複数を質問文として選択することにより
コンピュータに該質問文で質問できるように構成した
コンピュータプログラム。
【請求項２】
既に登録されたファクト及びルールから
あらかじめ求めた真又は偽であることを証明可能な定数リテラルを
前記第一のリテラル集合に含める
ことを特徴とする
請求項１に記載のコンピュータプログラム。
【請求項３】
文字列中に変数を埋め込むことを許容したリテラルからなるルールを解釈して
ＰＲＯＬＯＧの機能の一部又は全部を実施するコンピュータプログラムであって、
ファクト、
ルール、又は、
それらの文法もしくは解釈を拡張した記述
を構成する定数リテラルからなる
第一のリテラル集合の一部又は全部から
ユーザーが一又は複数をファクトとして選択することにより
コンピュータに該ファクトを登録できるように構成した
コンピュータプログラム。
【請求項４】
ユーザーがファクトとして選択したリテラルのうち
既に登録されたファクト及びルールから
選択したとおりの真又は偽であることを証明できなかったリテラルのみを登録するように構成した
請求項３に記載の
コンピュータプログラム。
【請求項５】
ユーザーがファクトとして選択したリテラルのうち
既に登録されたファクト及びルールから
選択したとおりの真又は偽と矛盾する値が証明できた場合にその旨をユーザーに通知するように構成した
請求項３又は４に記載の
コンピュータプログラム。
【請求項６】
ユーザーがファクトとして選択したリテラルのうち
既に登録されたファクト及びルールから
選択したとおりの真又は偽と矛盾する値が証明できたリテラルを登録しないように構成した
請求項３から５のいずれか一項に記載の
コンピュータプログラム。
【請求項７】
ユーザーがファクトとして選択したリテラルのうち
既に登録されたファクト及びルールから
選択したとおりの真又は偽と矛盾する値が証明できたリテラルを例外的な真又は偽の例としてコンピュータが解釈できる形式で登録するように構成した
請求項３から５のいずれか一項に記載の
コンピュータプログラム。
【請求項８】
登録されたファクトにあたる定数リテラル（変数を含まないリテラル。固定文字列にあたる。以下、同じ）
又は
あらかじめ求めた証明可能な定数リテラル
を
ルールのヘッド部にあたるリテラル又はルールのボディ部にあたるリテラルと単一化して得られる変数束縛値を
該ルール内の他のヘッド部又はボディ部にあたるリテラル中の同名変数に代入して得られるリテラルを
前記第一のリテラル集合に含めた
請求項１から７のいずれか一項に記載のコンピュータプログラム。
【請求項９】
変数名が示すカテゴリに属する値集合によって展開したリテラル集合を前記リテラル集合に含めた
請求項１から８のいずれか一項に記載の
コンピュータプログラム。
【請求項１０】
請求項８において
変数に代入できる値がない場合もしくは
変数の代入できる値が多く前記リテラル集合が所定基準よりも大きくなる場合、
又は、
請求項９において
変数名が示すカテゴリが不明の場合、
変数名が示すカテゴリに属する値集合が空の場合もしくは
変数名が示すカテゴリに属する値集合が大きく前記リテラル集合が所定基準よりも大きくなる場合、
リテラルに含まれる変数の一部又は全部を正規表現のアスタリスク（「＊」）又は固定文字列（「＿」、「Ｘ」、「何か」、等）に
置き換えて、
ユーザー入力（音声入力、テキスト入力、その他のコントロール操作）に対する
正規表現としてマッチ度、
文字列としての編集距離の近さ、
文字列としての類似度、又は、
相互に意味解析した内容としての意味的類似度
により、
前記選択を行うことを特徴とする
請求項８又は９に記載の
コンピュータプログラム。
【請求項１１】
ユーザーが音声入力した内容の最後に「か」が含まれる場合に
「か」を除いた内容を問う質問文として解釈して応答を返す、
請求項１から１０のいずれか一項に記載の
コンピュータプログラム。
【請求項１２】
ユーザーが音声入力した内容の最後に音程が上がる場合に、
質問文として解釈して応答を返す、
請求項１から１１のいずれか一項に記載の
コンピュータプログラム。
【請求項１３】
ユーザーからの音声入力、テキスト入力又は選択入力に対して、
入力されたリテラルが真であることを、既存のファクト及びルールにより証明できなかったときに
そのリテラルを真であるとして登録する
請求項１から１２のいずれか一項に記載の
コンピュータプログラム。
【請求項１４】
ユーザーの指定した質問が偽又は真偽証明不能の場合に、
該質問に最も類似する、
真であることを証明可能なリテラル、
ルールのヘッドとなっているリテラル、
又は、ルールの条件となっているリテラル
として質問文を置き換える
請求項１から１３のいずれか一項に記載の
コンピュータプログラム。
【請求項１５】
ルールのボディ部に対応する条件が全て揃ったときに
該ルールのヘッドに使用されているリテラル又は該部分文字列を用いてユーザーが直接的に問うまでもなく、
かつ、該リテラル又は該部分文字列を用いずにユーザーが間接的に問うまでもなく、
ヘッドの内容を出力することを特徴とする
請求項１から１４のいずれか一項に記載のコンピュータプログラム。
【請求項１６】
事実や質問文の入力又は解釈、推論もしくは証明結果の表示についての
ユーザーを補助する度合又は形式を
事実やルールに用いる記号又は予約語により指定可能にした
請求項１から１５のいずれか一項に記載のコンピュータプログラム。
【請求項１７】
前記第一のリテラル集合の一部又は全部からの
選択を、
ユーザーからの音声の認識により行うことを特徴とする
請求項１から１６のいずれか一項に記載のコンピュータプログラム。
【請求項１８】
前記第一のリテラル集合の一部又は全部からの
選択を、
ユーザーのフロントエンドとなるブラウザ画面におけるＷＥＢリンクのユーザーからの選択、又は、
フォームコントロールにおけるユーザーからの項目選択
により行うことを特徴とする
請求項１から１７のいずれか一項に記載のコンピュータプログラム。
【請求項１９】
★★★５★
音声認識前に、
前記第一のリテラル集合の一部又は全部のリテラルについて、
変数名近傍の区切り記号を削除して別の疑問の意味を示す文言を追加し、
音声認識後に削除した区切り記号を復活させて追加した疑問の意味を示す文言を削除して
質問文として発行することを特徴とする
請求項１から１８のいずれか一項に記載のコンピュータプログラム。
【請求項２０】
請求項１から１９までのいずれか一項のプログラムを用いた方法。
【請求項２１】
請求項１から１９までのいずれか一項のプログラムを用いた装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列中に変数を埋め込むことを許容したリテラルからなるルールを解釈して
ＰＲＯＬＯＧの機能の一部又は全部を実施するコンピュータプログラム、これを用いた方法及び装置に関する。
【背景技術】
【０００２】
下記、特許文献１のシステムは、自由な自然言語文字列（各国言語、方言、略語、等）を許容してＰＲＯＬＯＧと同様の推論を可能とするシステムである。
しかし、自由な用語（固定的なオントロジーが存在しないともいえる）による知識表現（事実とルール）とユーザー入力文（質問文や前提文（文脈、主張とも言う））を許容しているため、通常のＰＲＯＬＯＧやシナリオ型音声対話プログラムに比べて以下のようなものが課題となる。
１）表記ゆれ（同じ／似た意味の別の用語や語順を用いる）のリスク（さらに音声認識入力の精度が悪くなるリスク）
２）ユーザーのタイプミスのリスク
３）ユーザーの入力コスト
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特願２０１３−８７００８
【発明の概要】
【発明が解決しようとする課題】
【０００４】
したがって、本発明は、上記したような、自由な自然言語文字列を許容しつつ、表記ゆれ・音声認識精度・タイプミスについてのリスクと入力コストを低減することを課題とする。
【課題を解決するための手段】
【０００５】
かかる目的のため、
本発明は（請求項１として）、
文字列中に変数を埋め込むことを許容したリテラルからなるルールを解釈して
ＰＲＯＬＯＧの機能の一部又は全部を実施するコンピュータプログラムであって、
ファクト、
ルール、又は、
それらの文法もしくは解釈を拡張した記述
を構成するリテラルからなる
第一のリテラル集合の一部又は全部から
ユーザーが一又は複数を質問文として選択することにより
コンピュータに該質問文で質問できるようにしたコンピュータプログラムを提供する。
このコンピュータプログラムは、
（請求項２として）真又は偽を証明できる定数リテラルを第一のリテラル集合に加える、こともできる。
（請求項３として）第一のリテラル集合からユーザーが選択したものをファクトとして主張（登録）可能とすることもできる。
（請求項４として）真又は偽の主張（登録希望）が既存のファクト及びルールから証明できるものは登録しないとすることもできる。
（請求項５として）真又は偽の主張（登録希望）が既存のファクト及びルールから証明できる値と矛盾するときは、その旨通知することもでき、（請求項６として）登録しないようにすることもでき、（請求項７として）例外的な真又は偽の例としてコンピュータが解釈できる形式で登録することもできる。
（請求項８として）ルール内のいずれかのリテラルについて単一化できた変数束縛を他のリテラルに波及して変数を減らした固定文字列を選択肢とすることもできる。
（請求項９として）変数名が所定のカテゴリ名だったときに、意味ネットワークやカテゴリ階層を参照して変数のとりうる値に（複数選択肢へと）展開して選択肢とすることもできる。
（請求項１０として）減らして残った変数を固定文字列に置き換えて、類似度で選択させる（文字列マッチ、音声認識等により）こともできる。
（請求項１１として）「〜か」や（請求項１２として）音程のしり上がりを疑問文として認識することもできる。
（請求項１３として）ユーザーの指定した項目が証明できないなら新たな真の主張と見なすこともできる。
（請求項１４として）ユーザーの指定した項目が偽又は真偽証明不能の場合に類似する質問文（真を証明可能なリテラル、ヘッド又はボディの条件となっているリテラル）に置き換えて提示することもできる。
（請求項１５として）コンピュータプログラムとの対話等によって条件が新たに揃ったルールについて問われる前に出力することもできる。
（請求項１６として）こうしたユーザー補助の度合又は形式を論理プログラム上の記号又は予約語で区別可能に明示することもできる。
（請求項１７として）ユーザーによる選択を音声認識により行うようにすることができ、（請求項１８として）リンクの選択又はフォームコントロールの選択により行うようにすることもできる。
（請求項１９として）出力は、画面表示の他、音声合成により行うこともできる。
【０００６】
以下、各内容の実現方法や効果について詳述する。
【０００７】
まず、請求項１は
文字列中に変数を埋め込むことを許容したリテラルからなるルールを解釈して
ＰＲＯＬＯＧの機能の一部又は全部を実施するコンピュータプログラムであって、
ファクト、
ルール、又は、
それらの文法もしくは解釈を拡張した記述
を構成するリテラルからなる
第一のリテラル集合の一部又は全部から
ユーザーが一又は複数を質問文として選択することにより
コンピュータに該質問文で質問できるように構成した
コンピュータプログラムを提供する。
■ここでは、ユーザーによる「選択」以外はすべてコンピュータによる自動処理となる。
■選択したリテラルに変数が含まれる場合には、オープンクエスチョン形式の質問文となる。
■選択したリテラルに変数が含まれない場合（定数リテラルの場合）には、クローズドクエスチョン形式の質問文となる。
■「それらの文法もしくは解釈を拡張した記述」の例としては、以下のような拡張を上げることができる。
１）ルールのボディ部の条件の前に「？」がついているときで真が証明できないときはその条件の真偽についてコンピュータがユーザーに動的に問い合わせるようにする拡張。さらに同様に「？？」がついているときは、真が証明できるときでも利用者にあえて動的に問い合わせて、「偽」とされたときには（たとえ真が証明できるようなファクト＆ルール集合でも特別に）偽となるようにassert（例外登録を主張）できるようにする（この結果、全体としては「原則的に真で例外的に偽となる」とコンピュータが解釈できるようにする）拡張。等。
２）ルールの区切りが「：−」でなく「：＝」のときで、かつ、ボディの条件が（コンピュータプログラムの対話制御等により）そろったときは、そのルールのヘッドをなんら質問されていないときでも、ヘッドの内容を音声合成により出力したり画面表示したりするようにする拡張。
■効果■これにより、表記ゆれリスクやユーザーによる質問文入力の手間を減らすことができる。
【０００８】
また、請求項２は、
既に登録されたファクト及びルールから
あらかじめ求めた真又は偽であることを証明可能な定数リテラルを
前記第一のリテラル集合に含める
ことを特徴とする。
■ここで、「定数リテラル」とは、変数を含まないリテラルをいう（以下、同じ）。
■この実現は、例えば、「＄Ａ？」（真が証明できる定数リテラルをすべて列挙する質問文）、又は、「＾＄Ａ？」や「＄Ａでない？」（偽が証明できる定数リテラルを列挙する質問文（閉世界仮説でない処理系の場合）。偽の証明が可能なホーン節を許す処理系や偽のファクトを登録できる処理系に限る）により、前記「第一のリテラル集合」を拡張したものをユーザーの選択候補となる選択肢（又は音声認識リスト）とするようにしてもよい。
■効果■これにより、真又は偽であることをコンピュータにより確認（証明）できるコミュニケーションパターン（定数リテラルからなるクローズドクエスチョン形式の質問文とコンピュータによる（真又は偽である旨の）応答の対）の選択肢を、網羅的に増やすことができる。また、音声認識モードの場合は、認識すべき選択肢ないし認識する価値の大きい（応答可能なため大きいと考える）選択肢を、「第一のリテラル」として増やすことができる。
【０００９】
また、請求項３は、
文字列中に変数を埋め込むことを許容したリテラルからなるルールを解釈して
ＰＲＯＬＯＧの機能の一部又は全部を実施するコンピュータプログラムであって、
ファクト、
ルール、又は、
それらの文法もしくは解釈を拡張した記述
を構成する定数リテラルからなる
第一のリテラル集合の一部又は全部から
ユーザーが一又は複数をファクトとして選択することにより
コンピュータに該ファクトを登録できるように構成した
コンピュータプログラムを提供する。
■「登録」とは、例えば、ＰＲＯＬＯＧにおける「assert処理」であってもよい。
■これは、上記したような形（「＾・・・」「・・・でない」等）を用いた、偽のファクトの登録であってもよい（閉世界仮説でない場合）。
■効果■これにより、ユーザーによるファクト主張の手間（入力等）、又は、表記ゆれリスクを減らすことができる。
【００１０】
また、請求項４は、
ユーザーがファクトとして選択したリテラルのうち
既に登録されたファクト及びルールから
選択したとおりの真又は偽であることを証明できなかったリテラルのみを登録するように構成した
請求項３に記載の
コンピュータプログラムを提供する。
■ここで「選択したとおりの偽」（例えば、上記したような形（「＾・・・」「・・・でない」等）を用いる）の場合、（証明できなかった）偽を主張するファクトの登録であってよい。
■ここで「登録」とは、例えば、ＰＲＯＬＯＧにおける「assert処理」であってもよい。閉世界仮説でない処理系で偽を明示的に扱う場合も同様にすることができる。
■「登録」する際には、「はい」、「そうなんですね」等と、ユーザーの選択によりコンピュータが新たに知ったことを示せる答えを、コンピュータがユーザーに対して出力（音声合成やテキスト文字列として）することができる。
■効果■これにより、コンピュータが既存ファクト及びルールにより既に知っている（すでに証明可能な）ファクトが追加で登録（ユーザーから主張）されることによる（登録後の）全体論理の冗長さを回避することができる。また、既存ファクト及びルールにより既に知っている（すでに証明可能な）ファクトを登録しない（登録を制限する処理を含む）ことにより、コンピュータが既に知っていたことを（「確かに、そうですね。」等と）ユーザーに知らせることができ、その後のユーザー入力の効率化につなげることができる。
【００１１】
また、請求項５は、
ユーザーがファクトとして選択したリテラルのうち、
既に登録されたファクト及びルールから、
選択したとおりの真又は偽と矛盾する値が証明できた場合にその旨をユーザーに通知するように構成した
請求項３又は４に記載の
コンピュータプログラムを提供する。
■ここで「矛盾する値の証明」は、選択したとおりの真偽を逆転した内容が証明できるかどうかを計算してみる（ＳＬＤ導出等により）ことにより実施することができる。
■例えば、「それは既に知っています」等といった文言を出力することができる。
■効果■これにより、冗長なファクト・ルール集合が形成されるのを防ぐことができる。
【００１２】
また、請求項６は、
ユーザーがファクトとして選択したリテラルのうち、
既に登録されたファクト及びルールから、
選択したとおりの真又は偽と矛盾する値が証明できたリテラルを登録しないように構成した
請求項３から５のいずれか一項に記載の
コンピュータプログラムを提供する。
■この場合、例えば、「ルール〇〇及びファクト□□と矛盾しますので登録しませんでした」と通知することができる。
■効果■これにより、矛盾を含むファクト・ルール集合が形成されるのを防ぐことができる。
【００１３】
また、請求項７は、
ユーザーがファクトとして選択したリテラルのうち、
既に登録されたファクト及びルールから、
選択したとおりの真又は偽と矛盾する値が証明できたリテラルを、
例外的な真又は偽の例としてコンピュータが解釈できる形式で登録するように構成した
請求項３から５のいずれか一項に記載の
コンピュータプログラム。
■「例外的な真又は偽の例としてコンピュータが解釈できる形式で登録する」とは、例えば、論理プログラム（ファクト又はルール）のリストの「より前の行で証明された事実については後ろの行で証明も反証もしない」という解釈方針をとっている処理系において最前の行に例外となる事実を挿入する、などといった形式での登録をいう。
■「矛盾する値が証明」できるためには、例えば、真偽を反転して通常の導出をするようにプログラムすればよい。
■効果■これにより、原則とする論理（例外が存在しない場合に広く用いることができる一般的な命題等）を維持管理しつつ、例外とする論理（存在する場合に矛盾する他の論理よりも優先して解釈・適用すべき特別な論理等）をユーザーとの動的対話によって徐々に追加していく等といった運用が可能となり、原則と例外を区別して論理を効率よく表現しかつ更新していくことが可能になる。
【００１４】
また、請求項８は、
登録されたファクトにあたる定数リテラル（変数を含まないリテラル。固定文字列にあたる。以下、同じ）
又は
あらかじめ求めた証明可能な定数リテラルを
ルールのヘッド部にあたるリテラル又はルールのボディ部にあたるリテラルと単一化して得られる変数束縛値を
該ルール内の他のヘッド部又はボディ部にあたるリテラル中の同名変数に代入して得られるリテラルを
前記第一のリテラル集合に含めた
請求項１から７のいずれか一項に記載のコンピュータプログラム。
■ここで、「第一のリテラル集合に含め」る処理は、各ルールについて行うことができる、リテラル集合中で重複するものはあらかじめ削除することが有利である。
■「第一のリテラル集合」に含めるリテラルは、（同名変数に代入した後に他の）変数が残ってもよい（さらには、その残った変数が固定文字列化の方針で統一する便宜等ために「何か」「どこか」「いつか」等の固定文字列に置き換えられてもよい）ことにしてもよい。
■効果■これにより、質問文として認識することが有用である可能性の高いリテラルを、効率的に（ルール内の他のリテラルと単一化していることによる型一致の蓋然性の高さ故）、より網羅的に（その蓋然性の高い範囲で選択肢を増やせる故）求めることができる。
■ここで、単一化して得られる変数束縛値は、その値が代入される変数が含まれるリテラルに含まれる別の変数の変数束縛値と組になって本来は一つの解を構成するのであるが、その組にとらわれずに変数がとりうる値ごとに網羅的に掛け合わせて出来たリテラルを「第一のリテラル集合」に含めることができる。
■例えば、以下では、ルール「＄Ａは＄Ｂと旅行にいけそう :- ＄Ａは＄Ｃまで切符二枚もつ; ＄Ｂは＄Ｃに行く都合がある;」の＄Ａの候補、＄Ｂの候補、＄Ｃの候補の全部の組合せをそれぞれ代入した固定文字列を選択肢（又は音声認識の認識候補リスト）としている。
＝＝＝
ヘッド「＄Ａは＄Ｂと旅行にいけそう」の単一化⇒（＄Ａ，＄Ｂ）＝｛（太郎，花子），（次郎，裕美）｝
条件１「＄Ａは＄Ｃまで切符二枚もつ」の単一化⇒（＄Ａ，＄Ｃ）＝｛（太郎，金沢），（太郎，東京）｝
条件２「＄Ｂは＄Ｃに行く都合がある」の単一化⇒（＄Ｂ，＄Ｃ）＝｛（裕美，横浜），（裕美，大阪），（花子，金沢）｝
＄Ａのバリエーション＝｛太郎，次郎｝
＄Ｂのバリエーション＝｛花子，裕美｝
＄Ｃのバリエーション＝｛金沢，東京，横浜，大阪｝
ヘッドのリテラルのバリエーション
太郎は花子と旅行にいけそう
太郎は裕美と旅行にいけそう
次郎は花子と旅行にいけそう
次郎は裕美と旅行にいけそう
条件１のリテラルのバリエーション
太郎は金沢まで切符二枚もつ
次郎は金沢まで切符二枚もつ
太郎は東京まで切符二枚もつ
次郎は東京まで切符二枚もつ
太郎は横浜まで切符二枚もつ
次郎は横浜まで切符二枚もつ
太郎は大阪まで切符二枚もつ
次郎は大阪まで切符二枚もつ
条件２のリテラルのバリエーション
花子は金沢に行く都合がある
裕美は金沢に行く都合がある
花子は東京に行く都合がある
裕美は東京に行く都合がある
花子は横花に行く都合がある
裕美は横浜に行く都合がある
花子は大阪に行く都合がある
裕美は大阪に行く都合がある
＝＝＝
■効果■結局、これらにより、変数の型（とりうる値の集合）を一定の精度で動的かつ機械的に獲得及び適用できることになり、モレの少ないユーザー事実選択や音声認識の候補リスト準備が可能となる。
【００１５】
また、請求項９は、
変数名が示すカテゴリに属する値集合によって展開したリテラル集合を前記リテラル集合に含めた
請求項１から８のいずれか一項に記載の
コンピュータプログラムを提供する。
■ここで「変数名が示すカテゴリ」とは、例えば、変数名「＄｛動物｝」に対してカテゴリ「動物」である。
■例えば、
リテラル「＄｛動物｝を飼う」の場合、
利用可能な別途定義された意味ネットワークやオントロジデータを参照して、
カテゴリ「動物」に属する値集合＝｛犬、猫、サル、・・・、キジ｝を
代入したリテラル｛「犬を飼う」，「猫を飼う」，「サルを飼う」、・・・、「キジを飼う」｝を、
ユーザーが選択できる選択肢となる「第一のリテラル集合」を加えることになる。
■カテゴリ階層が二段以上のときは、その階層をさらに下った値集合や概念集合で束縛したリテラルも選択肢とすることができる。
■効果■これにより、カテゴリ階層を利用した効率的な選択肢提供が可能となる。
【００１６】
また、請求項１０は、
請求項８において
変数に代入できる値がない場合もしくは
変数の代入できる値が多く前記リテラル集合が所定基準よりも大きくなる場合、
又は、
請求項９において
変数名が示すカテゴリが不明の場合、
変数名が示すカテゴリに属する値集合が空の場合もしくは
変数名が示すカテゴリに属する値集合が大きく前記リテラル集合が所定基準よりも大きくなる場合、
リテラルに含まれる変数の一部又は全部を正規表現のアスタリスク（「＊」）又は固定文字列（「＿」、「Ｘ」、「何か」、等）に
置き換えて、
ユーザー入力（音声入力、テキスト入力、その他のコントロール操作）に対する
正規表現としてマッチ度、
文字列としての編集距離の近さ、
文字列としての類似度、又は、
相互に意味解析した内容としての意味的類似度
により、
前記選択を行うことを特徴とする
請求項８又は９に記載の
コンピュータプログラムを提供する。
■正規表現としてのマッチ度は、正規表現についての最初の固定文字列部分及び最後の固定文字列部分の一致度によって求めてもよい。
■編集距離の計算アルゴリズムは、レーベンシュタイン距離を求める公知のアルゴリズム等を用いてよい。
■文字列としての類似度は、例えば、公知のｎ−ｇｒａｍ集合の類似、公知のｄ−ｂｉｇｒａｍ集合の類似の他に、以下のように簡易的に求めてもよい。
int str_distance(wchar_t *str1, wchar_t *str2) //大きいほうが違いが大きい
{
int ret = 0;
int inum = strlen(str1);
int jnum = strlen(str2);
if(inum ＞ jnum){
for(int i = 0; i ＜ inum; i++){
int plus = inum;
for(int j = 0; j ＜ jnum; j++){
if(*(str1+i) == *(str2+j){
if(i ＞ j){
if(i - j ＜ plus){
plus = i - j;
}
}else{
if(j - i ＜ plus){
plus = j - i;
}
}
}
}
ret += plus;
}
}else{
for(int j = 0; j ＜ jnum; j++){
int plus = jnum;
for(int i = 0; i ＜ inum; i++){
if(*(str1+i) == *(str2+j){
if(i ＞ j){
if(i - j ＜ plus){
plus = i - j;
}
}else{
if(j - i ＜ plus){
plus = j - i;
}
}
}
}
ret += plus; 
}
}
return ret;
}
■効果■これにより、変数が残っている場合や選択肢の候補が多すぎる場合にも、表記ゆれの場合と同様に、
問題の本質に沿って類型化した有用な応答を行える場合が多くなる。
【００１７】
また、請求項１１は、
ユーザーが音声入力した内容の最後に「か」が含まれる場合に
「か」を除いた内容を問う質問文として解釈して応答を返す、
請求項１から１０のいずれか一項に記載の
コンピュータプログラムを提供する。
■「質問文として解釈」とは、例えば既存の処理系の場合、リテラルの前又は後に「？」をつけて送信することである。
■効果■これにより、「？」（はてな）よりもユーザーの発音コストが少なく、質問文と主張文を区別して、コンピュータに認識させることができる。
【００１８】
また、請求項１２は、
ユーザーが音声入力した内容の最後に音程が上がる場合に、
質問文として解釈して応答を返す、
請求項１から１１のいずれか一項に記載の
コンピュータプログラムを提供する。
■効果■これにより、ユーザーにとって普段の会話と同じ感覚で、質問文と主張文（質問文以外の文）を区別することが可能となる。
【００１９】
また、請求項１３は、
ユーザーからの音声入力、テキスト入力又は選択入力に対して、
入力されたリテラルが真であることを、既存のファクト及びルールにより証明できなかったときに
そのリテラルを真であるとして登録する
請求項１から１２のいずれか一項に記載の
コンピュータプログラムを提供する。
■実現するには、登録の前にプログラムにより真であることを証明してみて、証明できたときに登録を制限するようにすればよい。
■例えば、証明できなかったので真であるとして登録したときに、新たに登録した旨を利用者に示すために、「はい」「・・・ですね」等と表示したり音声合成出力したりすることができる。
■真であるとして登録するとは、ファクトやルールを含む論理プログラム内に一時的に登録（揮発メモリに）することもでき、ファイルに保存（不揮発メモリに）することもできる。なお、インターネットブラウザでサーバーを介してアクセスしている実施形態の場合には、新規登録内容をインターネットブラウザのクッキー領域にのみ（そのユーザーに依存する文脈として）記憶し、そのユーザーにのみ有効な情報として後々まで参照することにしたり、２４時間ごと・日付のかわりごと・等に記憶した内容をクリアするようにしたりもすることができる。
■なお、同様の機構により、ユーザーによって指定された偽である旨のリテラルが偽であることを証明できなかった場合にそのリテラルを偽であるとみなして同様の処理をすることもできる。
■また、みなしてしまう前に「本当にそうですか？」とユーザー問い合わせをするように音声合成会話等を構成することもできる
■効果■これにより請求項３及び４と同様の効果が期待できる。また、表記ゆれ吸収ルールを十分準備することにより、表記ゆれによる二重登録を回避することもできる。
【００２０】
また、請求項１４は、
ユーザーの指定した質問が偽又は真偽証明不能の場合に、
該質問に最も類似する、
真であることを証明可能なリテラル、
ルールのヘッドとなっているリテラル、
又は、ルールの条件となっているリテラル
として質問文を置き換える
請求項１から１３のいずれか一項に記載の
コンピュータプログラムを提供する。
■ここでは、「質問文を置き換え」後に置き換えた質問文を即発行してその答えを表示することもできる一方、
置き換えた質問文を入力・発行欄に質問文候補として追加編集及び発行可能な様式で表示したり、
音声合成により「＜置き換え後の質問文＞という意味ですか？」と音声出力して利用者から「はい」
という返事を待ってから発行して答えを表示することもできる。
■類似の度合は請求項１０と同様に編集距離等により計算することもできる。
■効果■これにより、ユーザーが必要としている答えと類似する回答を提供できる場合も多くなる。
【００２１】
また、請求項１５は、
ルールのボディ部に対応する条件が全て揃ったときに
該ルールのヘッドに使用されているリテラル又は該部分文字列を用いてユーザーが直接的に問うまでもなく、
かつ、該リテラル又は該部分文字列を用いずにユーザーが間接的に問うまでもなく、
ヘッドの内容を出力することを特徴とする
請求項１から１４のいずれか一項に記載のコンピュータプログラムを提供する。
■この場合、時間とともに又は対話する相手の変更とともに、条件を（新たに）全て揃えるのに用いられた（直前までに主張された）事実等を自動削除する機構を備え、条件が全て揃う都度にヘッドの内容を出力できることが有利である（例えば、症状による診断を行うとき等）。
■ここで、「間接的に問う」とは、直接的に問うた質問文にヘッドがマッチするルールの条件文の一部がサブゴールとなり間接的に質問する場合等を言う。
■効果■これにより、法律診断や病名診断や各種アドバイスが可能になる他、ヘッドの内容に関する言葉づかいの特徴等をユーザーが知らなくても、（ことばの意味さえ知っていれば）ルール型知識の恩恵を受けることができる。
【００２２】
また、請求項１６は、
事実や質問文の入力又は解釈、推論もしくは証明結果の表示についての
ユーザーを補助する度合又は形式を
事実やルールに用いる記号又は予約語により指定可能にした
請求項１から１５のいずれか一項に記載のコンピュータプログラムを提供する。
■例えば、「:-」と「:=」は、基本的に同じだが、「:=」のとき請求項１５の自動表示を適用可能とする、等。
■効果■これにより、例えば、自動表示（自動診断目的などをもつ）に適したルールのみを自動表示の対象とすることができる。
【００２３】
また、請求項１７は、
前記第一のリテラル集合の一部又は全部からの
選択を、
ユーザーからの音声の認識により行うことを特徴とする
請求項１から１６のいずれか一項に記載のコンピュータプログラムを提供する。
■効果■これにより、音声認識候補リスト事前提供方式による十分な精度と、候補リストの選択肢の広さを両立させることができる。
【００２４】
また、請求項１８は、
前記第一のリテラル集合の一部又は全部からの
選択を、
ユーザーのフロントエンドとなるブラウザ画面におけるＷＥＢリンクのユーザーからの選択、又は、
フォームコントロールにおけるユーザーからの項目選択
により行うことを特徴とする
請求項１から１７のいずれか一項に記載のコンピュータプログラムを提供する。
■効果■これにより、表記ゆれによる質問ミスや質問の非効率が少なくなり、質問コストも少なくなる。また、主張の場面でも同様である。
【００２５】
本発明では、
解釈、推論又は証明結果の出力を音声合成により行う
請求項１から１８のいずれか一項に記載のコンピュータプログラムを提供する。
■ここで、「解釈結果の出力」とは例えばボディ部の手続的解釈を行う場合のprint文、echo文等の出力を言う。
■また、「推論の出力」とは、例えば、前向き推論による仮説・有力選択肢の列挙や、後ろ向き推論による解集合と各解の根拠ツリーの出力を言う。
■また、「証明結果の出力」とは、例えば、上記根拠ツリーの他、証明の経路や証明できた命題や定理の内容の出力を言う。
■効果■これにより、画面がなくても、目で他のものをみながらでも、あるいは目に頼らなくても、さらにある程度強制的にも、情報をプッシュ型で享受することができる。
また、本発明の請求項１９は、
音声認識前に、
前記第一のリテラル集合の一部又は全部のリテラルについて、
変数名近傍の区切り記号を削除して別の疑問の意味を示す文言を追加し、
音声認識後に削除した区切り記号を復活させて追加した疑問の意味を示す文言を削除して
質問文として発行することを特徴とする
請求項１から１８のいずれか一項に記載のコンピュータプログラムを提供する。
■ここで、「疑問の意味を示す文言」の例としては、日本語の「か」があり、その場合に追加する場所はリテラル末尾である。例えば英語の場合には、「ｗｈｙ」「Ｗｈｅｒｅ」等の文言をリテラルの頭に追加してもよい。
■効果■これにより、変数をリテラルに埋め込む形式と一般の自然言語形式との間での特に質問文の表記ゆれを吸収しやすくなり、自然言語での音声認識による意味（リテラルに変数を埋め込んだ形式として統一的に解釈しやすい内部表現化したもの）への対応づけが容易となる。埋め込み式の表記ゆれによる質問ミスや質問の非効率が少なくなり、質問コストも少なくなる。
【００２６】
また、請求項２０は、
請求項１から１９までのいずれか一項のプログラムを用いた方法を提供する。
【００２７】
また、請求項２１は、
請求項１から１９までのいずれか一項のプログラムを用いた装置を提供する。
【発明を実施するための形態】
【００２８】
本発明の第一の実施形態は、コンピュータとの自動音声対話（ネットワーク経由及びスタンドアロン対応）であり、第二の実施形態はテキスト対話（Ｗｅｂネットワーク経由及びスタンドアロン対応）である。自然法則を用いたコンピュータの一般的な仕組みやこれらの要素技術の一般的な構成については周知であり本発明の本質とも異なるので、ここでは詳述しない。
第一の実施形態である自動音声対話では、独居の時間が多い高齢者等が、その居住地方の方言により、自分の行動や、家族・友達との思い出や、ご近所のニュースや、近隣の天気・地域サービス・お買い物等についての問いかけや自動情報プッシュができるように構成されている。
第二の実施形態であるテキスト対話では、中学生等がテキスト入力とテキスト応答により、「なんのために生きるか？」「なぜ仕事をするのか？」等の哲学的な問答ができるようになっていると同時に、学課の内容についての質疑応答も可能で、最新の社会ニュースや国際ニュースの内容にもアクセスできるように構成されている。さらに、ＨＴＭＬのリンク形式で、（コンピュータ側の）既存のファクト及びルールにより応答可能な質問文やコンピュータがユーザーからのファクト主張として一時的に受入可能なリテラル（ここでは、ルールのボディ部の条件を構成する固定文字列）が提供される。この提供は「第一のリテラル集合」にあたるこれらの全部ではなく、ランダムに選んだ部分集合が提供されるように構成している。ただし、ボディ部が複数の条件からなる場合でそのうちのいくつかの条件が既に成立している（利用者から主張され（この実施形態では）クッキーに保存されている）場合には、残った条件を優先的に表示しやすいように、ランダム表示のアルゴリズムを構成している。また、順番的には、リテラルがユーザーからアクセスされた頻度の順に並んで表示されるように構成している（なお、同時に表示する個数は、別途の設定で１〜２０程度まで変更可能としている）。
ユーザーの選択により追加されるファクトは、ユーザーのテキスト入力によるファクトと同様に、本発明によるコンピュータプログラムが、元の論理プログラム（ファクト又はルールのリスト）の最終行の後に単純に行追加することにより登録するが、原則に対する例外としての追加のときは、論理プログラムの最初の行の前に挿入する。そして、解探索や推論の際に真又は偽を示すファクトが、論理プログラム（リスト）のある行に存在した場合には、以降の行にあるファクト又はルールを用いた逆の論理の証明を制限するように構成している。
いずれの実施形態にしても、動的に追加した知識（ファクト又はルール）は、その後の推論（その質問に対する処理等）にも生かすことを可能としている。また、動的に追加後に明示的に論理プログラム保存した場合には、永続的にファイルとして保存できるものとしている。
なお、いずれの実施形態でも先頭に「？」がついているリテラルのみ、さらにその一部のみを、ランダムに「第一のリテラル集合」に加えることとして、ユーザーが選択できる集合の種類及びサイズを論理プログラムのプログラマが絞りやすいようにしている。
また、いずれの実施形態でも、テキスト入力の場合には、「第一のリテラル集合」による自動補完機能（補完のゴールとなる集合が決まれば実現方法は公知である）を働かせるようにしている。
これらにより、表記ゆれの解消、入力負担の軽減が総合的に容易となる。
また、利用者が追加した知識により真であることを自動証明できるようになったばかりの事実を自動的に利用者に示すようにしている。これにより、「では、〇〇ということになりますね」という一般的な対話形式が成立しやすくなり、クライアントからの明示的な質問を要しない能動的なコンサルティング（クライアントへの事実のヒアリングだけに基づく）を容易になる。また、新しく証明可能になった事実をいちいち利用者が質問／検索したり、知識を追加する前の（真であることを証明可能な）事実集合と知識を追加した後の事実集合との差分を利用者が（特許文献１のシステムで「＄Ａ？」形式の質問文をファクト／ルール主張（新規登録）の前後で２回用いて証明可能なファクト集合の差分を得る等して）明示的に分析したりする手間が省ける。また、コンピュータからの問い（ヒアリングというより誘導尋問に近い場合もある）によって知識を追加した／する（＝認めた／認める）ことによる認知上の副作用や注意すべき点・ＴＯＤＯ（技術上、正確性の保証上、用途上、検討上の）等を（真偽や解とともに）利用者に体系的に示したりすることが、より手軽にモレなく簡潔に可能となる。
【実施例】
【００２９】
以下に、第一の実施形態（音声認識によるユーザー選択）の簡単な実施例を構成するテキストデータを示す。
＝＝＝
＜論理プログラム（コンピュータに登録されているルール及びファクトからなるリスト）＞
その黒鯛を＄｛どこで｝釣りました
その鉄砲ギスを＄｛どこで｝釣りました
・・・
＄Ａを＄Ｂで釣りました：＝＄Ａは＄Ｂで釣れました
その黒鯛は徳光海岸で釣れました
⇒  変換する前のリテラル：          その黒鯛を＄｛どこで｝釣りました  
⇒  音声認識のための表現：          その黒鯛をどこで釣りましたか  
⇒  選ばれたときに発行する質問文：  その黒鯛を＄｛どこで｝釣りました？
＝＝＝
上の例では、
本発明によるコンピュータプログラムが、
論理プログラムの１行目のリテラル「その黒鯛を＄｛どこで｝釣りました」を、
音声認識エンジンと利用者が解釈しやすい表現である「その黒鯛をどこで釣りましたか」へと、
音声認識前に機械的に変換して他の選択肢（例えば「その鉄砲ギスをどこで釣りましたか」等）とともに
音声認識エンジンに認識候補リストとして渡し、
返された最尤候補である「その黒鯛をどこで釣りましたか」を、
あらかじめ対応づけて記憶していた「その黒鯛を＄｛どこで｝釣りました」へと変換して「？」をつけて
質問文として発行することになる。
【００３０】
以下に、第二の実施形態の簡単な実施例（Ｗｅｂネットワーク版）を構成するテキストデータを示す。
＝＝＝
＜論理プログラム（コンピュータに登録されているルール及びファクトからなるリスト）＞
１行目：  ＄Ａと家族：＝？＄Ａと結婚した，？＄Ａと離婚していない
２行目：＄Ａと友達：＝＄Ａと仲がよい，？＄Ａとは長いつきあい
３行目：＄Ａと恋人：＝＄Ａと仲がよい，＄Ａとは異性，？＄Ａとはデートする，
４行目：？＄Ａは＄Ｂ釣りの師匠：＝＄Ａと仲がよい，？＄Ａにはいつも＄Ｂ釣りを教えてもらっている
５行目：太郎と仲がよい
６行目：太郎とは異性
＜第一のリテラル集合＞
＄Ａと結婚した
＄Ａと離婚していない
太郎とは長いつきあい
太郎とはデートする
太郎にはいつも＄Ｂ釣りを教えてもらっている
太郎は＄Ｂ釣りの師匠
＜上記リストを元に、３つしか表示しないという設定と、優先表示方針（自動表示の条件が揃いそうなルール中のまだ揃っていない条件を優先）と、乱数も用いてコンピュータが自動で抽出した、ある場面でユーザーが選択しうるＷｅｂリンクの表示内容（表示順序はルール中で条件が成立している割合と変数を含まない度合）＞
太郎とはデートする
太郎とは長いつきあい
太郎にはいつも＄Ｂ釣りを教えてもらっている
＜ユーザーによる「太郎とは長いつきあい」の選択を受けてコンピュータがユーザーに自動的に示す内容＞
「太郎と友達」なんですね？
＝＝＝
この実施例では、論理プログラム中のリテラルのうち、頭に「？」のついたリテラルの集合のみを、ユーザーが低コストで表記ゆれなく選択しやすいようにした
「第一のリテラル集合」としている。
このうち、サーバーサイドでユーザーに提供するために準備したＷｅｂ画面（ＨＴＭＬ）のリンクとしては、３つを選択している。「太郎とはデートする」が最初に選択されているのは、論理プログラムの３行目のルール（まだ自動表示（：＝）の条件が揃っていない）の条件が、５行目の「太郎と仲がよい」および６行目の「太郎とは異性」によって、３分の２まで満たされているため、本発明によるコンピュータプログラムが、他の選択肢（同様に２分の１しかみたされていない）よりも優先して表示しているためである。ついで「太郎とは長いつきあい」が表示されているのは、「太郎にはいつも＄Ｂ釣りを教えてもらっている」よりも、変数が少ないためであり、このような順序で表示されるようにプログラムしている。
なお、＜第一のリテラル集合＞の３番目の「太郎とは長いつきあい」、４番目の「太郎とはデートする」、５番目の「太郎にはいつも＄Ｂ釣りを教えてもらっている」と６番目の「太郎は＄Ｂ釣りの師匠」は、論理プログラムの５行目のファクト「太郎と仲がよい」が２行目から４行目のルールの条件１「＄Ａと仲がよい」と単一化したときの＄Ａの変数束縛
が、それぞれのルールの他の条件やヘッドのリテラルに波及したものである。
ここで、「太郎とは長いつきあい」を選択した場合は、２つの条件がいずれも成立し、かつ、自動表示を示す「：＝」が用いられている（通常は「：−」）ため、本発明によるコンピュータプログラムが自動的に＄Ａを「太郎」で埋めたヘッドである「”太郎と友達”なんですね？」を自動的にプッシュ表示することになる。例えばここで、ヘッドのリテラルをより長く詳しくすることにより、それぞれの状況（各ルールの条件の成り立ち具合）に応じた適格なアドバイスを適時に表現することも可能となる。
【００３１】
これらのいずれの実施例でも、
ユーザー（利用者）に真偽を問うてよい旨の印（「？」）のついたリテラルについて、
利用者に問わずに真と仮定した解集合（例えば、「・・・（仮定内容）なら〜（結論内容）」の集合等）も提供するようにしている。
これは、仮定法形式「・・・なら〜」の解を提供することに相当し、事実を確認してから結論を出すよりも
場合分けを含む知識そのものを提供したほうが
コミュニケーションコスト的にも利用者の納得度でも優れている場合に有利だからである。
ここで「仮定した解集合」とは、例えば、”「明日晴れ」なら「釣りに行くべき」”等といった、
”〜なら・・・”形式の集合（あるいはリスト）等として表現することができる。
これにより、利用者から（場合によっては個人情報も含まれうるような）知識を引き出すことなく
（傍受されるリスクを減らしながら）、利用者に必要な知識や情報や結論・根拠を
実質的に十分に提供して問題解決につなげることを可能とする。これは、ボディの条件をいわば動的にヘッドに移項してより柔軟で頑強な情報提供をも可能にするメカニズムとなる。
【００３２】
こうしたいくつかの実施例は、
、
同一発明者による以下の特許明細書（上記、特許文献１からの抜粋）の実施の形態に、本発明に特有の上記機能を追加で実装することができる。
以下の、特許文献１の引用は、本明細者の実施可能性面、進歩性面の補足目的も含んだものである。
＝＝＝ 
＜特許文献１の課題＞ 自然言語に変数を埋め込む形式で表現した知識をコンピュータでＰＲＯＬＯＧ同様に自動処理することを実現可能にし、述語論理レベルの網羅的な演繹や解探索（自動単一化処理、自動導出処理、そのための後ろ向き推論、バックトラック）を実現すること。
変数が格構造に縛られない利点を十分に生かし、処理を高速化し、証明や学習等のため結果を見やすく表示すること。
＜特許文献１の解決手段（概要）＞
人間が、ＰＲＯＬＯＧにおける「事実」、「ルール」又は「ゴール」の入力にあたり、ＰＲＯＬＯＧにおける「リテラル」にあたる内容の定数部分と変数部分とを文字種、デリミタ又はエスケープ文字により区別してコンピュータに入力し、
コンピュータが、文の主部、述部等の境界をまたがりうるものとして変数を取扱いながら、その入力に含まれる文の自動単一化処理、自動導出処理又はその両方を行う。
変数を含みうる文であるパターンと、変数を含まない文である定数文字列との単一化を、パターンに最初に出現する変数の最長一致解を求めて、該最長一致解の文字列を後ろから空文字になるまで削る過程を該パターンに代入してできる
各新たなパターンについて、該新たなパターンができる前提となった削る過程の解の各状態をそれぞれ記憶しながら、再帰的に同様に変数がなくなるまで繰り返し、変数がなくなったときに単一化した各途中の解の状態を結合して各単一化の答えを得る。
パターン中の固定文字列が最長一致解を削る過程の文字列に含まれるか等を検出して高速化する。
パターン対パターンの単一化は語頭や語尾の一致に着目して高速化する。全探索の具体的手法も提供する。
＜特許文献１の解決手段（全文、ただし一部本発明と混同しないように加筆・修正）＞
（０００９）
本発明は、かかる課題に鑑みてなされたものであり、特許文献１の請求項１は、
コンピュータが、論理型プログラミング言語ＰＲＯＬＯＧの機能の一部又は全部を自動的に行う方法であって、
人間が、ＰＲＯＬＯＧにおける「事実」、「ルール」又は「ゴール」の入力にあたり、ＰＲＯＬＯＧにおける「リテラル」にあたる内容（以降、「文」と呼ぶ）の定数部分と変数部分とを文字種、デリミタ又はエスケープ文字により区別してコンピュータに入力すること、
コンピュータが、文の主部、述部、主語、述語、目的語、補語、連用修飾語、連体修飾語又は文の境界をまたがりうるものとして変数を取扱いながら、上記「事実」、「ルール」又は「ゴール」の入力に含まれる文の自動単一化処理、自動導出処理又はその両方を行うこと、
を特徴とする処理方法を提供する。
ここで、「人間が、・・・定数部分と変数部分とを文字種、デリミタ又はエスケープ文字により区別してコンピュータに入力する」とは、人間が本発明によるアプリケーションソフト（処理系）の入力欄内やコマンドプロンプト後等に（フロントエンドプロセッサ等を介して又は介さずに）直接入力すること、インターネットブラウザや文章編集ソフト等からコピーペーストやカットペーストすること、別途入力して保存してあったテキストファイル等を読み込んだり、引用したり、参照したりすること等を含む。
また、「コンピュータが、文の主部、述部、主語、述語、目的語、補語、連用修飾語、連体修飾語又は文の境界をまたがりうるものとして変数を取扱い」とは、日本語等の助詞等や英語等の前置詞等を介した明示的な区切りのある格構造（構文解析結果や意味解析結果の階層構造に該当するものを含みうる）の境界（明示的な区切り）をまたがりうるだけでなく、英語等の例えばＳＶ形式・ＳＶＯ形式・ＳＶＯＯ形式・ＳＶＯＣ形式のＳとＶの境界、ＶとＯの境界、ＶとＣの境界等をまたがり得、重文や複文の文の境界等をもまたがり得るものとして取り扱うモードを含む（逆に、取り扱わないモードがあってもよい）。これらの場合、変数に入り得る解候補として、文全体や、文全体を構成する文字列から文としての文法構造による区切りの単位を無視して任意の部分文字列を抽出したもの、さらには階層的な参照構造をもつ複文・重文やもっと長い論文等の全体や、さらにそれらの任意の部分文字列が対象となる（なお、「文の境界」をもまたがりうるものとして取り扱う場合であって、知識源の集合を扱う（例えば、ファイルにまとめた知識源の集合を一括して読み込む、書き込む、参照する、等する）場合には、文の境界「以外」に知識源どうしの区切りが必要となるため、このような区切りとして、例えば、改行コードやタブコード等を用いることができる）。
これにより、自然言語に変数を埋め込む形式で表現した知識や情報も、普通の文章形式の知識や情報も、それらの間での現実的な相互活用の可能性が十分に開けた一元的な知識源として、両者を特に区別せずにコンピュータで自動処理することが可能になる（上記「困難性Ａ」の克服）。
「現実的」な相互作用の可能性が「十分」に開けるためには、コンピュータによる自動処理が検索処理系として備えるべき１）検索式（パターンを指定する表現）の簡便性、２）十分な適合率（解の正確性）、３）十分な再現率（解候補を抽出する上での網羅性）を備えていなければならないが、本発明では、文中の自由な（すなわち、文法や意味の区切りに制限されない）場所に変数（複数種類でもよく複数回でもよい）の埋め込みを許容し（簡便性を確保し）つつも、ＰＲＯＬＯＧの知識処理手順（と内在する知識解釈方針）に基本的に沿うことにより、他の処理系におけるようなハイブリッドな知識処理手順（と、そのハイブリッドな処理手順に対応する複雑な知識解釈方針）によって起こりうる適合率（解の正確性）低下のリスクを回避しつつ、「文の主部、述部、主語、述語、目的語、補語、連用修飾語、連体修飾語又は文の境界をまたがりうるものとして変数を取扱」うことにより、自然言語の区切り表現（読点、句読点、カッコ、コンマ、ピリオド、等）や修飾的なフレーズ（形容詞句、副詞句、必須でない格の表現、等）による指定パターンの泣き別れ出現が原因となる不当な不一致（正規表現的なアンマッチ）を防ぎ、格構造の明示されない表層的な文字列表現間（検索式と知識源の間）での一定の再現性（解候補を抽出する上での網羅性）を確保可能としている。また、知識源となった自然言語の正確な文脈（前後の文字列）を損ないにくい一体的・連続的な引用・抽出（変数への解候補としての）も可能となり、結局、その透明性・単純性により推論の実質的な健全性（根拠や推論経緯の正当性）の確認・検証が手軽かつ容易となり、根拠がいつも明確であるという現実的な安心感を利用者にもたらし、全体として、変数が格構造に縛られない（さらに、格構造のルール（出現順序等）について知らなくてもよく、引数の順番が間違っているかもしれないという不安もない）という仕様の利点を十分に生かしきることを可能にする。
なお、本発明は日本語（一文字の情報量が多く、単語の間にスペースがない）を第一の対象にしているため、文字を処理単位、区切りの単位としている内容が多いが、英語等（一文字の情報量が少なく、一文の文字数は多いが、単語の間にスペースのあるもの）は、スペースで区切った単語を単位として同様の処理をすることも可能である。
（００１０）
また、特許文献１の請求項２は、
前記自動単一化処理において、
変数を含みうる文であるパターン（定数部分と変数部分とを文字種、デリミタ又はエスケープ文字により区別したもの）と、変数を含まない文である定数文字列との単一化を、
パターン（例：＄Ｘと＄Ｙは＄Ｚが好き）に最初（又は最後）に出現する変数（例：＄Ｘ）の最長一致解（例：太郎と次郎）を求めて、該最長一致解の文字列を後ろ（又は前）から空文字になるまで削る過程（例：太郎と次郎＞太郎と次＞太郎と＞太郎＞太＞空）を該パターンに代入してできる各新たなパターン（例：「太郎と次郎と＄Ｙは＄Ｚが好き」＞「太郎と次と＄Ｙは＄Ｚが好き」＞「太郎とと＄Ｙは＄Ｚが好き」＞「太郎と＄Ｙは＄Ｚが好き」＞「太と＄Ｙは＄Ｚが好き」＞「と＄Ｙは＄Ｚが好き」）について、該新たなパターンができる前提となった削る過程の解の各状態（＄Ｘ＝太郎と次郎＞太郎と次＞太郎と＞太郎＞太＞空）をそれぞれ記憶しながら、
再帰的に同様に変数がなくなるまで繰り返し、
変数がなくなったときに単一化した各途中の解の状態（例：真（＄Ｘ＝太郎と次郎，＄Ｙ＝三郎），真（＄Ｘ＝太郎，＄Ｙ＝次郎と三郎））を結合して各単一化の答え（例：答え１＝（＄Ｘ＝太郎と次郎，＄Ｙ＝三郎），答え２＝（＄Ｘ＝太郎，＄Ｙ＝次郎と三郎）を得ることを特徴とする
特許文献１の請求項１に記載の処理方法を提供する。
ここで、「（又は最後）」は「（又は前）」に対応しており、最後に出現する変数から代入するときは、削り始めが前からとなる必要があることを意味する。
これにより、最長一致解から最短一致解に至るすべての可能性について確実に網羅した各解候補の状態を検証し、網羅的な答え（さらに絞りこまれた解候補の集合）を提供することが可能になる。
（００１１）
また、特許文献１の請求項３は、
空文字になるまで徐々に削るかわりに、別途求めた最短一致解までしか徐々に削らないことを特徴とする
特許文献１の請求項２に記載の処理方法を提供する。
これにより、最短一致解未満の長さから「空」文字までの解探索の計算を節約することができ、自動処理の高速化が可能となる場合がある。
（００１２）
また、特許文献１の請求項４は、
空文字になるまで徐々に削る際、
パターン中で該変数が最初（又は最後）に出現した直後（又は直前）の固定文字である１文字Ｃ（直後（又は直前）が別の変数でその解が空文字でないときは該別の変数に解候補として代入されている解候補の最初（又は最後）の１文字Ｃ）が該最長一致解に含まれる場合に、
該最長一致解の文字列の最後（又は最初）からそのＣに最初にあたるまでの部分文字列をそのＣを含め削ることを特徴とする
特許文献１の請求項２又は３に記載の処理方法を提供する。
ここで、「（又は最後）」は「（又は直前）」に対応しており、最後に出現する変数から代入するときは、削り始めが前からとなる必要があることを意味する。
これにより、変数の直後（又は直前）の固定文字にマッチしない解候補の列挙とその解候補を前提とした探索を節約することができ、自動処理の高速化が可能となる場合がある。
（００１３）
また、特許文献１の請求項５は、
前記自動単一化処理又は自動導出処理において、
前記「ゴール」（「サブゴール」を含む。以下同じ）となる束縛情報を求める際、
該「ゴール」を構成する各文について独立して束縛情報を求め
各束縛情報の積集合が空でない場合に戻り値真とその積集合を返す
特許文献１の請求項１から４のいずれか一項に記載の処理方法を提供する。
ここで、束縛情報とは、各変数に同時にそのような解候補を代入してみたか／すべきかということを示す情報である。各変数への一つの束縛の仕方を示す束縛情報は、「，」をＡＮＤ結合と解釈することにより、「変数名１＝値１，変数名２＝値２，・・・，変数名Ｎ＝値Ｎ」といったリスト形式で表現することができる一方、複数の束縛の仕方は、そのようなリストの集合として、あるいは、「，」ではなくＡＮＤ／ＯＲ結合を明示して複数束縛間の共通部分をくくりだした形や、複数束縛の全体を標準化した連言標準形や選言標準形で表現することができる。
これにより、同時に満たすべきパターン（文）が複数あり、パターン（文）間で同名の変数には同じ解が入るべきとする問題形式の場合（例えば、ユーザからのそのようなＡＮＤ結合問合せや、ルールのボディ部に複数の文がある場合）に、ルールのより右側のパターンについて、より左側のパターンの各単一化結果ごとに多大な全文探索処理を無駄に繰り返す可能性がすくなくなり、ボディ部をバックトラックしながら深さ優先探索する非効率（変数を自然言語に埋め込む形式においてより顕著な非効率）を回避し、同時に満たすべき各パターンごとの処理を単純化することができる。また、推論過程の表示や検証（完全性や健全性）をわかりやすく、容易にする。また、ルールの意味として必要な直観にとって余計であり定義されるべきでなかった順序性（ボディ部の文間の）が推論過程に副作用を与えることを防ぐことができる。
（００１４）
また、特許文献１の請求項６は、
前記自動単一化処理又は自動導出処理において、
前記「ゴール」となる束縛情報を求める際、
既存の束縛情報を最初に空とし、
「ゴール」が含む文集合を、既存の束縛情報の適用下で該一文が真となりうるかと該なりうるための追加の束縛情報について自動計算して該追加の束縛情報を該既存の束縛情報に加えながら該一文を除いて再帰的に小さくしていき、
真となりうるまま該文集合が空集合になったときの既存の束縛情報を「ゴール」となる束縛情報とする
特許文献１の請求項１から４のいずれか一項に記載の処理方法を提供する。
ここで、「再帰的に小さくしていき」とは、再帰が深くなるほど文集合が小さくかつ束縛情報が複雑になる（より多くの変数が束縛され、束縛する値の範囲がより絞られる）よう、例えば、Ｃ言語で再帰呼び出しをする処理や、独自に宣言し定義した深さ優先探索用のスタック構造（構造体の配列とスタックポインタ等）によって同等の再帰的処理を実現することをいう。
これにより、変数を自然言語に埋め込む形式で表現された、同時に満たすべき複数パターンのＡＮＤ結合からなるオープンクエスチョンを自動処理する問題を、より単純かつ再帰的な同一構造を持つ部分問題へとシンプルに変換し、推論過程の表示や検証（完全性や健全性の）を容易にする。
（００１５）
また、特許文献１の請求項７は、
前記自動単一化処理又は自動導出処理において、
変数を含まないパターンと変数を含まない事実との単一化を行う場合、
パターンと事実が文字列として一致する場合に真を返す、又は
パターンと事実が文字列として一致しない場合に偽を返す
特許文献１の請求項１から６のいずれか一項に記載の処理方法を提供する。
これにより、シンプルかつ迅速に探索を行うことができる。
なお、「変数を含まない事実」が句点等で区切られた複数の文を含む場合。「文字列としての一致」は、パターンの文字列が事実の文字列の部分に一致することであってもよいとするモードを設けることもできる。
これにより、同型の複数の情報を一つの事実にまとめて表現して探索の対象とすることができる。また、複数要素間のなんらかの順序性（例えば、大きさ、貴重さ、古さ・・・等）も表現しやすくなる。
（００１６）
また、特許文献１の請求項８は、
前記自動単一化処理又は自動導出処理において、
変数を含まないパターンとホーン節の変数を含まないヘッド部との単一化を行う場合、
パターンとヘッド部が文字列として一致する場合に、該ホーン節のボディ部をサブゴールとして特許文献１の請求項５又は６に記載の処理方法を適用した結果を返し、
一致しない場合に偽を返す
特許文献１の請求項１から７のいずれか一項に記載の処理方法を提供する。
これにより、変数を自然言語に埋め込む形式で表現するルールのヘッドが変数を含まない場合の健全な機械的解釈と、シームレスでわかりやすくかつシンプルで統一的な処理メカニズムと、対応する推論過程の説明を与えることができる。
（００１７）
また、特許文献１の請求項９は、
前記自動単一化処理又は自動導出処理において、
変数を含まないパターンと変数を含むヘッド部をもつホーン節との単一化を行う場合、
特許文献１の請求項２から４のいずれか一項に記載の処理方法における「定数文字列」として当該パ
ターンを用いかつ同処理方法における「パターン」として当該ヘッド部を用いて処理して求めた各束縛情報について、
当該ホーン節のボディ部に適用したものを特許文献１の請求項５又は６に記載の処理方法の「サブゴ
ール」として処理した結果が真となるものが存在すれば真を返す、又は
存在しなければ偽を返す
特許文献１の請求項１から８のいずれか一項に記載の処理方法を提供する。
これにより、変数を自然言語に埋め込む形式で表現するルールのヘッドが変数を含み、このルールを起動したパターンが変数を含まない場合に、ボディ部の変数の束縛範囲を事前に制限して、真偽判断の処理を高速化することができる。
また、健全な機械的解釈と、シームレスでわかりやすくかつシンプルで統一的な処理メカニズムと、対応する推論過程の説明を与えることができる。
（００１８）
また、特許文献１の請求項１０は、
前記自動単一化処理又は自動導出処理において、
変数を含むパターンと変数を含まない事実との単一化を行う場合、
特許文献１の請求項２から４のいずれか一項に記載の処理方法における「パターン」として当該パタ
ーンを用いかつ同処理方法における「定数文字列」として当該事実を用いて処理した結果を返す、
特許文献１の請求項１から９のいずれか一項に記載の処理方法を提供する。
これにより、パターンと（静的な）事実との間のすべての解候補（格変数への）が洗い出されて「結果」として返されるため、上記「困難性Ａ」克服のための基礎的な機構をシンプルに与えることができ、推論過程の可視化や検証だけでなくさらにはルールの修正等といったユーザーの手を介した学習をも容易にする。
（００１９）
また、特許文献１の請求項１１は、
前記自動単一化処理又は自動導出処理において、
変数を含むパターンと変数を含まないヘッド部をもつホーン節との単一化を行う場合、
特許文献１の請求項２から４のいずれか一項に記載の処理方法における「パターン」として当該パタ
ーンを用いかつ同処理方法における「定数文字列」として当該ヘッド部を用いて処理した結果を真とする束縛情報（Ｃ）が存在する場合で、かつ、当該ホーン節のボディ部を請求項５又は６に記載の処理方法の「サブゴール」として処理した結果が真の場合に当該束縛情報（Ｃ）とともに真を返す、
特許文献１の請求項１から１０のいずれか一項に記載の処理方法を提供する。
これにより、変数を含むパターンと（変数を含まない静的な）ヘッドとの間のすべての解候補（各変数への）が洗い出されて「結果」として返されるため、上記「困難性Ａ」克服のための基礎的な機構をシンプルに与えることができ、推論過程の可視化や検証だけでなくさらにはルールの修正等といったユーザーの手を介した学習をも容易にする。
また、より単純かつ再帰的な（または相互再帰的な）同一構造を持つ部分問題へとシンプルに変換し、推論過程の表示や検証（完全性や健全性の）を容易にする。
また、変数を自然言語に埋め込む形式で表現するルールのヘッドが変数を含まない場合の健全な機械的解釈と、シームレスでわかりやすくかつシンプルで統一的な処理メカニズムと、これらに該当する推論過程の説明を与えることができる。
（００２０）
また、特許文献１の請求項１２は、
前記自動単一化処理又は自動導出処理において、
変数を含むパターンと変数を含むヘッド部をもつホーン節との単一化を行う場合、
パターンとヘッド部の頭、尾又は両方に存在する文字数分の固定文字が一致していない場合に偽を返す、
特許文献１の請求項１から１１のいずれか一項に記載の処理方法を提供する。
これにより、一律の探索に比して、明らかに大幅な計算量節約と処理速度向上が図れる。
（００２１）
また、特許文献１の請求項１３は、
前記自動単一化処理又は自動導出処理において、
変数を含む第一のパターンと変数を含むヘッド部をもつホーン節との単一化を行う場合、
パターンとヘッド部の頭及び尾に存在する文字数分の固定文字が一致している場合、   特許文献１の請求項５又は６に記載の処理方法における「サブゴール」として当該ホーン節のボディ
部を適用した結果が真となる各束縛情報により当該ホーン節のヘッド部を束縛して得られる各第二のパターンについて、
第二のパターンが変数を含まない場合に、
特許文献１の請求項２から４のいずれか一項に記載の処理方法における「パターン」として第一の
パターンを用いかつ同処理方法における「定数文字列」として第二のパターンを用いて処理した結果を返す、
請求項１から１２のいずれか一項に記載の処理方法を提供する。
ここで、「第二のパターンが変数を含まない場合」とは、ホーン節（ルール）において、ヘッド部に含まれるすべての変数がボディ部「にも」含まれており、ボディ部のすべての変数が定数（固定文字列）で束縛された結果としてヘッド部のすべての変数も定数（固定文字列）で束縛（代入）されたことによりヘッド部の変数が消えてヘッド部が定数文字列と見なせるようになったことをいう。
これにより、変数を含むパターンと変数を含むヘッド部をもつホーン節（ルール）との単一化をシンプルな計算モデルにより、ユーザーがトレースしやすい流れで機械的・自動的に行うことができる。
すなわち、変数を含むパターンと変数を（各束縛情報により）含まなくなった（＝定数文字列化した）ヘッド部との間のすべての解候補（パターンの各変数へ代入すべきもの）を洗い出して「結果」として返す形に、元々のより複雑な問題（変数対変数の単一化）を帰着（問題を変換）させることにより、上記「困難性Ａ」克服のための基礎的な機構をシンプルに与え、思考プロセスとしても表現しやすいものにできている。また、この「帰着（問題の変換）」に当たって、より単純かつ再帰的な（または相互再帰的な）同一構造を持つ部分問題へとシンプルに変換しているため、推論過程の可視化や検証（完全性や健全性の）だけでなくルールの修正等といったユーザーの手を介した学習をも容易にする。   結局、変数を自然言語に埋め込む形式で表現するルールのヘッドが変数を含む場合の健全な機械的解釈と、シームレスでわかりやすくかつシンプルで統一的な処理メカニズムと、これらに該当する推論過程の説明を容易に与えることができる。
（００２２）
また、特許文献１の請求項１４は、
変数を含む事実が入力されることをコンピュータが制限することを特徴とする
特許文献１の請求項１から１３のいずれか一項に記載の処理方法を提供する。
ここで、変数を含む事実（ルールでない知識源）とは、例えば、「＄Ｘは＄Ｘである。」（トートロジー的に恒真となる事実）や「＄Ｘは＄Ｙである。」（表層的な文型だけが合致していれば真となってしまう根拠のない事実）等がある。
これらがコンピュータに入力されることを制限することにより、パターン（変数を含みうる文）と事実（変数を含まない文（＝固定文字列））との自動単一化処理の計算が単純になり、自動処理による高速な回答が可能となる。また、根拠のない事実を知識源に混入しにくくする。
（００２３）
また、特許文献１の請求項１５は、
前記ルールがいわゆるホーン節と同様の形式であり、ヘッド部がボディ部に出現しない変数を含むことをコンピュータが制限することを特徴とする
特許文献１の請求項１から１４のいずれか一項に記載の処理方法を提供する。
ここで、「ヘッド部がボディ部に出現しない変数を含むことをコンピュータが制限する」とは、ヘッド部が「＄Ｘは素敵」であり、ボディ部が「＄Ｙは強い，＄Ｙは＄Ｚに優しい，＄Ｚは子供，＄Ｙは賢い」といったように、ボディ部のすべての文中の変数（この例では、＄Ｙと＄Ｚ）が束縛（代入）されても、ヘッド部の変数（この例では、＄Ｘ）が束縛されないまま残るようなルールが知識源として入力されたり、記憶されたり、起動されたりすることをコンピュータが制限することをいう。このようなルールは、事実の場合と同様に、ヘッド部に束縛されない変数を残すことにつながるため、健全でない推論結果を生み出しやすく、推論のスピードをも低下させる原因となる。
こうしたルールがコンピュータに入力されることを制限することにより、パターン（変数を含みうる文）とヘッド部（特許文献１の請求項１３により変数を含まない文（＝固定文字列）の集
合に帰着可能）との自動単一化処理の計算が単純になり、自動処理による高速な回答が可能となる。また、根拠のない推論結果を生み出しにくくする。
（００２４）
また、特許文献１の請求項１６は、
前記自動単一化処理又は自動導出処理において、
束縛されない変数が互いに残っているパターンとヘッド部又は事実との自動単一化処理を、
固定文字列として極小となる解の集合を求めて返すことにより行うことを特徴する、 特許文献１の請求項１から１３のいずれか一項に記載の処理方法を提供する。
ここで、「固定文字列として極小となる解の集合」の例としては、「＄Ａは＄Ｂ」と「＄Ｃも＄Ｄ」との間の自動単一化の結果として、｛（＄Ａ＝”も”、＄Ｂ＝＜空＞、＄Ｃ＝＜空＞、＄Ｄ＝”は”），（＄Ａ＝空、＄Ｂ＝”も”、＄Ｃ＝”は”、＄Ｄ＝空）｝という２つの解を提供することがある。
これにより、無限個の解が存在する場合にも解の例（特に最小のシンプルな例）を提供することが可能になる。
（００２５）
また、特許文献１の請求項１７は、
前記自動単一化処理又は自動導出処理において、
束縛されない変数が互いに残っているパターンとヘッド部又は事実との自動単一化処理を、
変数を含む文字列として極小となる解の集合を求めて返すことにより行うことを特徴する、
特許文献１の請求項１から１３のいずれか一項に記載の処理方法を提供する。
ここで、「固定文字列として極小となる解の集合」の例としては、「＄Ａは＄Ｂ」と「＄Ｃも＄Ｄ」との間の自動単一化の結果として、｛（＄Ａ＝”＄Ｃも”、＄Ｂ＝＜自由＞、＄Ｃ＝＜自由＞、＄Ｄ＝”は＄Ｂ”），（＄Ａ＝＜自由＞、＄Ｂ＝”も＄Ｄ”、＄Ｃ＝”＄Ａは”、＄Ｄ＝＜自由＞）｝という２つの解を提供すること等がある。変数を束縛する値（変数に代入される値）の文字列長（ただし、変数が含まれる場合は変数の出現あたり１文字と見なす）の合計（解組みを通じた）が極小となるものと考えることができる。
これにより、無限個の解が存在する場合にも解の一般形を提供することが可能になる。
（００２６）
また、特許文献１の請求項１８は、
束縛されない変数が互いに残っているパターンとヘッド部又は事実との各文字列の頭及び尾に共通して存在する文字数分の固定文字が一致していない場合、
偽を返すことを特徴とする、
特許文献１の請求項１６又は１７に記載の処理方法を提供する。
これにより、単一化の可能性のない自動探索を節約し、自動処理を高速化することができる。
（００２７）
また、特許文献１の請求項１９は、
前記固定文字列又は変数を含む文字列として極小となる解の集合を求める際、
束縛されない変数が互いに残っているパターンとヘッド部又は事実とからなる両文字列（第一の文字列と第二の文字列とする）に含まれる各変数が、各文字列内では共通に束縛され、文字列間では独立に束縛されるものとしながら（あるいは、同名変数を共通に束縛するスコープを各文字列内のみ（あるいは、文字列間は変数のスコープ外）としながら）、
各変数に相手の文字列（第一の文字列中の変数には第二の文字列、第二の文字列中の変数には第一の文字列）のあらゆる部分文字列（＜空＞及び文字列全体も含む）又は自分自身を代入してみて両文字列が一致する場合を探す全探索により極小となる解の集合を求めることを特徴する、
特許文献１の請求項１６又は１７に記載の処理方法を提供する。
「又は自分自身を・・・代入」とは、文字列中の「＄Ｘ」には「＄Ｘ」そのものを代入することをいい、たまたま第一の文字列にも第二の文字列にも＄Ｘ（互いのスコープは異なっている）が含まれるときは、第一の文字列の＄Ｘと第二の文字列の＄Ｘをあえて区別できるように（例えば、「＄Ｘ１」と「＄Ｘ２」、等として）代入することによっても明らかに健全な計算を行うことができる。
これにより、健全性と停止性（計算の有限性）を確保しながら解集合の一定の網羅性（問題（パターン対）の性質によっては完全性）を確保することができる。
（００２８）
また、特許文献１の請求項２０は、
束縛されない変数が互いに残っているパターンとヘッド部又は事実とからなる両文字列そのものではなく、
束縛されない変数が互いに残っているパターンとヘッド部又は事実との各文字列の頭及び尾に共通して存在する文字数分の固定文字を両者から除いて残る二つの文字列に相当する両文字列について、
特許文献１の請求項１９に記載の処理をする処理方法を提供する。
これにより、解集合の一定の網羅性（場合によっては完全性）を保ちながら全探索の空間を小さくでき、処理が高速化される。
例えば、「石川の＄Ａは＄Ｂが好き。」と「石川の＄Ｃも＄Ｄアイスが好き。」との間の自動単一化の過程として、そのまま解を探すのではなく、頭尾の共通部分を削除して   ”＄Ａは＄Ｂ”
と
”＄Ｃも＄Ｄアイス”
とした上で、全探索により「＄Ａ」と「＄Ｂ」それぞれに、”＄Ｃも＄Ｄアイス”の全ての部分文字列（これは、＄Ｃや＄Ｄといった変数（＄｛・・・｝形式の変数も同じ）は１文字とすると、６文字であるため、６×（６＋１）／２＋１（＜空＞分）＋１（自分自身を代入分）＝２３通りある）を代入しつつ、同様に、「＄Ｃ」と「＄Ｄ」それぞれに”＄Ａは＄Ｂ”の全ての部分文字列（これは、同様に３文字であるため、３×（３＋１）／２＋１＋１＝８通りある）を代入してみてできる全ての両文字列（２３×２３×８×８通り）について、両文字列が一致した場合（例えば、（
”もはアイス”，
”はもアイス”，
”＄Ａはもアイス”，
”＄Ｃもはアイス”，
”＄Ａはも＄Ｄアイス”
※ちなみに”＄Ｃもは＄Ｂアイス”は一致しない
）となった場合の代入組の集合｛
（＄Ａ＝”も”、＄Ｂ＝”アイス”、＄Ｃ＝＜空＞、＄Ｄ＝”は”），
（＄Ａ＝＜空＞，＄Ｂ＝”もアイス”，＄Ｃ＝”は”，＄Ｄ＝＜空＞），
（＄Ａ＝”＄Ａ”，＄Ｂ＝”もアイス”，＄Ｃ＝”＄Ａは”，＄Ｄ＝＜空＞），
（＄Ａ＝”＄Ｃも”，＄Ｂ＝”アイス”，＄Ｃ＝”＄Ｃ”，＄Ｄ＝”は”），
（＄Ａ＝”＄Ａ”，＄Ｂ＝”も＄Ｄアイス”，＄Ｃ＝”＄Ａは”，＄Ｄ＝”＄Ｄ”） ｝又は、各代入組の部分的代入の集合（例えば｛
（＄Ａ＝”も”、＄Ｂ＝”アイス”），
（＄Ａ＝＜空＞，＄Ｂ＝”もアイス”），
（＄Ａ＝”＄Ａ”，＄Ｂ＝”もアイス”），
（＄Ａ＝”＄Ｃも”，＄Ｂ＝”アイス”），
（＄Ａ＝”＄Ａ”，＄Ｂ＝”も＄Ｄアイス”）
｝）
を解として答えることができる。
なお、＄Ａ＝”＄Ａ”や＄Ｂ＝”も＄Ｄアイス”は、＄Ａや＄Ｄが自由であり、そこにどのような文字列を代入しても単一化できる（すなわち、無限の解があるということと、その無限個の解（文字列）の制約（正規表現的な形）のあり方）を示すことができる。   （００２９）
また、特許文献１の請求項２１は、
各変数に相手の文字列のあらゆる部分文字列（＜空＞及び文字列全体も含む）又は自分自身を代入してみて両文字列が一致する場合を探す全探索により極小となる解の集合を求める際、
変数に代入する部分文字列に変数が含まれる場合に、当該部分文字列に含まれる変数を両文字列にそれまで存在しなかった新しい変数で置き換えながら、該新しい変数に対しての同様の代入も以後再帰的に行いながら両文字列が一致する場合を探す全探索を行うことを特徴とする
特許文献１の請求項１９又は２０に記載の処理方法を提供する。
これにより、自文字列内の固定文字を相手文字列内の変数を介して反射的に自文字列内の変数に代入した解をも探す必要のある性格の問題（例えば、両文字列＝｛”＄Ｘは＄Ｘ”，”い＄Ｙう”｝の場合では、解候補として（＄Ｘ＝”いう”，＄Ｙ＝”うはい”）を列挙できなければならない）について、解探索の健全性を維持したまま、解候補列挙の網羅性をより高めることができる。上の例では、両文字列（「パターン対」とも呼ぶ）＝｛”＄Ｘは＄Ｘ”，”い＄Ｙう”｝から（＄Ｘ＝”いう”，＄Ｙ＝”うはい”）という解候補を列挙できることを、本発明により再帰的に（＄Ｘ＝”い＄｛Ｙ１｝う”）⇒（＄｛Ｙ１｝＝＜空＞）⇒（＄Ｙ＝”うはい”）という探索枝（探索木の一部であり、本発明に沿った幅優先探索の場合は有限回で生成可能である）を生成しうることによって、示すことができる。
「再帰的に・・・全探索」とは、例えば、各変数への各ありうる代入（前の特許文献１の請求項と同
じ）を再帰的に繰り返す幅優先探索をしながら一致する代入系列（例えば、上記の（＄Ｘ＝”い＄｛Ｙ１｝う”）⇒（＄｛Ｙ１｝＝＜空＞）⇒（＄Ｙ＝”うはい”）、等）を列挙することである。最初の代入のバリエーションは、両文字列中の変数の種類がそれぞれ２個と３個であり文字列の長さがそれぞれ６字と７字（変数はまとめて１字と数える）であれば、２個×（７×（７＋１）／２＋１＋１）＋３個×（６×（６＋１）／２＋１＋１）＝６０＋６９＝１２９通りとなる。これらの枝から派生するさらなる枝の最長深さが均等になるように幅優先探索を行う場合、代入回数等によるリミッター（上限値と比較するプログラムステップ等）を設けることにより、一回一回の探索を適当な計算量に制限することができる（再帰性によって保証されなくなった停止性や応答速度の確保）。なお、深さ優先探索とした場合にも、深さの制限や代入回数等によって計算量を制限することができる。いずれも自己再帰や相互再帰による無限ループを、再帰的な関数の呼び出しを管理するスタック構造（構造体の配列）等を設けて、先祖（より根方向）となる枝の呼出しパラメータ（その代入系列（代入文脈）に応じた両文字列の状態表現を含んでいてもよい）を現在の呼出しパラメータと比較したりすることにより回避することができる。また、両文字列の頭尾に存在する固定文字列が共通して存在する文字数分一致しているかどうかなどにより、単一化しえない枝の枝刈りを行うこともできる。なお、制限した計算量（例えば代入百万回や探索深さ２０以内）の探索により解が見つからなかった場合に「解なし（精度：代入百万回かつ探索深さ２０以内）」として、見つかった場合に、「（＄Ｘ＝”いう”，＄Ｙ＝”うはい”），（・・・），・・・（但し、精度：代入百万回かつ探索深さ２０以内）」等として探索精度を明示しながらユーザに答えることもできる。また、代入の制限回数以内かつ制限探索深さ以内で明らかに全探索できた場合（完全性のある場合）には、その旨を「解なし（全探索済）」あるいは「（＄Ｘ＝”いう”，＄Ｙ＝”うはい”），（・・・），・・・（全探索済）」等と明示して、ユーザに答えることもできる。
（００３０）
また、特許文献１の請求項２２は、
変数に代入した結果についても、各文字列の頭及び尾に共通して存在する文字数分の固定文字を両者から除いて残る二つの文字列を、
「相手の文字列のあらゆる部分文字列（＜空＞及び文字列全体も含む）」の対象となるの「相手の文字列」として、探索が進むごとに、文字列の頭又は尾に存在する固定文字数が少なくすることを特徴とする、
特許文献１の請求項１９〜２１のいずれか一項に記載の処理方法を提供する。
これにより、探索を進めるごとに（先の枝にいくほど）枝の個数が少なくなり計算量を節約することができる。
（００３１）
また、特許文献１の請求項２３は、
前記固定文字列又は変数を含む文字列として極小となる解の集合を求める際、
束縛されない変数が互いに残っているパターンとヘッド部又は事実とからなる両文字列（第一の文字列と第二の文字列とする）に含まれる各変数が、各文字列内では共通に束縛され、文字列間では独立に束縛されるものとしながら（あるいは、同名変数を共通に束縛するスコープを各文字列内のみ（あるいは、文字列間は変数のスコープ外）としながら）、
各変数に、固定文字列（空文字を含む）又は変数を含む文字列を再帰的に代入してみて解の集合を求める処理方法であって、
代入してみる変数を相手文字列の頭又は尾が固定文字である自文字列の対応する頭又は尾の変数に限定し、
代入値を、該頭である場合には該頭の固定文字もしくは固定文字列に続く新しい変数又は＜空＞とし、該尾である場合には新しい変数に続く該尾の固定文字もしくは固定文字列又は＜空＞とし、
変数に代入した結果について、各文字列の頭及び尾に共通して存在する文字数分の固定文字を両者から除くことを繰り返す、
ことを特徴とする特許文献１の請求項１６又は１７に記載の処理方法を提供する。
これにより、頭及び尾の固定文字の存在に着目して解の列挙範囲を（探索の網羅性を損なわずに）大幅に制限すること可能になり、大幅な計算量節約と高速化が可能になる。   （００３２）
また、特許文献１の請求項２４は、
前記固定文字列又は変数を含む文字列として極小となる解の集合を求める際、
束縛されない変数が互いに残っているパターンとヘッド部又は事実とからなる両文字列（第一の文字列と第二の文字列とする）に含まれる各変数が、各文字列内では共通に束縛され、文字列間では独立に束縛されるものとしながら（あるいは、同名変数を共通に束縛するスコープを各文字列内のみ（あるいは、文字列間は変数のスコープ外）としながら）、
各変数に、固定文字列（空文字を含む）を再帰的に代入してみて解の集合を求める処理方法であって、
各文字列の頭及び尾に存在する文字数分の共通する固定文字を除いてできる両文字列中の固定文字種（変数の識別子やデリミタを除いた文字種）だけを用いてできる束縛情報を、束縛する値の文字列長の合計が小さいものから順に列挙していくことにより求める、   特許文献１の請求項１６又は１７に記載の処理方法を提供する。
これにより、一定の性質をもった問題については、効率よく解に到達し、列挙することもできる。
（００３３）
また、特許文献１の請求項２５は、
求めた「変数を含む文字列として極小となる解の集合」をもとに、
当該ホーン節の変数を当該変数を含む文字列で一時的に書き換えてできるホーン節により探索を継続する特許文献１の請求項１９〜２４に記載の処理方法を提供する。
これにより、パターンとホーン節（ルール）のヘッド部とが単一化するために必要であることが計算された制約（上記の例では、変数「＄Ｃ」が”＄Ａは”という形の文字列で束縛（代入）されることでしか単一化しえないという制約の働くような単一化方針（例えば、上記最後の代入組の場合）もある）を、そのホーン節のボディ部の探索プロセスに伝播することができ、探索を効率化することができる。
（００３４）
また、特許文献１の請求項２６は、
求めた「変数を含む文字列として極小となる解の集合」をもとに、
「変数を含む文字列」の変数部分に、当該「変数を含む事実」の解組の集合としてあらかじめ定義された固定文字列組の集合の各要素を代入してできる固定文字列組の集合を返す、
特許文献１の請求項１９〜２５のいずれか一項に記載の処理方法を提供する。
これにより、変数（一個又は複数）を含む事実とその変数に埋めうる適切な答え（又は仮説）の集合とをひもづけたデータベース（例えば、「言葉方程式（登録商標）」「ＶＬＡＮＫ（登録商標）」中の知識源）と効率的に連携した解探索を行うことができる。また、似た文型をもつ大量の事実を、本発明の枠組みと連携させて効率的に管理することができる。
（００３５）
また、特許文献１の請求項２７は、
前記自動単一化処理又は自動導出処理において、
変数を含む第一のパターンと変数を含む第二のパターンとの自動単一化を行う場合、   両パターンの頭及び尾に存在する文字数分の固定文字が一致しており、かつ、同じ変数が各パターン内で一度しか出現しない場合、
無限個の解の存在を意味する情報を返す、
特許文献１の請求項１から２６のいずれか一項に記載の処理方法を提供する。
（００３６）
また、特許文献１の請求項２８は、
特許文献１の請求項１から２７のいずれか一項の方法を実行するための装置を提供する。
（００３７）
また、特許文献１の請求項２９は、
特許文献１の請求項１から２７のいずれか一項の方法をコンピュータに実行させるためのコンピュー
タプログラムを提供する。
（特許文献１の発明の効果）
（００３８）
本発明の効果は、各特許文献１の請求項について上述したとおりである。
（特許文献１の図面の簡単な説明）
（００３９）
（図１）図１は本発明を最も効果的に実施するネットワークシステムの全体図である
。（実施例１）
（図２）図２は本発明を実施するコンピュータのハードウエア構成を示した説明図で
ある。（実施例１）
（図３）図３は本発明を実施する端末における画面表示の例を示した説明図である。
（実施例１）
（特許文献１の発明を実施するための形態）
（００４０）
本発明は、ネットワークに接続された／接続されてないあらゆる種類のコンピュータ（クラウドサーバー、大型汎用機、デスクトップＰＣ、ノートＰＣ、携帯端末、本発明専用機）において実施することができるが、一般的なマルチタスク機能とウィンドウ機能をもちインターネットに接続されたＰＣにより実現した形態により説明する。
図１は本発明を最も効果的に実施するそのネットワークシステムの全体図であり、コンテンツ管理装置１は、利用者ＰＣ２又は利用者兼管理者ＰＣ２により、本発明で取り扱うコンテンツ（ルールや事実）の投稿を受け付け、所定のポリシーによって共有アクセス権やコンテンツ提供優先順位を制御しながらコンテンツを配信する公知のファイル共有サーバーでよい。利用者ＰＣ２は、その利用者ごとに、その信じる内容（や検討したい内容）を自然言語で表現したコンテンツ（ルールや事実）を本発明の方法に沿って入力して記憶し本発明の方法によって処理するコンピュータ、携帯端末等である。
図２は本発明で用いるコンピュータのハードウエア構成を示した説明図である。これは計算機の構成としては一般的なものであり、本発明の特徴は、不揮発性メモリ２ｈに記憶されたプログラム３及びコンテンツデータ４の指示や記載に従い自然法則を用いてＣＰＵ２ｅで処理される処理の内容、及び、利用者との対話プロトコル（書式）の在り方にある。
図３は本発明を実施する端末における画面表示の例を示した説明図である。図では「？＄Ａしない」という問い（オープンクエスチョン形式）に対して、図示しない記憶したリストＬの１行目の「されていやなことはなるべくしない」という事実を用いて「＄Ａ  ＝
されて嫌なことをなるべく／１／」という答えを列挙し、同様にリストＬの９行目の「いじめをしない」という事実を用いて「＄Ａ  ＝  いじめ／９／」と答えている。
（００４１）
このような実施形態においては、Ｃ＋＋言語等を介して製造されたコンピュータプログラムにより、コンピュータ（ＰＣ等）に可能なあらゆる動作を実施させることができる。したがって、自然法則を用いたコンピュータの公知の基本的な動作（レジスタやメモリやストレージへの記憶・取り出し、四則演算、比較、等）や既に開発環境等の標準ライブラリとなっている一般的な機能（変数やＮ次元配列への代入・比較・コピー、文字列や数値の操作／比較／表示、リスト構造・キュー構造・ハッシュ構造・ベクトル型等の操作、バイナリ―サーチやソート操作、正規表現によるパターンマッチ操作、ネットワーク通信操作、等）の実現方法については、本発明の本質（新規性や進歩性につながる独自の構成）とも異なり、当業者にもよく知られているので、詳述はしない。一方、このような一般的な機能を組み合わせて、本発明に固有の処理をどのような操作順序や記憶の仕方（アルゴリズムやデータ構造）で実現するかについては、以下に詳述する。このアルゴリズム等の説明、上記した課題解決手段の説明及び本発明の図面の説明を提供して開発の参考とさせることにより、標準レベルの職業的プログラマであれば、標準的なアプリケーションプログラム開発技法（Ｃ＋＋によるＧＵＩアプリケーション統合開発環境、等）を用いて、本発明の方法をコンピュータに実施させることが明らかに可能となり、また、この方法のための装置やプログラムを作成することも可能となる。
（００４２）
以下に示すアルゴリズムは、Ｃ言語／Ｃ＋＋言語等を用いて所望の「関数」を新たに定義した上で関数呼出しを行うという標準的な構造化プログラミングをベースにしたアルゴリズムであり、当業者は、下記各関数の機能分担に応じた入出力や機能切り分けを行いながら（或いは、下記に示した仕様に沿って関数群をそのままコーディングすることにより）、本発明の解決手段に相当する処理手段（プログラムや計算機）を実現することが可能となる。
（００４３）
■問い合わせＰに対する知識リストＬの処理アルゴリズム仕様
=====================================================================================================================
関数Ｑ１（Ｐ：変数を含みうるパターン，Ｌ：知識リスト）：★特許文献１の請求項に共通するメイン関数の特許文献１の実施例１★
｛
１．Ｌの最初の行の内容Ｂ（事実又はホーン節）を取り出す。
ただし、Ｌが空の場合（最初の行が取り出せなかった場合）、偽を出力して終了。
２．変数の束縛情報Ｃの初期値を空とし、下記関数Ｈ（Ｐ，Ｂ，Ｃ）を呼出し、真となる（＝マッチする）束縛情報（＝解集合）Ｃを出力。
真（＝マッチした）の場合
真（はい）を出力する（マッチした内容Ｂの行番号も添えて出力する）。
偽の場合
何もしない。
３．Ｌの次の行の内容Ｂ’が
ある場合
・Ｂ←Ｂ’とし、２に移動する。
ない場合
・２で真を一度も出力していない場合は偽（いいえ）を出力。
・終了。
｝
（００４４）
■問い合わせＰに対する知識リストＬの処理アルゴリズム仕様（事前固定文字列化版） =====================================================================================================================
関数Ｑ２（Ｐ：変数を含みうるパターン，Ｌ：知識リスト）：★特許文献１の請求項に共通するメイン関数の実施例２（事前固定文字列化版）★
｛
（事前の固定文字列化）
１．｛Ｌのみから演繹できるすべての文字列／その各文字列を演繹する根拠として用いたＬの行番集合｝を各行とする固定文字列テキストＴを求める。
具体的には、上記関数Ｑ１（”＄Ａ”，Ｌ）の出力系列（Ａ＝解１／根拠１，Ａ＝解２／根拠２，・・・）の要素を各行としてマージしたテキストＴを求める。
求める途中で無限ループになる場合について、明示的な呼出管理スタック等を用いた無限ループ検出機能により演繹を部分的に省略する。
・例えば、ホーン節の真偽の確認をある変数束縛条件下でコンピュータが行う途中で
同じホーン節の真偽を同じ変数束縛条件下で確認しようとしていないかを、
構造体（確認中のホーン節識別子，現在の変数束縛条件）をメンバーとする呼出管理スタックを管理し、
呼出し時にスタックの根に向かって同じ組み合わせがないかリニアサーチすることにより
無限ループを検出する。 
（固定文字列のみである故にＱ１よりシンプルな方法（関数Ｆ）で解集合を求める） ２．テキストＴの各行ｔにつき、下記関数Ｆ（Ｐ，ｔ，Ｃ）が真となるＣをすべて出力する。
（最終結果の出力）
３．Ｃが一つでもあれば真を出力し、なければ偽を出力する。
｝
（００４５）
■問い合わせＰに対する、一の事実（固定文字列）又はホーン節Ｂ（但し、ヘッドに含まれるすべての変数がボディにも存在）の処理アルゴリズム仕様
=====================================================================================================================
関数Ｈ（Ｐ：変数を含みうるパターン，Ｂ：一の事実（固定文字列）又はホーン節，Ｃ：変数の束縛情報）：★特許文献１の請求項１〜１５の発明で使用する関数の特許文献１の実施例１−１★
｛
Ｐが変数を含まない場合｛
Ｂが事実である場合｛
Ｐ＝Ｂの場合は、真を返す。
そうでない場合は偽を返す。 
｝
Ｂがホーン節である場合｛
Ｂのヘッド部が変数を含まない場合｛
Ｐ＝Ｂのヘッド部の場合は、関数Ｄ（Ｂのボディ部，Ｅ）の真偽を返す。
そうでない場合は偽を返す。
｝
Ｂのヘッド部が変数を含む場合｛
Ｆ（Ｂのヘッド部，Ｐ，Ｃ１）を真とする各Ｃ１について、
関数Ｄ（Ｂのボディ部にＣ１を適用したもの，Ｅ）の結果が真となるＣ１があれば、 真を返す。
そうでない場合は偽を返す。
｝
｝
｝
Ｐが変数を含む場合｛
Ｂが事実である場合｛
Ｆ（Ｐ，Ｂ，Ｃ１）が真となるＣ１が存在すれば、そのようなすべてのＣ１をＣに加えて真を返す。
そのようなＣ１が存在しなければ、偽を返す。
｝
Ｂがホーン節である場合｛
Ｂのヘッド部が変数を含まない場合｛
Ｆ（Ｐ，Ｂのヘッド部，Ｃ１）を真とするＣ１が存在する場合で、かつ
関数Ｄ（Ｂのボディ部，Ｅ）が真であれば、そのようなすべてのＣ１をＣに加えて真を返す。
そうでない場合は偽を返す。 
｝
Ｂのヘッド部が変数を含む場合｛
★特許文献１の請求項１２の発明を実施する場合★
／／高速化の工夫（オプション）開始
ＰとＢのヘッド部の頭及び尾に存在する文字数分の固定文字が一致していない場合｛ 偽を返す。
｝／／高速化の工夫（オプション）終了
★特許文献１の請求項１３の発明の実施★
ＰとＢのヘッド部の頭及び尾に存在する文字数分の固定文字が一致している場合｛
関数Ｄ（Ｂのボディ部，Ｅ）の結果が真となるＥ中のいずれかの束縛情報Ｇについて、 関数Ｆ（Ｐ，Ｂのヘッド部をＧで束縛したもの（固定文字列になるはず），Ｃ１）を真とするＣ１があれば
そのようなすべてのＣ１をＣに加えて真を返す。
そのようなＣ１が存在しない場合は偽を返す。 
｝
｝
｝
｝
｝
（００４６）
■ホーン節のボディ部（又は変数を共有する重文の問い合わせ）の解集合の列挙アルゴリズム仕様
=====================================================================================================================
呼出例
→関数Ｄ（"$Aと$Bは友達だ,$Aは人間,$Bは人間", Ｅ);
戻り例
←真（Ｅ＝（（A=花子，B=太郎），（A=太郎，B=次郎），（A=次郎，B=三郎）））
=====================================================================================================================
関数Ｄ（Ｊ：ボディ部（又は変数を共有する重文の問い合わせ），Ｅ：解集合）：★特許文献１の請求項６の発明で使用する関数の特許文献１の実施例１−２Ａ★
※ただし、知識源全体Ｌはグローバル変数に格納して参照可能とする
｛
１．Ｊ中の最初の文Ｍを取り出す。最初の文が存在しない場合真を返す。
２．知識源全体Ｌに対して、前記関数Ｑ１（Ｍ，Ｌ）又はＱ２（Ｍ，Ｌ）を呼び出す。 結果が偽のときは
偽を返す。
真のとき
Ｍが変数を含まない場合
何もしない。
Ｍが変数を含む場合
Ｍを真とするためにとりうる束縛情報の集合Ｃを記憶する。
※真とするために束縛不要の変数は、その旨を明示的に示すこともできる。
※束縛値が無限集合でありながら真とするために一定の条件を要求する場合は、その条件を付記することもできる。
３．Ｊ中の次の文Ｍ’を取り出す。存在しない場合、真（Ｅ＝束縛情報の集合Ｃ）を返す。
４．知識源全体Ｌに対して、前記関数Ｑ１（Ｍ’，Ｌ）又はＱ２（Ｍ’，Ｌ）を呼び出す。
結果が偽のときは
偽を返す。
真のとき
Ｍ’が変数を含まない場合
何もしない。
Ｍ’が変数を含む場合
Ｍ’を真とするためにとりうる束縛情報の集合Ｃ’と記憶してあった集合Ｃとの積集合を新たなＣとする。
但し、元々の集合Ｃが空集合でなく積集合をとって空集合となったときは偽を返す。 ※真とするために束縛不要の変数は、その旨を明示的に示すこともできる。
※束縛値が無限集合でありながら真とするために一定の条件を要求する場合は、その条件を付記することもできる。
５．３に戻る。
｝
関数Ｄ２（Ｊ：ボディ部（又は変数を共有する重文の問い合わせ），Ｅ：解集合）：★特許文献１の請求項６の発明で使用する関数の特許文献１の別の実施例１−２Ｂ（関数の再帰呼び出しを用い束縛情報を他の文に波及させることにより高速化を図ったもの）★
｛
１．Ｊ中の最初の文Ｍを取り出す。Ｍが存在しない場合真を返す。
２．知識源全体Ｌに対して、Ｑ１（Ｍ，Ｌ）又はＱ２（Ｍ，Ｌ）を呼び出す。
結果が偽のときは
偽を返す。
真のとき
Ｍが変数を含まない場合
Ｊの次の文がなければ真を返し
あれば次の文を新たなＭとし２に戻る。
Ｍが変数を含む場合
Ｊの次の文がなければ、とりうる束縛情報をＥに格納して真を返し
あればとりうる束縛情報を集合Ｃとして記憶する。
３．Ｅを空にし、集合Ｃ中の各束縛情報Ｋについて
再帰呼び出しＤ２（ＫによりＪの次の文以降を束縛してできるボディ部Ｊ’，Ｅ’）を実行する
結果が真のときは
Ｅに、真となったそのＫかつＥ’を加える
４．各Ｋについて一度も真となっていないときは偽を返し、一度でも真となっているときは真（Ｅ）を返す
｝ 
関数Ｄ３（Ｊ：ボディ部（又は変数を共有する重文の問い合わせ），Ｅ：解集合）：★特許文献１の請求項５の発明で使用する関数の特許文献１の実施例１−３★
｛
１．Ｊ中の最初の文Ｍ１を取り出す。最初の文が存在しない場合真を返す。
２．知識源全体Ｌに対して、Ｑ１（Ｍ１，Ｌ）又はＱ２（Ｍ１，Ｌ）を呼び出す。
結果が偽のときは
偽を返す。
真のとき
Ｍ１が変数を含まない場合
何もしない。
Ｍ１が変数を含む場合
とりうる束縛情報の集合Ｃ１を記憶する。
３．同様に、偽とならないうちはＭ２，Ｍ３・・・についてＣ２，Ｃ３・・・を求めていく。
偽となった場合は偽を返す。
４．残ったＣ１，Ｃ２，Ｃ３・・・Ｃｎについて積集合Ｃを求めて、真（Ｃ）を返す。｝
（００４７）
■問い合わせＰに対する事実Ｓの多長一致解（複数も可）の列挙アルゴリズム仕様
=====================================================================================================================
呼出例
→関数Ｆ（"$Aと$Bは友達だ","太郎と次郎と三郎は友達だ", "");
関数Ｆ（Ｐ：変数を含みうるパターン，Ｓ：定数文字列，Ｃ：変数の束縛情報）：★特許文献１の請求項２の発明（ただし、「（又は最後）」と「又は前」を省いた実現例）で使用する関数の特許文献１の実施例１−４Ａ★
｛
（準備）
１．Ｐ中の変数の種類数Ｖと、出現する変数の名前Ｎ１，Ｎ２，・・・を出現順に求める
（Ｐがもともと変数を含まない場合への対応）
２．Ｖが０のときは、
⇒  Ｐ＝Ｓのとき、真を返して終了。
⇒  Ｐ≠Ｓのとき、偽を返して終了。
（出力）
３．Ｖが１のときは、Ｎ１がＰ中に何回出現しようとも、ＰとＳの単一化の解Ｒ１は１つしかないので、
⇒  マッチする場合、その唯一の解を「ＣかつＮ１＝Ｒ１」として出力して、真を返して終了。
⇒  マッチしない場合、偽を返して終了。
※単一化そのものは、正規表現とのマッチ（同じ変数が二度以上出現する場合は後置参照あり）として実施可能
４．Ｖが２以上のとき
変数Ｎ１についての最長一致解Ｒ１で、Ｐ中の全てのＮ１を埋めてできるＰ’について 再帰呼び出しＦ（Ｐ’，Ｓ，ＣかつＮ１＝Ｒ１）を実行
⇒  Ｎ１について最長一致解とした解集合が出力される
５．Ｒ１’←Ｒ１の最後の１文字を除いた文字列とし
Ｐ中の全てのＮ１をＲ１’で埋めてできるＰ’’について
再帰呼び出しＦ（Ｐ’’，Ｓ，ＣかつＮ１＝Ｒ１’）を実行
⇒  Ｎ１について、最長一致解より１文字除いた解候補Ｒ１’とした解集合が出力される
６．Ｒ１’が
１文字以上の場合、（★特許文献１の請求項３では最短一致解の文字数より大きい場合）
⇒Ｒ１←Ｒ１’として５に戻る。
０文字の場合、（★特許文献１の請求項３では最短一致解の文字数である場合）
終了。       
｝
（００４８）
関数Ｆ（Ｐ：変数を含みうるパターン，Ｓ：定数文字列，Ｃ：変数の束縛情報）：★請求項４の発明で使用する関数の実施例１−４Ｂ★
//Ｐ中で変数が最初に出現した直後の固定文字列の最初の文字Ｃに着目して高速化の工夫その１をした関数Ｆ
｛
（準備）
１．Ｐ中の変数の種類数Ｖと、出現する変数の名前Ｎ１，Ｎ２，・・・を出現順に求める
（Ｐがもともと変数を含まない場合への対応）
２．Ｖが０のときは、
⇒  Ｐ＝Ｓのとき、真を返して終了。
⇒  Ｐ≠Ｓのとき、偽を返して終了。
（出力）
３．Ｖが１のときは、Ｎ１がＰ中に何回出現しようとも、ＰとＳの単一化の解Ｒ１は１つしかないので、
⇒  マッチする場合、その唯一の解を「ＣかつＮ１＝Ｒ１」として出力して、ＴＲＵＥを返して終了。
⇒  マッチしない場合、偽を返して終了。
４．（高速化の工夫その２。この処理は５以降でカバーされるため省いてもよい。★この工夫２は、特許文献１の請求項にはしていない★）
Ｖが２以上のときで、
すべての変数（Ｎ１（＝Ｎ），Ｎ２，・・・）について最長一致モードでマッチしてみた解と
すべての変数（Ｎ１（＝Ｎ），Ｎ２，・・・）について最短一致モードでマッチしてみた解と
が同一（Ｎ１＝Ｒ１，Ｎ２＝Ｒ２，・・・）のとき
⇒  その唯一の解を「ＣかつＮ１＝Ｒ１かつＮ２＝Ｒ２かつ・・・」として出力して終了する
そもそもマッチしなかった場合、
⇒  偽を返して終了。
同一でないとき
⇒  ５に続く
５．Ｖが２以上のとき
変数Ｎ１についての最長一致解Ｒ１で、Ｐ中の全てのＮ１を埋めてできるＰ’について 再帰呼び出しＦ（Ｐ’，Ｓ，ＣかつＮ１＝Ｒ１）を実行
⇒  Ｎ１について最長一致解とした解集合が出力される
６．Ｐ中で変数Ｎ１の後すぐに
変数Ｎ１（自分自身）が続くとき
⇒  ７以降で処理する
別の変数Ｎ２が続くとき
⇒  ７以降で処理する（ただし、７で１文字ＣはＮ２の解Ｒ２の最初の１文字とする）
固定文字が続くとき
⇒  ７以降で処理する
７．Ｐ中で変数Ｎ１が最初に出現した直後の固定文字である１文字Ｃ（直後が別の変数Ｎ２であるときはＲ２の最初の１文字Ｃ）が
最長一致解Ｒ１に含まれる場合
⇒  １）Ｒ１’←Ｒ１の文字列の最後からそのＣにあたるまでの部分文字列を削除した文字列
⇒  ２）Ｐ’’←Ｒ１’でＰ中のすべてのＮを埋めてできるパターン
⇒  ３）再帰呼び出しＦ（Ｐ’’，Ｓ，ＣかつＮ１＝Ｒ１’）を実行
⇒Ｎ１について一段階だけ短めの解が存在すれば出力できるはず
最長一致解Ｒ１に含まれない場合
⇒  Ｎ１についてはより短い解の列挙が終わったので、終了。
８．Ｒ１←Ｒ１’として７に戻る。
｝
=====================================================================================================================