IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ナレルシステム有限会社の特許一覧

特許7253760論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置
<>
  • 特許-論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置 図1
  • 特許-論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置 図2
  • 特許-論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-30
(45)【発行日】2023-04-07
(54)【発明の名称】論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置
(51)【国際特許分類】
   G06N 5/02 20230101AFI20230331BHJP
   G06F 16/90 20190101ALI20230331BHJP
【FI】
G06N5/02
G06F16/90
【請求項の数】 8
(21)【出願番号】P 2017092057
(22)【出願日】2017-05-04
(65)【公開番号】P2018190182
(43)【公開日】2018-11-29
【審査請求日】2021-01-25
【新規性喪失の例外の表示】特許法第30条第2項適用 ▲1▼ 未踏アドバンスト事業 プロジェクト提案書(写し) ▲2▼ 第71回粟ヶ崎ビジネスサロン 補助資料(当日配布済) ▲3▼ 第71回粟ヶ崎ビジネスサロン用スライド(当日説明、山田先生経由で金沢市に配布) ▲4▼ 金沢市様CVCK2017・3・8の発表スライド&質問対応資料をスライドシェアに2017・3・9にアップロードし、FaceBook公開ページにリンクしたもの)
(73)【特許権者】
【識別番号】301062798
【氏名又は名称】ナレルシステム株式会社
(72)【発明者】
【氏名】中村圭介
【審査官】金田 孝之
(56)【参考文献】
【文献】特表2016-505953(JP,A)
【文献】特開平05-088894(JP,A)
【文献】特表平01-501901(JP,A)
【文献】米国特許出願公開第2008/0097748(US,A1)
【文献】徳山駿平,Prologにおける否定の述語「not」,金沢大学,2017年03月20日,pp.1-19,URL:https://geolog.mydns.jp/www.geocities.jp/philosophyoflawinkanazawa/thesis.html,[検索日2022年2月18日]
(58)【調査した分野】(Int.Cl.,DB名)
G06N 5/00- 7/06
G06F 16/90
(57)【特許請求の範囲】
【請求項1】
コンピュータプログラムであって、
利用者が入力する質問文、事実、ルールの条件もしくはルールの効果、又は、前記コン
ピュータプログラムと異なる所与の論理プログラムの事実、ルールの条件もしくルールの
効果において、
証拠事実の存在もしくは自動証明の成功としての肯定(真)並びにその否定(証拠事実
の不存在かつ自動証明失敗/不能)以外に、
否定する証拠事実の存在もしくは否定する自動証明の成功を意味する所定の記号を許容
し、
CPUが、
変数を最初から含まないもしくは変数束縛により含まなくなった肯定表現を根拠として
用いる際に、
CPUが、
該肯定表現に前記所定の記号を加えた表現が存在しないかつ自動証明できないことを自
動確認して、
CPUが、
肯定表現に前記所定の記号を加えた表現が存在する又は自動証明できる場合に
該肯定表現の使用を制限するようにした
コンピュータプログラム。
【請求項2】
CPUが、
所定の記号を加えた否定表現を、
対応する該所定の記号を加えない肯定表現よりも
一律に論理的に優先させることを特徴とする
請求項1に記載のコンピュータプログラム。
【請求項3】
CPUが、
事実についての肯定および否定に関する論理の翻意を
最新の利用者入力を優先させて行うことを特徴とする
請求項1又は2に記載のコンピュータプログラム。
【請求項4】
CPUが、
前記論理翻意時に
否定への翻意の場合に肯定表現をもしくは肯定への翻意の場合に否定表現を
格納されたメモリから
削除することを特徴とする、
請求項3に記載のコンピュータプログラム。
【請求項5】
CPUが、
前記論理翻意時に
否定への翻意の場合に肯定表現をもしくは肯定への翻意の場合に否定表現を
格納されたメモリから
コメントアウトすることを特徴とする、
請求項3に記載のコンピュータプログラム。
【請求項6】
CPUが、
コメントに、タイムスタンプ又は原因が利用者入力である旨
自動付与することを特徴とする
請求項5に記載のコンピュータプログラム。
【請求項7】
CPUを備える装置であって、CPUに
請求項1から6のいずれか一項に記載のコンピュータプログラムを実行させる装置。
【請求項8】
装置が備えるCPUに、
請求項1から6のいずれか一項に記載のコンピュータプログラムを実行させる方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、論理型プログラミングにおいて否定を実現する方法、コンピュータプログラム及び装置に関する。
【背景技術】
【0002】
伝統的なPROLOGとその機能サブセットを自然言語やインターネットに対応するように拡張した言語(例えば、当社による下記の「特許文献1」)、等が、論理型(あるは宣言型)プログラミング言語として知られており、その開発・実行環境(アプリケーションソフトウエア)も整備されている。
これらの言語ならびに環境では、「メモリに存在せずルールによる自動証明もできない命題を偽」とみなす「閉世界仮説」と呼ばれる解釈方針が一般的に採用されてる。
その理由は、論理の種類を、証拠(事実、ファクト)や論理(推論規則、ルール)の組み合わせで(自動)証明できることと(自動)証明できないことの二種類(二値)に割り切ったほうが、知識や文脈状態の表現が簡単であり、問い合わせへの回答のためのパターンマッチング(単一化)や三段論法(自動証明、再帰的)を含む解探索・推論の処理も、簡潔に実現(高速性)でき、正当性(一定の完全性、健全性)も検証しやすかったからだと考えられる。
この方針をとった場合のいわゆる「NOT」は「証明の失敗としてのNOT」と呼ばれることが多く、PROLOGの多くの教科書には、「!」(カットオペレータ)や「fail」(探索をわざと失敗させる)を用いたその実現例(2行程度)が示されている。
しかし、「科学/技術/営業/公序/倫理的にありえない」アイディア等を解の候補から排除する必要がある場合等、実社会の状況や問題設定をより正確かつより効率的に表現して処理しなければならない多くの場面では、「証明の失敗としてのNOT」では記述能力が不十分であり、これと整合しやすい「メモリに存在せずルールによる自動証明もできない命題を偽」とみなす解釈方針は、新しいアイディア(特に自然言語による利用者にとって自由な存在論(オントロジ)や語用論(特に言葉の組み合わせによる新規概念や新規アイディアの合成))の探求を不当に制限しすぎる弊害があった。
すなわち、従来の「NOT」よりも進歩した表現能力と意味論(人間による意味付けとコンピュータによる解釈方法)が、特に利用者からの自然言語による自由な存在論や語用論を活かせる立場(特許文献1、2、3のシステム)から求められていた。
【先行技術文献】
【特許文献】
【0003】
【文献】特願2013-087008 自然言語に変数を埋め込んだリテラルの多長一致と無限集合の管理等
【文献】特願2016-009324 コンピュータから利用者への逆質問と動的な事実(一時文脈)追加
【文献】特願2017-092047 前向き推論による動的な事実(一時文脈)の追加
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、かかる問題に鑑み、「科学/技術/営業/公序/倫理的にありえない」アイディア等を解の候補から排除する必要がある場合等も効率的に知識表現してコンピュータで解釈する方法、装置、コンピュータプログラムを提供することを目的とする。
また、その進歩した表現能力と意味論により、利用者からの自然言語の自由さを活かしやすくすることを目的とする。
【課題を解決するための手段】
【0005】
本発明は、かかる課題を解決するため、
本発明の請求項1は、
利用者が入力する質問文、事実、ルールの条件もしくはルールの効果、又は、論理プログラムの事実、ルールの条件もしくルールの効果において、
証拠事実の存在もしくは自動証明の成功としての肯定(真)並びにその否定(証拠事実の不存在かつ自動証明失敗/不能)以外に、
否定する証拠事実の存在もしくは否定する自動証明の成功を意味する「ありえない」の表現を許容し、
変数を最初から含まないもしくは変数束縛により含まなくなった肯定表現を根拠として用いる際に、
該肯定表現に対応する「ありえない」の表現が存在しないかつ自動証明できないことを自動確認して、
該「ありえない」の表現が存在する又は自動証明できる場合に該対応する肯定表現の使用を制限するようにした
コンピュータプログラムを提供する。
:ここで「肯定表現に対応する」とは、例えば肯定文「太郎は長男」に対応する「ありえない」の表現が「!太郎は長男」であることをいい、両者(肯定と「ありえない」)が論理プログラムや一時文脈に共存するときは、「ありえない」を意味する「!太郎は長男」を優先して推論を進める(知識表現を解釈・探索する)方針としておくことにより、安定した解釈・判断が可能になる。
これにより、例えば以下のリストのようにある種の「経済的・倫理的にありえない」範囲を簡潔に表現してアイディアから排除することが可能になる。

15: !$Xに$Yを食べさせて儲ける :- $Xは家畜 ; $Yは毒 ;
16: $Xを使った$Yの廃棄物処理方法 :- $Xに$Yを食べさせて儲ける ;
17: $Xに$Yを食べさせて儲ける :- $Xは$Yを食べる ;
18: ヤギは家畜
19: ヒ素のついた紙は毒
20: ヤギは菜種油のついた紙を食べる
21: ヤギはヒ素のついた紙を食べる
:この場合、「ヤギを使った菜種油のついた紙の廃棄物処理方法」はアイディアとして生成されるが、「ヤギを使ったヒ素のついた紙の廃棄物処理方法」という解候補は、16行目でその根拠(十分条件)となる「ヤギにヒ素のついた紙を食べさせて儲ける」が15行目により制限されるため、生成されないことになる。
:このような生成の抑制(制限)は、前記特許文献1における自然言語に変数を埋めこんだリテラルの束縛処理によりアイディアが固定文字列になった時点では、現実的な時間での計算が明らかに可能となるため、そのようなタイミングですべての論理プログラムを探索して、例えば15行目により抑制・排除することが有利である。
:なお、「!」を一律に「ありえない」の意味として取り決めた場合には、事実「太郎は長男でない」と事実「!太郎は長男でない」の関係は、事実「太郎は長男である」と事実「!太郎は長男である」の関係と同じであり、文言を見て解釈する日本人の解釈だけがちょうど反対の意味になる。文末の「でない」を一律に「ありえない」の意味として取り決めた場合には、知識表現の論理プログラマや利用者がそのようなコーディング規約に従うことにより、コンピュータによって「!」の場合と同様の上記「ありえない」の機械的解釈(解候補の自動制限等)が可能である。
>「~でありえない」あるいは「~でない」を意味するいわば制約は、現実の問題を制約として表現した制約充足問題等を解く上できわめて重要な知識表現であり、論理プログラムの現実問題の表現能力が大幅に改善されることになる。
【0006】
上でも説明したとおり、本発明の請求項2は、
「ありえない」を意味する知識表現を、対応する肯定表現よりも一律に優先させる(または一律に劣後させる)ことを特徴とする
コンピュータプログラムを提供する。
「優先させる」場合、「ありえない」側に証明したい場合には、コンピュータプログラムが肯定表現の不存在を確認する探索コストが不要になる。これは、仮に逆の「劣後させる」方針(肯定表現優先)を採用した場合でも同様のコスト削減効果が得られる。
なお、ルールの条件式においては、従来のNOT(証拠の不存在と自動証明の失敗)も、「ありえない」を意味する知識表現と併記することが可能であり、上記したさまざまな都合で「ありえない」として排除することの要/不要にかかわらず、明らかに必要かつ有用である。
この併記の場合、例えば、「ありえない」を意味する知識表現を(!・・・)とし、従来のNOTを意味する知識表現を(~・・・・)とすることができる。
自然言語に変数を埋め込んだリテラルを許容する方式におけるこの従来のNOT(上では、~・・・)は、リテラル(・・・)に変数が存在しない場合は論理の逆転(存在する/自動証明できる場合は偽、存在せず自動証明もできない場合は真)となり、リテラルに変数が存在する場合は、NOT取り除いてできる条件を充足する変数束縛をそのルールの解候補から排除する意味となる(従来のPROLOGと同様)。
この排除(~)は、「ありえない」を意味する知識表現(!)が、根拠にしようとしている固定文字列を媒介としてグローバルスコープで矛盾を同定・検出して束縛や自動証明の経路を排除(制限)していることとは対照的に、根拠にしようとしている具体的な固定文字列(変数のない事実)と矛盾であるかどうか等は検出せずにルール内ローカルスコープの変数の束縛単位で排除するものである(実装上は、ルール上の変数組にを束縛してはいけない値組の集合を管理していくことで、たとえ、「~$Xは男」という条件が、「$Xは日本人」など$Xの解候補集合を初めて出現させる条件の前(通常はボディ部の左側)に出現したとしても、この機能を実現することができる)。
なお、この従来のNOT(~・・・)をボディ部の条件に用いるだけでは、上記のリストと同じ意味の知識内容を表現するのが困難又は高コストであることを確認されたい。これは家畜と毒の、N段論法を経た組み合わせこそが経済的・倫理的に問題視されているのであって、安価で無害で生命の尊重を考慮しなくてよいバクテリア等が毒を消化することをN段論法後に意味するアイディアまでは問題視しない、というニュアンスを表現できなければならないからである。

また、本発明の請求項3は、
論理の翻意を最新の利用者入力を優先させて行うことを特徴とする
請求項1又は2に記載のコンピュータプログラムを提供する。
ここで、論理の翻意とは、以下の三種類に分類される。
1)肯定表現から「ありえない」を意味する表現への翻意とその逆の翻意
2)肯定表現を追加したり削除したりする翻意
3)「ありえない」を意味する表現を追加したり削除したりする翻意
「最新の利用者入力」を優先させる理由は、現場や状況を知っている利用者のより具体的なもしくはより最新の認識事実を、知識推論に反映させるためである。
具体的には、最新の「利用者入力」に沿って、1)の場合は反対の意味の表現を論理プログラムや一時文脈を格納するメモリから削除するかコメントアウト(理由とタイムスタンプつきで)することができる。オプションとして論理プログラム保護モードを用意し、このモードのときは、論理プログラムについてのみ実行時の削除もコメントアウトも抑制できるようにする(一時文脈は変更可)ことが有利である。
「ありえない」を優先する場合は、「ありえない」への翻意に際して肯定文をそのまま残しておいても論理プログラム全体としての総合的な論理は変わらないということになるが、計算速度や可読性の面から削除又はコメントアウトすることが有利であり、以下の例のようにコメントアウトした上でさらにそのコメントとして理由とタイムスタンプを自動的に付する場合は、推論実行時における論理プログラム及び一時文脈のバージョン管理も容易になる。

例:///今日はいい天気///2017.5.1_12:21:21 利用者が「!今日はいい天気」と入力し、同事実が一時文脈に追加されたことが原因
また、「利用者入力を優先」させる結果として、利用者入力に起因する前記特許文献2の逆質問(コンピュータから利用者への動的質問)や特許文献3の前向き推論(コンピュータによる自動推理)によって確認・証明された事実(一時文脈)も、最新の利用者入力に類するものとして、反対の知識表現より優先させるよう上記処理を行うことが、総合的な整合性や論理性・予測性を確保する上で有利である。

したがって、本発明の請求項4は、
論理に翻意時に反対の意味の表現を論理プログラム又は一時文脈を格納するメモリから削除することを特徴とする、
請求項3に記載のコンピュータプログラムを提供する。
これにより、削除後の論理プログラムや一時文脈の可読性が向上し、総合的な論理の人的・機械的な整理が容易になる。
なお、ここで「論理プログラム」とは、上記リストの15~21のような内容であり、「一時文脈」とは、これに加えて、利用者が具体的な問題案件を表現する事実等を入力してメモリに追加したもの(及び、特許文献2、3の逆質問や前向き推論で動的に(=実行時に)メモリ追加された事実等)である(本明細書にわたって同じ)。

また、本発明の請求項5は、
論理に翻意時に反対の意味の表現を論理プログラム又は一時文脈を格納するメモリからコメントアウトすることを特徴とする、
請求項3に記載のコンピュータプログラムを提供する。
これにより、コメントアウト後の論理プログラムや一時文脈の論理の整理の経緯が可視化され、総合的な論理の機械的な整理、人又は機械による(論理プログラムや一時文脈の)バージョン管理が容易になる。
また、本発明の請求項6は、
コメントに、タイムスタンプ又は原因イベント識別情報を自動付与することを特徴とする
請求項5に記載のコンピュータプログラムを提供する。

なお、上記の例では、ルールのヘッド(効果)に「!」を付して、家畜に毒を食べさせる解をグローバルスコープで排除しているが、右辺のボディのいずれかの条件に付した場合には、付された条件が「ありえない」という事実が論理プログラムまたは一時文脈に存在すること、もしくは、付された条件が「ありえない」とする自動証明の成功(メモリ中の論理プログラムまたは一時文脈のルールを用いた)を要求する条件文となる。
このルールの条件としての「!・・・」の具体的な解釈(コンピュータによる実現)は、頭に「!」のついた事実(固定文字列)の検索(範囲は論理プログラムおよび一時文脈のメモリ)については、単純な文字列一致であり、実現方法は自明である。一方の自動証明については、頭に「!」のついたルール(上記15行目のようなルール)の「!」を省いたルールによって、同じく「!」を省いた「・・・」が証明できればその条件を充たすことにする等という実現方法でもよい。この証明の実現方法については、特許文献1がすでに出願公開になっているので参照されたい。
総じて、このような意味論(コンピュータの解釈)は、従来のPROLOG等では実現できていなかったものであり、現実的な問題の正確で簡潔な表現とコンピュータ処理による解決とを非常に容易にするものである。

また、本発明の請求項7は、
請求項1から6のいずれか一項に記載のコンピュータプログラムを用いた装置を提供する。

また、本発明の請求項8は、
請求項1から6のいずれか一項又は図2に記載のコンピュータプログラムを用いた方法を提供する。
【図面の簡単な説明】
【0007】
図1】本発明の一実施形態による、論理プログラム(固定的な事実及びルール)、利用者によりすでに追加されている一時文脈、利用者により新たに追加される事実(一時文脈)及び利用者により新たに追加される質問文、の関係について説明する図である。
図2図1等を実施するためのコンピュータプログラムの最も基本的な処理フローチャート(方法としてのステップ)を説明する図である。
図3】実施するコンピュータとしての一般的な構成を示す説明図である。
【発明を実施するための形態】
【0008】
本発明は、特許文献1の論理型AI(PROLOGのサブセット+α)と知識表現(ほぼ自然言語で記述できる)を用いた自動アイディア合成システムとして実施することができる。この詳細な構成やアルゴリズム内容は本発明の本質ではないので、ここでは詳述しない。
【実施例
【0009】
図1は、本発明の一実施例による、論理プログラム(固定的な事実及びルール)、利用者によりすでに追加されている一時文脈、利用者により新たに追加される事実(一時文脈)及び利用者により新たに追加される質問文、の関係について説明する図である。メモリ内配列の15行目から21行目までを表示し、残りは省略している。一時文脈は22行目以降に格納している。
15行目には、「ありえない」のルールとしての表現である、「!$Xに$Yを食べさせて儲ける :- $Xは家畜 ; $Yは毒 ;」 が存在し、家畜であることが分かっている$Xの値(例えば「ヤギ」)と毒であることがわかっている$Yの値(例えば「ヒ素のついた紙」)との組み合わせ(値組)が、「$Xに$Yを食べさせて儲ける」の変数組($X,$Y)を同時に束縛することを排除(制限)する知識表現となっている。

図2は、図1等を実施するためのコンピュータプログラムの最も基本的な前向き推論の処理フローチャート(方法としてのステップ)を説明する図である。
ステップS1は、〇〇〇(なんらかの固定文字列)を、前向き/後ろ向き推論の根拠として用いようとしている場面(実行環境のプログラムの中)で起動される。
ステップS2では、頭に「!」をつけた「!〇〇〇」が、論理プログラム又は一時文脈に事実として存在しないかメモリ内を検索する。
ステップS3で、存在すれば、「ありえない」こととなるので、根拠として用いれないと決定する(S7)が、存在しない場合は、ステップS4でさらなる自動確認を行う。
ステップS4は、メモリに格納した論理プログラム又は一時文脈中のいずれかの「!□□□:-・・・」型のルールについて、「!」をとった「□□□:-・・・」ルールで〇〇〇をメモリ中の知識から自動証明できないか自動確認する。
ステップS5では、自動証明できることが確認できた場合にはやはり、根拠として用いられないと決定し(S7)、そうでない場合には、根拠として用いることを決定する(S6)。
実際には、ステップ4において、特許文献1(出願公開済)で詳述している多長一致などの特別なユニフィケーション(単一化)やバックトラックを含む後ろ向き推論も行うことがさまざまな面で有利であるが、本明細書の主旨とは異なるので(また、通常のPROLOGの探索でもある程度代用できるため)、ここでは詳述はしない(出願公開されているので参照されたい)。

図3は、実施するコンピュータとしての一般的な構成を示す説明図である。ここには本発明に固有の特徴はないため詳述はしない。
【符号の説明】
【0010】
4 本発明で用いられる一般的なコンピュータ(利用者専用のパーソナルコンピュータ、共有ファイルサーバー、Webサーバー)
4a~4k 一般的なコンピュータ4(利用者専用のパーソナルコンピュータ、等)の一般的な構成要素
11 論理プログラム(固定的事実とルール)
12 データ(論理プログラムに隣接してすでに配列型メモリに追加されている一時文脈)
13 新しい事実(一時文脈)1個と質問1個
14 右辺の3個以上の条件が成立したら左辺の命題の成立を自動確認(自動追加&通知)するという意味のルール
15 新しい事実も加味した2つの回答(ただし、本発明により、1つの回答候補が削除されている)
S1 一実施例において、事実〇〇〇、又は、変数を含まない/なくなった条件〇〇〇を根拠として用いようとしている場面/状態を検出するステップ
S2 同じ実施例において、事実!〇〇〇が、メモリ内の論理プログラム又は一時文脈に事実として存在しないか検索するステップ
S3 S2で事実!〇〇〇が、メモリ内に存在した場合にステップS7に遷移し、存在しない場合にステップS4に遷移するステップ
S4 メモリに格納した論理プログラム又は一時文脈中のいずれかの「!□□□:-・・・」型のルールについて、「!」をとった「□□□:-・・・」ルールで〇〇〇をメモリ中の知識から自動証明できないか自動確認するステップ
S5 S4において、「!」をとったいずれかの「□□□:-・・・」ルールで自動証明できる場合、ステップS7に遷移し、いずれのルールでも自動証明できなかった場合にステップS6に遷移するステップ
S6 〇〇〇を根拠として採用を決定するステップ
S7 〇〇〇を根拠として不採用を決定するステップ
図1
図2
図3