(57)【要約】【課題】「科学／技術／営業／公序／倫理的にありえない」アイディア等を解の候補から排除する必要がある場合等も効率的に知識表現してコンピュータで解釈する方法、装置、コンピュータプログラムを提供すること。【解決手段】  利用者が入力する質問文、事実、ルールの条件もしくはルールの効果、又は、論理プログラムの事実、ルールの条件もしくルールの効果において、  証拠事実の存在もしくは自動証明の成功としての肯定（真）並びにその否定（証拠事実の不存在かつ自動証明失敗／不能）以外に、  否定する証拠事実の存在もしくは否定する自動証明の成功を意味する「ありえない」の表現を許容し、  固定文字列の肯定表現を根拠として用いる際に、  該肯定表現に対応する「ありえない」の表現が存在しないかつ自動証明できないことを自動確認して、  該「ありえない」の表現が存在する又は自動証明できる場合に該対応する肯定表現の使用を制限するようにする。【選択図】図１
2018190182.tif 000002
【特許請求の範囲】
【請求項１】
利用者が入力する質問文、事実、ルールの条件もしくはルールの効果、又は、論理プログラムの事実、ルールの条件もしくルールの効果において、
証拠事実の存在もしくは自動証明の成功としての肯定（真）並びにその否定（証拠事実の不存在かつ自動証明失敗／不能）以外に、
否定する証拠事実の存在もしくは否定する自動証明の成功を意味する「ありえない」の表現を許容し、
変数を最初から含まないもしくは変数束縛により含まなくなった肯定表現を根拠として用いる際に、
該肯定表現に対応する「ありえない」の表現が存在しないかつ自動証明できないことを自動確認して、
該「ありえない」の表現が存在する又は自動証明できる場合に該対応する肯定表現の使用を制限するようにした
コンピュータプログラム。
【請求項２】
「ありえない」を意味する知識表現を、対応する肯定表現よりも一律に優先させる（または一律に劣後させる）ことを特徴とする
コンピュータプログラム。
【請求項３】
論理の翻意を最新の利用者入力を優先させて行うことを特徴とする
請求項１又は２に記載のコンピュータプログラム。
【請求項４】
論理に翻意時に反対の意味の表現を論理プログラム又は一時文脈を格納するメモリから削除することを特徴とする、
請求項３に記載のコンピュータプログラム。
【請求項５】
論理に翻意時に反対の意味の表現を論理プログラム又は一時文脈を格納するメモリからコメントアウトすることを特徴とする、
請求項３に記載のコンピュータプログラム。
【請求項６】
コメントに、タイムスタンプ又は原因イベント識別情報を自動付与することを特徴とする
請求項５に記載のコンピュータプログラム。
【請求項７】
請求項１から６のいずれか一項に記載のコンピュータプログラムを用いた装置。
【請求項８】
請求項１から６のいずれか一項又は図２に記載のコンピュータプログラムを用いた方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置に関する。
【背景技術】
【０００２】
伝統的なＰＲＯＬＯＧとその機能サブセットを自然言語やインターネットに対応するように拡張した言語（例えば、当社による下記の「特許文献１」）、等が、論理型（あるは宣言型）プログラミング言語として知られており、その開発・実行環境（アプリケーションソフトウエア）も整備されている。
これらの言語ならびに環境では、「メモリに存在せずルールによる自動証明もできない命題を偽」とみなす「閉世界仮説」と呼ばれる解釈方針が一般的に採用されてる。
その理由は、論理の種類を、証拠（事実、ファクト）や論理（推論規則、ルール）の組み合わせで（自動）証明できることと（自動）証明できないことの二種類（二値）に割り切ったほうが、知識や文脈状態の表現が簡単であり、問い合わせへの回答のためのパターンマッチング（単一化）や三段論法（自動証明、再帰的）を含む解探索・推論の処理も、簡潔に実現（高速性）でき、正当性（一定の完全性、健全性）も検証しやすかったからだと考えられる。
この方針をとった場合のいわゆる「ＮＯＴ」は「証明の失敗としてのＮＯＴ」と呼ばれることが多く、ＰＲＯＬＯＧの多くの教科書には、「！」（カットオペレータ）や「fail」（探索をわざと失敗させる）を用いたその実現例（２行程度）が示されている。
しかし、「科学／技術／営業／公序／倫理的にありえない」アイディア等を解の候補から排除する必要がある場合等、実社会の状況や問題設定をより正確かつより効率的に表現して処理しなければならない多くの場面では、「証明の失敗としてのＮＯＴ」では記述能力が不十分であり、これと整合しやすい「メモリに存在せずルールによる自動証明もできない命題を偽」とみなす解釈方針は、新しいアイディア（特に自然言語による利用者にとって自由な存在論（オントロジ）や語用論（特に言葉の組み合わせによる新規概念や新規アイディアの合成））の探求を不当に制限しすぎる弊害があった。
すなわち、従来の「ＮＯＴ」よりも進歩した表現能力と意味論（人間による意味付けとコンピュータによる解釈方法）が、特に利用者からの自然言語による自由な存在論や語用論を活かせる立場（特許文献１、２、３のシステム）から求められていた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特願２０１３−０８７００８  自然言語に変数を埋め込んだリテラルの多長一致と無限集合の管理等
【特許文献２】特願２０１６−００９３２４  コンピュータから利用者への逆質問と動的な事実（一時文脈）追加
【特許文献３】特願２０１７−０９２０４７  前向き推論による動的な事実（一時文脈）の追加
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、かかる問題に鑑み、「科学／技術／営業／公序／倫理的にありえない」アイディア等を解の候補から排除する必要がある場合等も効率的に知識表現してコンピュータで解釈する方法、装置、コンピュータプログラムを提供することを目的とする。
また、その進歩した表現能力と意味論により、利用者からの自然言語の自由さを活かしやすくすることを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、かかる課題を解決するため、
本発明の請求項１は、
利用者が入力する質問文、事実、ルールの条件もしくはルールの効果、又は、論理プログラムの事実、ルールの条件もしくルールの効果において、
証拠事実の存在もしくは自動証明の成功としての肯定（真）並びにその否定（証拠事実の不存在かつ自動証明失敗／不能）以外に、
否定する証拠事実の存在もしくは否定する自動証明の成功を意味する「ありえない」の表現を許容し、
変数を最初から含まないもしくは変数束縛により含まなくなった肯定表現を根拠として用いる際に、
該肯定表現に対応する「ありえない」の表現が存在しないかつ自動証明できないことを自動確認して、
該「ありえない」の表現が存在する又は自動証明できる場合に該対応する肯定表現の使用を制限するようにした
コンピュータプログラムを提供する。
：ここで「肯定表現に対応する」とは、例えば肯定文「太郎は長男」に対応する「ありえない」の表現が「！太郎は長男」であることをいい、両者（肯定と「ありえない」）が論理プログラムや一時文脈に共存するときは、「ありえない」を意味する「！太郎は長男」を優先して推論を進める（知識表現を解釈・探索する）方針としておくことにより、安定した解釈・判断が可能になる。
これにより、例えば以下のリストのようにある種の「経済的・倫理的にありえない」範囲を簡潔に表現してアイディアから排除することが可能になる。
15: !$Xに$Yを食べさせて儲ける :- $Xは家畜 ; $Yは毒 ; 
16: $Xを使った$Yの廃棄物処理方法 :- $Xに$Yを食べさせて儲ける ; 
17: $Xに$Yを食べさせて儲ける :- $Xは$Yを食べる ; 
18: ヤギは家畜
19: ヒ素のついた紙は毒
20: ヤギは菜種油のついた紙を食べる
21: ヤギはヒ素のついた紙を食べる
：この場合、「ヤギを使った菜種油のついた紙の廃棄物処理方法」はアイディアとして生成されるが、「ヤギを使ったヒ素のついた紙の廃棄物処理方法」という解候補は、１６行目でその根拠（十分条件）となる「ヤギにヒ素のついた紙を食べさせて儲ける」が１５行目により制限されるため、生成されないことになる。
：このような生成の抑制（制限）は、前記特許文献１における自然言語に変数を埋めこんだリテラルの束縛処理によりアイディアが固定文字列になった時点では、現実的な時間での計算が明らかに可能となるため、そのようなタイミングですべての論理プログラムを探索して、例えば１５行目により抑制・排除することが有利である。
：なお、「！」を一律に「ありえない」の意味として取り決めた場合には、事実「太郎は長男でない」と事実「！太郎は長男でない」の関係は、事実「太郎は長男である」と事実「！太郎は長男である」の関係と同じであり、文言を見て解釈する日本人の解釈だけがちょうど反対の意味になる。文末の「でない」を一律に「ありえない」の意味として取り決めた場合には、知識表現の論理プログラマや利用者がそのようなコーディング規約に従うことにより、コンピュータによって「！」の場合と同様の上記「ありえない」の機械的解釈（解候補の自動制限等）が可能である。
＞「〜でありえない」あるいは「〜でない」を意味するいわば制約は、現実の問題を制約として表現した制約充足問題等を解く上できわめて重要な知識表現であり、論理プログラムの現実問題の表現能力が大幅に改善されることになる。
【０００６】
上でも説明したとおり、本発明の請求項２は、
「ありえない」を意味する知識表現を、対応する肯定表現よりも一律に優先させる（または一律に劣後させる）ことを特徴とする
コンピュータプログラムを提供する。
「優先させる」場合、「ありえない」側に証明したい場合には、コンピュータプログラムが肯定表現の不存在を確認する探索コストが不要になる。これは、仮に逆の「劣後させる」方針（肯定表現優先）を採用した場合でも同様のコスト削減効果が得られる。
なお、ルールの条件式においては、従来のＮＯＴ（証拠の不存在と自動証明の失敗）も、「ありえない」を意味する知識表現と併記することが可能であり、上記したさまざまな都合で「ありえない」として排除することの要／不要にかかわらず、明らかに必要かつ有用である。
この併記の場合、例えば、「ありえない」を意味する知識表現を（！・・・）とし、従来のＮＯＴを意味する知識表現を（〜・・・・）とすることができる。
自然言語に変数を埋め込んだリテラルを許容する方式におけるこの従来のＮＯＴ（上では、〜・・・）は、リテラル（・・・）に変数が存在しない場合は論理の逆転（存在する／自動証明できる場合は偽、存在せず自動証明もできない場合は真）となり、リテラルに変数が存在する場合は、ＮＯＴ取り除いてできる条件を充足する変数束縛をそのルールの解候補から排除する意味となる（従来のＰＲＯＬＯＧと同様）。
この排除（〜）は、「ありえない」を意味する知識表現（！）が、根拠にしようとしている固定文字列を媒介としてグローバルスコープで矛盾を同定・検出して束縛や自動証明の経路を排除（制限）していることとは対照的に、根拠にしようとしている具体的な固定文字列（変数のない事実）と矛盾であるかどうか等は検出せずにルール内ローカルスコープの変数の束縛単位で排除するものである（実装上は、ルール上の変数組にを束縛してはいけない値組の集合を管理していくことで、たとえ、「〜＄Ｘは男」という条件が、「＄Ｘは日本人」など＄Ｘの解候補集合を初めて出現させる条件の前（通常はボディ部の左側）に出現したとしても、この機能を実現することができる）。
なお、この従来のＮＯＴ（〜・・・）をボディ部の条件に用いるだけでは、上記のリストと同じ意味の知識内容を表現するのが困難又は高コストであることを確認されたい。これは家畜と毒の、Ｎ段論法を経た組み合わせこそが経済的・倫理的に問題視されているのであって、安価で無害で生命の尊重を考慮しなくてよいバクテリア等が毒を消化することをＮ段論法後に意味するアイディアまでは問題視しない、というニュアンスを表現できなければならないからである。
また、本発明の請求項３は、
論理の翻意を最新の利用者入力を優先させて行うことを特徴とする
請求項１又は２に記載のコンピュータプログラムを提供する。
ここで、論理の翻意とは、以下の三種類に分類される。
１）肯定表現から「ありえない」を意味する表現への翻意とその逆の翻意
２）肯定表現を追加したり削除したりする翻意
３）「ありえない」を意味する表現を追加したり削除したりする翻意
「最新の利用者入力」を優先させる理由は、現場や状況を知っている利用者のより具体的なもしくはより最新の認識事実を、知識推論に反映させるためである。
具体的には、最新の「利用者入力」に沿って、１）の場合は反対の意味の表現を論理プログラムや一時文脈を格納するメモリから削除するかコメントアウト（理由とタイムスタンプつきで）することができる。オプションとして論理プログラム保護モードを用意し、このモードのときは、論理プログラムについてのみ実行時の削除もコメントアウトも抑制できるようにする（一時文脈は変更可）ことが有利である。
「ありえない」を優先する場合は、「ありえない」への翻意に際して肯定文をそのまま残しておいても論理プログラム全体としての総合的な論理は変わらないということになるが、計算速度や可読性の面から削除又はコメントアウトすることが有利であり、以下の例のようにコメントアウトした上でさらにそのコメントとして理由とタイムスタンプを自動的に付する場合は、推論実行時における論理プログラム及び一時文脈のバージョン管理も容易になる。
例：///今日はいい天気///2017.5.1_12:21:21 利用者が「!今日はいい天気」と入力し、同事実が一時文脈に追加されたことが原因
また、「利用者入力を優先」させる結果として、利用者入力に起因する前記特許文献２の逆質問（コンピュータから利用者への動的質問）や特許文献３の前向き推論（コンピュータによる自動推理）によって確認・証明された事実（一時文脈）も、最新の利用者入力に類するものとして、反対の知識表現より優先させるよう上記処理を行うことが、総合的な整合性や論理性・予測性を確保する上で有利である。
したがって、本発明の請求項４は、
論理に翻意時に反対の意味の表現を論理プログラム又は一時文脈を格納するメモリから削除することを特徴とする、
請求項３に記載のコンピュータプログラムを提供する。
これにより、削除後の論理プログラムや一時文脈の可読性が向上し、総合的な論理の人的・機械的な整理が容易になる。
なお、ここで「論理プログラム」とは、上記リストの１５〜２１のような内容であり、「一時文脈」とは、これに加えて、利用者が具体的な問題案件を表現する事実等を入力してメモリに追加したもの（及び、特許文献２、３の逆質問や前向き推論で動的に（＝実行時に）メモリ追加された事実等）である（本明細書にわたって同じ）。
また、本発明の請求項５は、
論理に翻意時に反対の意味の表現を論理プログラム又は一時文脈を格納するメモリからコメントアウトすることを特徴とする、
請求項３に記載のコンピュータプログラムを提供する。
これにより、コメントアウト後の論理プログラムや一時文脈の論理の整理の経緯が可視化され、総合的な論理の機械的な整理、人又は機械による（論理プログラムや一時文脈の）バージョン管理が容易になる。
また、本発明の請求項６は、
コメントに、タイムスタンプ又は原因イベント識別情報を自動付与することを特徴とする
請求項５に記載のコンピュータプログラムを提供する。
なお、上記の例では、ルールのヘッド（効果）に「！」を付して、家畜に毒を食べさせる解をグローバルスコープで排除しているが、右辺のボディのいずれかの条件に付した場合には、付された条件が「ありえない」という事実が論理プログラムまたは一時文脈に存在すること、もしくは、付された条件が「ありえない」とする自動証明の成功（メモリ中の論理プログラムまたは一時文脈のルールを用いた）を要求する条件文となる。
このルールの条件としての「！・・・」の具体的な解釈（コンピュータによる実現）は、頭に「！」のついた事実（固定文字列）の検索（範囲は論理プログラムおよび一時文脈のメモリ）については、単純な文字列一致であり、実現方法は自明である。一方の自動証明については、頭に「！」のついたルール（上記１５行目のようなルール）の「！」を省いたルールによって、同じく「！」を省いた「・・・」が証明できればその条件を充たすことにする等という実現方法でもよい。この証明の実現方法については、特許文献１がすでに出願公開になっているので参照されたい。
総じて、このような意味論（コンピュータの解釈）は、従来のＰＲＯＬＯＧ等では実現できていなかったものであり、現実的な問題の正確で簡潔な表現とコンピュータ処理による解決とを非常に容易にするものである。
また、本発明の請求項７は、
請求項１から６のいずれか一項に記載のコンピュータプログラムを用いた装置を提供する。
また、本発明の請求項８は、
請求項１から６のいずれか一項又は図２に記載のコンピュータプログラムを用いた方法を提供する。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施形態による、論理プログラム（固定的な事実及びルール）、利用者によりすでに追加されている一時文脈、利用者により新たに追加される事実（一時文脈）及び利用者により新たに追加される質問文、の関係について説明する図である。
【図２】図１等を実施するためのコンピュータプログラムの最も基本的な処理フローチャート（方法としてのステップ）を説明する図である。
【図３】実施するコンピュータとしての一般的な構成を示す説明図である。
【発明を実施するための形態】
【０００８】
本発明は、特許文献１の論理型ＡＩ（ＰＲＯＬＯＧのサブセット＋α）と知識表現（ほぼ自然言語で記述できる）を用いた自動アイディア合成システムとして実施することができる。この詳細な構成やアルゴリズム内容は本発明の本質ではないので、ここでは詳述しない。
【実施例】
【０００９】
図１は、本発明の一実施例による、論理プログラム（固定的な事実及びルール）、利用者によりすでに追加されている一時文脈、利用者により新たに追加される事実（一時文脈）及び利用者により新たに追加される質問文、の関係について説明する図である。メモリ内配列の１５行目から２１行目までを表示し、残りは省略している。一時文脈は２２行目以降に格納している。
１５行目には、「ありえない」のルールとしての表現である、「!$Xに$Yを食べさせて儲ける :- $Xは家畜 ; $Yは毒 ;」 が存在し、家畜であることが分かっている＄Ｘの値（例えば「ヤギ」）と毒であることがわかっている＄Ｙの値（例えば「ヒ素のついた紙」）との組み合わせ（値組）が、「＄Ｘに＄Ｙを食べさせて儲ける」の変数組（＄Ｘ，＄Ｙ）を同時に束縛することを排除（制限）する知識表現となっている。
図２は、図１等を実施するためのコンピュータプログラムの最も基本的な前向き推論の処理フローチャート（方法としてのステップ）を説明する図である。
ステップＳ１は、〇〇〇（なんらかの固定文字列）を、前向き／後ろ向き推論の根拠として用いようとしている場面（実行環境のプログラムの中）で起動される。
ステップＳ２では、頭に「！」をつけた「！〇〇〇」が、論理プログラム又は一時文脈に事実として存在しないかメモリ内を検索する。
ステップＳ３で、存在すれば、「ありえない」こととなるので、根拠として用いれないと決定する（Ｓ７）が、存在しない場合は、ステップＳ４でさらなる自動確認を行う。
ステップＳ４は、メモリに格納した論理プログラム又は一時文脈中のいずれかの「！□□□：-・・・」型のルールについて、「！」をとった「□□□：-・・・」ルールで〇〇〇をメモリ中の知識から自動証明できないか自動確認する。
ステップＳ５では、自動証明できることが確認できた場合にはやはり、根拠として用いられないと決定し（Ｓ７）、そうでない場合には、根拠として用いることを決定する（Ｓ６）。
実際には、ステップ４において、特許文献１（出願公開済）で詳述している多長一致などの特別なユニフィケーション（単一化）やバックトラックを含む後ろ向き推論も行うことがさまざまな面で有利であるが、本明細書の主旨とは異なるので（また、通常のＰＲＯＬＯＧの探索でもある程度代用できるため）、ここでは詳述はしない（出願公開されているので参照されたい）。
図３は、実施するコンピュータとしての一般的な構成を示す説明図である。ここには本発明に固有の特徴はないため詳述はしない。
【符号の説明】
【００１０】
４  本発明で用いられる一般的なコンピュータ（利用者専用のパーソナルコンピュータ、共有ファイルサーバー、Ｗｅｂサーバー）
４ａ〜４ｋ  一般的なコンピュータ４（利用者専用のパーソナルコンピュータ、等）の一般的な構成要素
１１  論理プログラム（固定的事実とルール）
１２  データ（論理プログラムに隣接してすでに配列型メモリに追加されている一時文脈）
１３  新しい事実（一時文脈）１個と質問１個
１４  右辺の３個以上の条件が成立したら左辺の命題の成立を自動確認（自動追加＆通知）するという意味のルール
１５  新しい事実も加味した２つの回答（ただし、本発明により、１つの回答候補が削除されている）
Ｓ１  一実施例において、事実〇〇〇、又は、変数を含まない／なくなった条件〇〇〇を根拠として用いようとしている場面／状態を検出するステップ
Ｓ２  同じ実施例において、事実！〇〇〇が、メモリ内の論理プログラム又は一時文脈に事実として存在しないか検索するステップ
Ｓ３  Ｓ２で事実！〇〇〇が、メモリ内に存在した場合にステップＳ７に遷移し、存在しない場合にステップＳ４に遷移するステップ
Ｓ４  メモリに格納した論理プログラム又は一時文脈中のいずれかの「！□□□：-・・・」型のルールについて、「！」をとった「□□□：-・・・」ルールで〇〇〇をメモリ中の知識から自動証明できないか自動確認するステップ
Ｓ５  Ｓ４において、「！」をとったいずれかの「□□□：-・・・」ルールで自動証明できる場合、ステップＳ７に遷移し、いずれのルールでも自動証明できなかった場合にステップＳ６に遷移するステップ
Ｓ６  〇〇〇を根拠として採用を決定するステップ
Ｓ７  〇〇〇を根拠として不採用を決定するステップ
【図１】
2018190182.tif 000003
【図２】
2018190182.tif 000004
【図３】
2018190182.tif 000005