中学$PROLOGロゴ

HUMANOTE/中学$PROLOG 3.3 使い方マニュアル

はじめに、なぜ「思考プログラミング」か?

「中学$PROLOG」は、伝統的な論理プログラミング言語「PROLOG」をヒントに、 誰もが「自分の言葉」で「論理プログラミング」に慣れ親しんで頂けるよう、 当社で独自に開発した「論理プログラミング言語」です。
PROLOGの強力な自動証明機能や解探索機能を継承しつつ、 新たに「ふだんの言葉のままで」そうした機能による論理的な思考を進められるようにしています。 ネットワークを活用した知識の実行時補足機能も、推論を強力にサポートします。

従来の論理プログラミングには、次のような特徴がありました。
1) C(++)言語やJAVA等の「手続型プログラミング言語」に比べて論理(独立性の高い宣言的知識)を簡潔に表現できる。
2) 表現された論理を組み合わせて、「根拠の伴った」結論や「連立式を同時に充足する」解集合を、健全(考え違いがない)かつ必要な完全性(考えモレがない)をもって自動的に導ける(自動証明と解探索)。

しかし、その代表格である伝統的なPROLOGにおける「一階述語論理」の表現は、次のように、例えば中学生には慣れ親しみにくいものでした。
A 「太郎はラーメンがメッチャ好き」等といった利用者がふだん用いている言葉使いを取り扱うのは不得意であり、「好き(太郎,ラーメン)」等といった一定の形式の「述語論理式」に直す必要がある。
B 知識を交換したり解釈したりするためには、「述語論理式」において主語、述語、目的語等が出現する順番を事前に取り決め、これに沿ってプログラミングすることが必要になる。

「中学$PROLOG」は、伝統的なPROLOGにおけるこのような問題を、言語検索と推論(演繹)とを数学的に統合した「言葉方程式」として解決する等、「誰もが」論理プログラミングに気軽に慣れ親しんで頂けるように様々な工夫をした結果、より一般的な思考プロセスをシミュレーション/追跡できる「思考プログラミング言語」として発展してきました。
本書では、「思考プログラミング言語」である「中学$PROLOG」(V3.3)自体の説明とともに、この「思考プログラミング言語」をコンピュータで動作させる統合インタープリタソフトウエア「HUMANOTE」の説明も行います。「HUMANOTE」はインタープリタであると同時に、論理を補足する根拠等を求めてインターネット上を論理的にサーフィンできる「論理サーフィンブラウザ」ソフトとしても動作します。

21世紀の人工知能時代を、誰もが「論理サーフィン」できる、新しい「思考プログラミング」の力を、是非ともお楽しみください。

企画・開発・販売責任者
ナレルシステム株式会社 代表取締役
中村 圭介

1.何ができて、何ができないか? PROLOGとの簡単な比較

何ができるか?

  • PROLOGと同様のファクトとルールによる(宣言型)述語論理プログラミング(新概念の構成要件の定義と再帰的な論理展開)
  • ふだん使っている自由な言葉(=標準的な辞書、格構造、語用論がない。方言、外国語、造語等も可能)での自動推論(演繹)
  • プログラムの書かれたリストファイル間引用関係のユーザー定義並びに実行時引用による知識/データ連携(LOR/LOD)
  • 個人用/組織用/公開用の知識ベースの個別運用、並びに、実行時引用による相互連携
  • 思考シミュレーション(①クローズドクエスチョン(=変数なし)、②オープンクエスチョン(=変数あり)、③前向き推論)
  • 思考シミュレーションのための便利な文法(4つのOR、2つのNOT、差分質問、連続主張、挨拶構文、逆質問、等)
  • 発明・マーケティング・行動アイディア等の自動合成(価値観の定義と利用、科学的/道義的にありえない解の排除等も可能)
  • 音声認識/合成、推論、タイマー、マルチメディア、手続管理等を利用した案内、話し相手、思い出箱、教育、暗記支援、LOR式地域探訪共創アドベンチャーゲーム等の制作
  • 判断や解(複数可)の「根拠の表示」(ツリー形式)、並びに、思考(判断や探索)の「過程(プロセス)」の表示(トレース)
  • 思考プログラミングと思考実験を通じて、論理学の基本を習得し、論理的に自ら考える/機械に考えさせる自信を醸成すること
  • →個人(や組織)の想像力と創造力を増幅し、身近な気づき等を発明や社会的な成果に繋げ、個の生きがいの向上に資する
  • 現状で何ができないか?

  • 機械学習(ディープラーニング、データマイニング等。ただし、機械学習による判断を論理的に統合する受託開発等は大歓迎)
  • 数値や文字列の複雑な演算や比較(但し、手続的解釈の途中において、簡単な演算・比較・代入は可能。今後改善予定)
  • PROLOGの一部の機能(カット、リスト等の難解な機能。カットは代替機能を用意済。リスト構造は今後対応予定)
  • 伝統的PROLOG、その記法の例との簡単な比較

  • PROLOGは1972年ごろにフランスにおいて論理学をもとに考案された主に教育用の論理プログラミング言語です。
  • プログラミング言語とは、コンピュータで動かす「プログラム」を作る時に使う「ことば」の集合です。
  • PROLOGでは「りんごは果物」という意味の文を「果物(りんご).」と書きます。
  • 中学$PROLOGではこのような書き方ではなく、「りんごは果物」という自分の言葉のまま書くだけでも推論の根拠(事実、ルールの要件)となるように作られています。一見、命題論理しか扱えないように見えますが、変数のついたヘッドやボディの条件式が「$Xは果物」であったり「${買ったもの}は果物」であったりしますので、一致(ユニフィケーションと呼びます)の際に、自然と主語や述語(や目的語等も)を意識したものになります。
  • 2.インストール等、初回起動、ライセンス認証

    動作要件

  • Windows 7,8,10に対応、メモリ1GB以上、ディスク空き容量200MB以上
  • インターネット接続(認証や実行時引用機能に必要)
  • .NET Framework 4 以降のインストール(Windows 7では事前インストールが必要)
  • - 動作要件確認プログラムにより、NET Framework 4 以降がインストールされているかを確認できます。
    - 上記のリンクから確認出来ない方は、インストールされた"html"フォルダ配下の"prolog_html.files"フォルダ内の"dotnet-installcheck.bat"をダブルクリックして実行して下さい。
    - .NET Framework 4 Client Profileのダウンロード

    インストール

    インストールの具体的な手順
    0.【Windows7の場合のみ】事前インストールを実行
    Windows7の場合は、先述したとおり、.NetFramework4以上がインストールされていることをご確認ください。
    また、Windows7の場合は、以下のファイルをマイクロソフト社のダウンロードサイト1(SpeechPlatformRuntime,SpeechPlatformRuntime64)ダウンロードサイト2(MSSpeech_TTS_ja-JP_Haruka)等からダウンロードし、以下の順番でインストールしてください。
    SpeechPlatformRuntime.msi
    SpeechPlatformRuntime64.msi(WindowsがOSとして32ビットの場合は不要)
    MSSpeech_TTS_ja-JP_Haruka.msi

    1.インストーラ実行
    WindowsのバージョンおよびOSのビット数(機械のではない)に応じて、解凍したZIPファイル(※)によりできたフォルダ中から、以下のいずれかのインストーラ(※)を実行します。CD/USBメディアに記録されたもの、メールに添付されたもの又はダウンロードしたもの。
    win7_32bit_setup.exe
    win7_64bit_setup.exe
    win10_32bit_setup.exe
    win10_64bit_setup.exe

    2.使用許諾契約
    ソフトウェア使用許諾契約書を注意してお読みください。使用許諾契約の条項に同意していただけた場合のみ、インストールを進めることができます。

    3.インストール先の設定
    ディスクの空き容量(200MB以上)を確認して、インストール先を設定してください。 ※"Program Files"など、アクセス許可が必要なディレクトリに設定すると、正常に動作しないことがあるのでご注意ください。通常のドキュメントフォルダでも多くの場合、正常に動作します。

    4.インストール内容の確認
    インストールする内容(およびユーザー情報)が表示されます。

    5.インストール開始
    インストールを開始します。 インストール先ディレクトリが作成済みの場合、その中のファイルは上書きされます。

    6.インストール完了
    インストールが完了したことを確認してください。
    ※必要なファイルの追加インストールを推奨される場合がありますので、未インストールの場合は追加インストールを行ってください。
    管理者権限
    インストールの条件によっては、一部の機能がそのままでは使えない場合があります。
    そのような場合は、以下のようにjdprolog.exeを管理者権限で実行するように設定してください。

    1.jdprolog.exeを一度終了して下さい。

    2.jdprolog.exe(ショートカットでも可)のプロパティを右クリックで開きます。

    3.「互換性」タブの「すべてのユーザーの設定を変更」をクリックします。

    4.「すべてのユーザーの互換性」タブが表示されますので、「管理者としてこのプログラムを実行する」にチェックを付けて[OK]を押します。

    5.jdprolog.exeを起動して下さい。

    初回起動時の安全確認(Windows 8.1,10の場合のみ)

    1.初回起動時、「WindowsによってPCが保護されました」と表示されることがあります(SmartScreen機能)。

    2.「詳細情報」をクリックします。

    3.「実行」ボタンをクリックすると、アプリケーションが起動します。

    4.次回以降は、本アプリケーション(HUMANOTE/中学$PROLOG)について、この確認は行われなくなります。

    起動とライセンス認証

    まずは中学$PROLOGを起動してみましょう。jdprolog.exeをクリックして起動してください。

    初めて起動する場合は、プログラムの動作範囲が5行に制限されています。ライセンス認証を行うことによりより多くの範囲が使用可能になります。
    「メニュー」→「ヘルプ」→「ライセンス認証」とクリックするとメールアドレス及び認証コードを入力する画面が表示されます。
    中学$PROLOGを購入頂いた際にご登録頂いたメールアドレス及び通知された認証コードを入力してください。

    3.プログラミング例

    中学$PROLOG画面

    上の画像に対応したプログラミングプロセス

    プロセス
    1.正しいと思っていること(認識)を、自分の言葉で蓄積していきます。
    → 例.「生きるためには食べなければならない」 「みかんは食べ物」

    2.インターネットの知識や情報を、コピーペーストにより、リストに追加登録して認識を補足することもできます。
    → 例.「みかんはカゼの予防になる」

    3.自分の言葉におきかえるためのルールをリストに登録することにより、インターネット等から引用する内容を、その後の推論に活かしやすくなります。
    → 例.「$Aの予防には$B :- $Bは$Aの予防になる」

    4.自分の言葉におきかえるためのルールだけでなく、新しい仮説や案を、推理・生成するためのルールも、自ら定義することができます。
    → 例.「$Bを粉にして$Aの予防薬を作る :- $Aの予防には$B;$Bは食べ物又は飲み物」
         「$Xは食べ物又は飲み物 :- $Xは食べ物」
         「$Xは食べ物又は飲み物 :- $Xは飲み物」

    5.「質問」を行うと、これまでリストに登録した「認識」内容をもとに証明可能な「答え」が推論(自動証明と解探索)されます。
    → 例. 質問文「?$X予防$Y」
    ⇒ 答え「$X=みかんを粉にしてカゼの、$Y=薬を作る」
      ?$X予防$Y
        [5] $Bを粉にして$Aの予防薬を作る :- $Aの予防には$B;$Bは食べ物又は飲み物;
          [4] $Aの予防には$B :- $Bは$Aの予防になる;
            2 みかんはカゼの予防になる
          [6] $Xは食べ物又は飲み物 :- $Xは食べ物;
            3 みかんは食べ物

    6.思った答えが出てこない場合は、登録した事実やルールが足りない場合や間違っている場合がありますので、事実やルールを追加登録(又は修正)することになります。
    → 例.「しょうがは食べ物」
         「しょうがはカゼの予防になる」
    → 例. 質問文「?$X予防薬$Y」
    ⇒ 答え「$X=しょうがを粉にしてカゼの、$Y=を作る」
       ?$X予防薬$Y
        [5] $Bを粉にして$Aの予防薬を作る :- $Aの予防には$B;$Bは食べ物又は飲み物;
          [4] $Aの予防には$B :- $Bは$Aの予防になる;
            7 しょうがはカゼの予防になる
          [8] $Xは食べ物又は飲み物 :- $Xは食べ物;
            6 しょうがは食べ物

    4.ちょっとだけ実際にやってみる

    1.事実をリストとして登録

    リストは事実又はルールの集まりです。送信を行うたびに登録・蓄積されていきます。
    まずは自分の知っている簡単な事実(認識)を入力してみましょう。

    例:りんごは果物である


    入力が終わりましたら、右の[送信ボタン]を押してください。F5キーを押すか[ENTERキー]を押すことによっても送信することが出来ます。
    上の表示ログ欄に、入力した文章及び「リストに追加しました」というメッセージが表示されたはずです。
    ☆参考:「事実

    2.単純なルールをリストとして登録

    ルールも入力してみましょう。
    ルールは「〇〇なら☓☓である」という内容であり、複数の「〇〇」と「☓☓」を、「:-」及び「;」という記号で区切って表記します。
    事実と同様に、登録するルールを入力して送信をすると、「リストに追加しました」と表示されるはずです。
    また、改行で区切った複数の事実やルールを入力して送信すると、複数の事実やルールを一括して登録することができ、便利です。

    例:りんごは木の実である :- りんごは果物である


    ☆参考:「ルール

    3.変数つきのルールをリストへ追加

    リストには、単純なルールだけでなく、変数つきのルールも追加できます。

    例:$Xは食べ物である :- $Xは果物である


    ☆参考:「変数

    4.リストを表示

    [#list]・・・現在のリストをすべて表示
    →このコマンドを送信するか、[Ctrlキー + Lキー]を押すことにより、現在のリストに含まれる事実やルールを表示して確認することが出来ます。
    [#list 行番]・・・行番で指定した行の内容を表示
    →現在のリストの指定された行の内容が表示されます。


    例:上記の例で使われた事実やルールをリストに登録した状態

    1 : りんごは果物である
    2 : りんごは木の実である :- りんごは果物である;
    3 : $Xは食べ物である :- $Xは果物である;


    5.もうちょっとサンプル

    他の基本サンプル

    上の画面説明の、「⑨ホームボタン」を押してホームリストに移動し、各種のサンプルをお試し下さい。

    自己紹介(新しいタブ→スライドシェア)

    過去の教室例

    6.仕様一覧(お試し)

    01.閉世界仮説

    閉世界仮説(へいせかいかせつ)とは、真であると証明できないことは偽とみなす考え方です。

    02.事実

    「事実」は、変数を含まない文字列の形式をとります。
    また、事実は"真であると当初から定義された命題"でもあります。 したがって、例えば「僕は幸せになりたい」といった事実がクエリ「僕は幸せになりたい」とマッチした場合、クエリはその日本語としての意味にかかわらず真を返します。 また、「僕は$Xになりたい」等のように、クエリに変数が含まれている場合、事実は変数の定数解を与えることにつながります。
    ☆参考:「命題(論理学)

    03.ルール

    ルールは、例えば「☆☆ならば□□」、「◯◯かつ××かつ△△ならば□□」といったように(□□の)十分条件を表現したものです。
    条件となる部分(例では「☆☆」と「◯◯かつ☓☓かつ△△」)をボディといいます。ボディ内はAND結合です。 結論となる部分(例では「□□」)をヘッドといいます。 中学$PROLOGでは、"ならば"を「:-」という記号で、"かつ"で連結される条件集合を「;」で区切って一行で書きます。
    例は、「☓☓:-◯◯」や「□□:-◯◯;××;△△」と書けます。

    04.変数

    変数は「なんらかの値が入る」ことを意味する記号です。
    「$X」あるいは「${変数名}」という形で、「$」につぐ一文字の大文字アルファベットで表記するか、または、「$」につぐ「{}」(中括弧)で変数名を囲んで表記します。

    05.リスト

    リストとは事実やルールを並べたものです。
    「.jpl」という拡張子で保存や読込を行うことが出来ます。「メモ帳」等で編集することもできます。
    伝統的なPROLOGのいわゆる「リスト」の定義とは異なり、中学$PROLOGの「リスト」はプログラミング言語BASICの「リスト」に近いものです。

    06.命題(論理学)

    中学$PROLOGにおいて、「命題」は、変数や「?」を含まない固定文字列の形式をとります。
    いくつかの変数を含む文字列(クエリ)であっても、全ての変数に定数(固定文字列)が代入される(束縛される)と、命題となります。

    07.コマンド一覧

    08.サブ問合せ(サブクエリ)

    中学$PROLOGの推論(自動証明と解探索)において、 「真偽を証明したり解を探索したりする主題」を表したものを「問合せ(クエリ)」と呼びます。「サブクエリ」は「クエリ」の一種です。
    「利用者による質問」は、一つの自動推論において、その主題となる「最初の問合せ(クエリ)」です。
    中学$PROLOGは、 「最初の問合せ(クエリ)」である「(利用者による)質問」を、 リスト中の「ルール」によって複数の別のクエリ(サブクエリ)に置き換えたり分解したりすることで、 その「(利用者による)質問(=最初の問合せ(=クエリ))」をさまざまな論理構成で証明しようとします。
    この時、行の間はOR結合、同じルールの条件式の間はAND結合となります。

    09.送信

    入力欄に入力された内容を中学$PROLOGが実行します。
    [送信ボタン]を押す、F5キーを押す又は[ENTERキー]を押すことにより送信出来ます。

    10.表示ログを出力

    「メニュー」→「ファイル」→「表示ログを出力」 現在、表示ログ欄に蓄積されている内容の全てを「.log」という拡張子が付いたファイルに保存します。

    11.メニューの詳細項目

    詳細
  • 「メニュー」→「操作/表示」→「全体リスト表示/req有又はファイル指定質問の場合」
  • 全体リストとは、req文やファイル指定質問によって動的に読み込まれているリストファイルを含めたリストのことです。
    例えば、req文実行時、その効果はその場所以降(ボディ内のreq文より右側)の条件をサブクエリとした探索が全て終わるまでです。
    そのため、解を返すときに動的に読み込まれた全体リストを強制表示して、利用者が根拠全体を確認できるようにします。


  • 「メニュー」→「操作/表示」→「エラー判別/リスト登録時の重複」
  • リスト登録する内容が、すでに登録された内容と同じものでないか判別します。
    リスト読み込み時は、ワーニング(警告)メッセージが表示され、リストに登録されます。
    入力欄からの送信時は、エラーメッセージが表示され、リストに登録されません。


  • 「メニュー」→「操作/表示」→「エラー判別/登録時の単純相互再帰」
  • リスト登録する内容が、すでに登録された内容の、ルールヘッドとルールボディが入れ替わったものでないか判別する際に使います。
    ヘッドとボディが入れ替わったルールがある場合、お互いのヘッドとボディがマッチしてしまうため、2つのルールが互いにマッチする相互再帰になり、探索で無限ループが発生してしまうためです。
    相互再帰になる場合でも、変数は同じ文字列でなければ判別されません。


  • 「メニュー」→「操作/表示」→「無限ループの非表示」
  • 推論中に無限ループが発生した場合、無限ループに関するエラーメッセージの表示を行わないようにします。
    無限ループには影響せず、推論の結果は変化しません。また、トレースの無限ループに関する内容は影響せずに表示されます。

    12.質問

    「質問」とは
    中学$PROLOGに対して、利用者が直接に問う内容(=問合せ(=クエリ))を「(利用者による)質問」と呼びます。
    「質問」には、解(または解組)を求めるために変数(または変数組)を含むもの(オープンクエスチョン形式。例えば「?僕の適職は$A」)と、 真偽のみを問うもの(クローズドクエスチョン形式。例えば「僕の適職はお笑い芸人?」)とがあります。

    いずれも、質問の内容を表す文字列の先頭に「?」をつけることにより「(利用者からの)質問」とみなされる質問文になります。 「質問」は、質問文を入力欄から送信することにより実行します。
    変数を含む文字列からなるオープンクエスチョン形式の質問文は、解を要求している質問となり、 答えに「解」(又は解の集合)が含まれますが、 変数を含まないクローズドクエスチョン形式の質問文に対しては、 答えに真偽のみが含まれます。また、いずれの場合も、答えの後に次の「根拠ツリー」が示されます(オプションがONの時)。

    13.リストを作るポイント

    表記ゆれに気をつける
    例えば、簡単な事実を登録するには「○○は××」で統一しましょう。
    あるいは、「$X:-$Xである」というルールを追加して、「××」と「××である」とを同一視するようにすることも可能です。
    しかし、表記ゆれを吸収する処理が加わる分、スピードが遅くなります。
    全角・半角、スペースについて
    以下の記号はプログラムが半角へと標準化するため、入力する際、全角・半角を意識する必要はありません。

    各種のスペース文字もプログラムが標準化します。登録後の内容を確認する際はご注意ください。
    スペルミスに注意
    一文字でも違うと、異なる命題、異なる事実、異なるクエリとなります。スペルミスには気をつけましょう。
    print命令を組み込む

    print文は書式内の変数に入る内容が見つからない場合、偽を返して、そのルールの探索を終了します。
    書式は固定文字列と変数が混在するものを扱えますのでリストのデバッグに便利です。
    終了時、起動時のリスト
    終了時に登録されているリストは自動的に保存され、次回起動時に自動的に読み込まれます。 保存先のファイル名は「default.jpl」です。

    16.ショートカットキー

    表示ログ上のショートカットキー
    キー操作 操作内容
    Ctrlキー + C コピー
    Ctrlキー + A すべて選択

    リスト表示欄のショートカットキー
    キー操作 操作内容
    Ctrlキー + A リスト表示欄をすべて選択
    Ctrlキー + C リスト表示欄で選択した項目を、現在のリストからコピー
    delete リスト表示欄で選択した項目を、現在のリストから削除

    メイン画面でのショートカットキー
    キー操作 操作内容
    Ctrlキー + S リストをファイルに上書き保存する
    Ctrlキー + L 現在のリストを表示する
    Ctrlキー + P 印刷
    Ctrlキー + O リスト読み込み
    Ctrlキー + A すべて選択
    Ctrlキー + T 連続コマンドクリア
    Ctrlキー + F1 マニュアル表示
    Ctrlキー + C 中断関連処理 (発声中断 探索中断フォーム表示 読込中断メッセージボックス表示)
    PAUSE 中断関連処理 (発声中断 探索中断フォーム表示 読込中断メッセージボックス表示)

    入力欄上でのショートカットキー
    キー操作 操作内容
    F1 CC(一時文脈クリア) + 入力欄クリア + 表示ログのクリア
    Ctrlキー +F1 ローカルのマニュアル表示
    Shiftlキー +F1 ネットのマニュアル表示
    F2 load(新規読込)
    Ctrlキー +F2 ネット読込(使える場合)
    Shiftlキー +F2 追加読込
    F3 save(上書き保存)
    Ctrlキー +F3 ネット保存(使える場合)
    Shiftlキー +F3 save(上書き保存) + ネット保存(使える場合)
    F4 現在のリストを表示する
    Shiftlキー +F4 印刷
    F5 入力欄の内容を送信(入力欄に何もなければ、$A送信)
    Shiftlキー +F5 入力欄の頭に?を付ける(既に頭に?があったらそれを削除)
    F6 入力欄の文字列の文中に変数をつける
    F7 入力欄の文字列の末尾に変数をつける(先頭一致)
    F8 コマンドヒストリバック(今より一つ前のコマンドを表示する)
    Shiftlキー +F8 コマンドヒストリフォワード(今より一つ後のコマンドを表示する)
    F9 トレースモードを実行する(兄弟のトレース)
    F11 トレースモードを実行する(子供のトレース)
    F12 "前後に変数を挿入して送信「${_L_}〇〇〇${_R_}」(先頭に?(質問文)の場合、?の後に変数を加える)
    Ctrlキー + S リストをファイルに上書き保存する
    Ctrlキー + L 現在のリストを表示する
    Ctrlキー + P 印刷
    Ctrlキー + O リスト読み込み
    入力欄の最後尾で「↓」 コマンドヒストリバック(今より一つ前のコマンドを表示する)
    ENTER 入力欄の内容を送信する
    Ctrlキー + ENTER 入力欄の内容を改行する

    17.手続き的解釈

    手続き的解釈
    手続的解釈とは、ルールのボディ部における複数の条件式の並びを、 その並んでいる順序を保った「探索手続き」(副作用を伴う場合には処理手続き)として解釈することです。
    中学$PROLOGにおいて、ルールのボディ部における複数の条件式間の関係はAND結合であり、 その並んでいる順序に関係なく、全ての条件が真でありさえすればルールヘッド部は真となります(宣言的解釈)。
    しかし、「条件式が並んでいる順序でコンピュータが条件の探索/処理をする」という約束 (※多くの手続き型言語のif文内の条件のAND結合はそのような約束になっています)をすることにより、 ルールのボディ(条件部)を編集する人は、確認された条件(より左側に並んでいる条件)と確認されていない条件(より右側に並んでいる条件)との間に、 「変数の絞り込みの中間結果」を表示するprint文等(ある種の副作用を伴うコマンド)を配置することが可能になり、 コンピュータ言語としての幅を広げています(BASIC/C言語等と同様の手続的/操作的な意味論の付与)。

    18.一時文脈

    ■・・・

     利用者が一時的に登録した、ディスクやネットに保存されていないプログラム(事実&ルール)です。
     一時的な情報を活かした診断などの推論に用いられます。

    19.肯定文(こうていぶん)/一時文脈(いちじぶんみゃく)

    ■○○○

     一時的な仮定です。セーブすると、「■」が消えて、「肯定文(思考プログラム)」になります。

    20.定型応答節(ていけいおうとうせつ)

    ○□○ ; ○△○ :: □□□ ; △△△ ; ○○○ ;

     左辺はそれぞれがボタン画面に表示されます(変数付き文字列を除く)。
     入力欄や音声合成による質問文が左辺のいずれかとマッチ(完全一致)した場合、右辺のいずれかをランダムに応答します。

    21.変数(へんすう)のついた応答節(おうとうせつ)

    ○□○ ; ○△○ :: □□□ ; △△△ ; ○○○ ;

     左辺はそれぞれがボタン画面に表示されます(変数付き文字列を除く)。
     入力欄や音声合成による質問文が左辺のいずれかとマッチ(完全一致)した場合、右辺のいずれかをランダムに応答します。

    22.ボタンルール(ボタンホーン節)

    ○○○ :& □□□ ;

     ○○○をボタン画面に表示します(変数付き文字列を除く)。
     その他は、演繹ルールと同じです。

    23.マクロルール

    ○○○ :# □□□ ;

    【基本】  
     マクロルール「:#」は、右辺の「コマンドの列」(例えば、#list、#clear、#M ""...""、#S ""...""、#I ""...""、等が「;」で区切られて並んだものもの)に、左辺の「名前」をつけたものです。  
     「#」に左辺の「名前」をつなげた「#名前」を、入力欄から送信して、右辺の「コマンドの列」を順番に呼び出すことができます(「#」のかわりに「?」でもよい)。  
     左辺の「名前」は、変数付きである場合を除いて、ボタン画面に表示されます。  

     【右辺のコマンドに変数が含まれる場合】  
     基本的には、その変数を埋める答え(解)を求める質問を、コマンドの数だけ連続して送信するマクロをつくることになります。ここでは、コマンド間では、同じ変数名であったとしても異なる変数となり、同じ値が代入される(解として採用され、束縛される)わけではありません。  
     つまり変数のスコープが異なることになります。ただし、コマンド内では同じ名前の変数は同じ変数であり、同じ値が代入されることになります。  

     【名前が、変数付きである場合】  
     名前が変数付きである場合でも、そのマクロルールが、入力欄や音声認識やボタン画面から(「#」や「?」をつけて)呼ばれたときは、変数であることが無視され、変数のない名前として処理されます。すなわち、呼び出す側(例「#東京は首都」)と呼び出される変数付きの名前をもつマクロルール(「$Xは首都 :# ...略」)が変数に値を入れてマッチしうる場合でも、マッチはしないことになります。  
     この場合は、「#$Xは首都」という呼び出し方により、マッチさせることができます。  
     【マクロルールが、演繹ルールや他のマクロルールから呼ばれた場合】  
     この場合は、呼ばれたほうのマクロルールは演繹ルールとみなし、コマンドの列は条件式の列とみなされ、変数のスコープが式間で共通(同じ名前の変数には同じ値が入る)ということになります。  

     ===============================================================  
     ・マクロルールが演繹ルールから呼び出される例  
     ===============================================================  
     太郎は花子のそばにいたい  
     $Xのそばにいたい :# #M ""動画$Xの近くの幸せ.MOV"";  
     太郎は$Xが好き :- 太郎は$Xのそばいたい ; #$Xのそばにいたい ;  

     入力欄>?太郎は$A  
     →$X=花子    
     →""動画花子の近くの幸せ.MOV""が表示される  

     ===============================================================  
     ・マクロルールがマクロルールから呼び出される例  
     ===============================================================  
     太郎は花子のそばにいたい  
     $Xのそばにいたい :# #M ""動画$Xの近くの幸せ.MOV"";  
     太郎は$Xが好き :# 太郎は$Xのそばにいたい ; #$Xのそばにいたい ;  

     入力欄>#太郎は$Xが好き  
     →$X=花子  
     →NO(動画表示されない)  

     「コマンドの列」に変数が含まれる場合、これらは、コマンド間では別の変数を意味します(スコープが異なります)。  
     ただし、左辺の「名前」に含まれる変数(例えば、「$Xは雨 :# $Xは$Yが必要;」については、左辺が送信されたとき)の束縛は、ボディ部に波及されます。"

    24.タイマーマクロ

    #▽▽▽ :# □□□ ;

     左辺がヘッドが「#」ではじまる▽▽▽に日時が記述されたマクロルールは、タイマーマクロです。  
     ▽▽▽の日時になったら、通常のマクロルールと同様に右辺を順番に実行します。  

    25.価値観ルール(比較ホーン節)

    ○○○ :> □□□ ; △△△ ;
    比較区切りで示された観点および要素について指定した順番であることを確認して真偽を返します。
    「>」、「>=」、「=」を指定することができます。

    26.前向きルール(自動確認ホーン節)

    ○○○ := □□□ ; △△△ ;

     一時文脈として□□□又は△△△が新たに得られた場合に、右辺の他の条件(□□□の場合は△△△、△△△の場合は□□□)が成立していないかを自動的に確認し、成立している場合には○○○を自動的に表示しかつ○○○を半自動で一時文脈に新たに加えます(前向き推論による診断等の実現)。  
     その追加により、新たな前向き推論をさらに実行する場合もあります(再帰的な前向き推論によるリコメンデーションや警告への応用)。  

    27.手続きルール(読み上げ)

    ○○○ :@ □□□ ;

     「@○○○」として呼ばれたときに、文字列「○○○」を手続きの名前として、マルチメディア画面(テキストタイプ)に表示し、かつ、音声読み上げを行います(変数付き文字列を除く)。  
     ・入力欄や音声認識による手続きの呼び出し時に、「@○○○」として指定する必要があります。  
     ・□□□は、演繹(えんえき)ルールの条件式として探索し、true/falseを返します。

    28.手続き呼び出し

    ○○○ :- @△△△ ; @□□□ ;

    手続きルールを△△△、□□□の順番に呼び出します。

    29.ORルール

    ORルール(通常)
    ○○○ :| □□□ ; △△△ ;

     条件のいずれかが真ならば真となります。  
     変数が残っている条件は偽になります。  
     左の条件から探して、偽である間(真となるまで)は他の条件を探します。  
    ORルール(表記ゆれ)
    ○○○ :! □□□ ; △△△;

     条件のいずれかが真ならば真となります。  
     変数が残っている条件は偽になります。  
     左の条件から探して、一つでも真になったものが否定されると、他の条件を探さずに偽になります。  
     実質同じ条件の表記ゆれを列挙する場合に便利です。  
    ORルール(異なる選択肢の許容)
    ○○○ :+ □□□ ; △△△;

     条件のいずれかが真ならば真となります。  
     変数が残っている条件は偽になります。  
     左の条件から探して、真となっても他の条件を探して、解を蓄積していきます。  
     異なる条件を許容する場合に便利です。
    ORルール(個数付)
    ○○○ :N □□□ ; △△△; 
    ○○○ :N= □□□ ; △△△; 
    (Nは2から9までの自然数)

     条件がN個以上真ならば真となります。  
     変数が存在する条件は、解の組み合わせについてN個以上真ならば真となり、解を蓄積していきます。  

    30.演算処理

    代入文(数値/文字列)
    {$A=○○○}

    変数に値を代入します。
    右辺の○○○に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。
    値比較文
    {○○○ 比較記号 △△△}

    ○○○と△△△の値を比較します。
    比較記号が成立する場合は真に、成立しない場合は偽になります。
    左辺の○○○と右辺の△△△に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。
    形式比較文
    {○○○ === △△△}

    ○○○と△△△の形式を比較し、形式が一致するものへと△△△の変数の値を絞り込みます。
    左辺の○○○に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。
    ~===の場合は、不存在条件(変数あり)と同様に、そのルール内でその変数に代入されないように制限されます。

    {○○○ ~=== △△△}

    値比較文と音声合成時に現在の日時に変換される。
    値比較文の場合、日時(#〇〇〇)と比較する。
    音声合成の場合、日時として発声する。

    31.マルチメディアの動画再生(手続コマンド)

    "#M "□□□"、#M_ "□□□"

     実行時に#Mの後に示す動画ファイル(□□□)をマルチメディア画面上に再生します。  
     #M_の場合、終了してなくても次のステップに進みます。

    32.マルチメディアの音声再生(手続コマンド)

    #S "□□□"、#S_ "□□□"

     実行時に#Sの後に示す音声ファイル(□□□)をマルチメディア画面上に再生します。  
     #S_の場合、終了してなくても次のステップに進みます。

    33.マルチメディアの静止画表示(手続コマンド)

    #I "□□□"、#I_ "□□□"

     実行時に#Iの後に示す静止画ファイル(□□□)をマルチメディア画面上に表示します。  
     #I_の場合、終了してなくても次のステップに進みます。

    34.マルチメディアのテキスト表示(手続コマンド)

    #T "□□□"、#T_ "□□□"

     実行時に#Tの後に示すファイル(□□□)のテキストをマルチメディア画面上に表示します。  
     #T_の場合、終了してなくても次のステップに進みます。

    35.ブラウザ表示(手続コマンド)

    #B "□□□"

     実行時に#Bの後に示すURL(□□□)のテキストをマルチメディア画面上を表示します。

    36.リストファイル遷移コマンド

    ○○○ :- #gof "ファイル名" ;

    現在のリストを"ファイル名"に移動します。


    ○○○ :- #ret ;

    前のリストに戻ります。


    ○○○ :- #home ;

    現在のリストを「ホームリスト」に移動します。


    ○○○ :- #cc ;

    現在のリストから一時文脈を全てクリアします。

    37.ウェイトコマンド(待機コマンド)

    ○○○ :- #wait "文字列" ;

    文字列が表す数値の時間(100ms単位)分待機させます。

    38.読み方明示機能

    「○○○|△△△」

    音声合成時、△△△の内容だけ読み上げます。

    39.録音機能

    録音ボタンで録音を開始、終了ボタンで録音を終了します。
    カレントディレクトリに録音したデータがwavファイルで保存されます。

    40.ホームリスト

    home.jpl

    他のリストへの移動ボタンやよく使うボタンを備えた、ユーザーごとの基本リストです。

    41.マルチメディアのテキスト表示文

    ○○○ :- #printm "□□□"

    ルールボディから、マルチメディア画面に□□□の文字列を表示します。

    42.音声合成文

    ○○○ :- #voice "□□□"

    ルールボディから、□□□の内容を音声合成します。変数を含めることもできます。変数の解が複数ある場合は、すべての解を音声合成します。

    43.呼び名

    "呼び名"ホームにもどる
    現在のリストを「ホームリスト」に移動します。

    "呼び名"中断
    中断関連処理を実施します。

    "呼び名"編集
    ボタン画面を閉じて、メイン画面に移動します。

    "呼び名"戻る
    前のリストに戻ります。

    "呼び名"CC
    現在のリストから一時文脈を全てクリアします。

    "呼び名"〇
    音声認識時、コマンド以外の「"呼び名"〇」という内容を、「?〇」として認識、送信されます。

    "呼び名"〇(特別機能)
    音声認識時、ネットワークノート区分〇(例えばA0)を変更する際に使います。

    44.枝刈り画面

    探索時にポップアップで現れます。探索途中の項目を押すと、それより深いその探索文脈が省略されます。
    「閉じる(×)」を押すと枝刈り画面のみ終了します。

    45.否定

    否定文(事実)/思考プログラム(しこうプログラム)
     肯定文の否定形です。
    日本語としての肯定文も含まれます。

    否定ルール(普通ホーン節)
     □□□を、存在確認(又は、変数により解合成)できた場合に○○○を偽とみなします(=偽を証明できたこととします)。
     ○○○を肯定していた事実はコメントアウトされます。

    否定条件
    否定を証明又は確認出来たときに真となります。
    PROLOGの閉世界仮説に対応する不存在条件(存在を証明できないとき)とは異なります。

    46.逆質問(変数なし)

    ○○○ :- ?□□□ ; △△△ ;

    条件の成立不成立を、質問や推論の実行時に、利用者に確認させる機能です。

    47.逆質問(変数あり)

    ○○○ :- ?□$X□ ; △△△ ;

    条件の変数に代入して成立する値を、質問や推論の実行時に、利用者に編集させる機能です。

    48.逆質問(変数あり) 複雑な例

    ○○○ :- □$X□$Y; ?□$X□ ; △△$Y△ ;

    条件の変数に代入して成立する値を、質問や推論の実行時に、利用者に編集させる機能です。

    49. 逆質問画面(変数なし)

    実行時にポップアップで現れます。
    ラジオボタンで「YES」、「NO」または「分からない」を選択します。
    これにより、選択に応じた肯定または否定の事実が足されます。また、既にあった事実のうち、利用者の判断と矛盾するものがコメントアウトされます。
    「閉じる(×)」を押すと終了します。

    50. 逆質問画面(変数あり)

    実行時にポップアップで現れます。
    現在の条件を確認し、その解候補の集合が過不足なく事実と一致していることを確認し、一致していない場合は下の欄を編集し、「以上でOK」ボタンを押します。
    これにより、編集に応じた肯定または否定の事実が足されます。また、既にあった事実のうち、利用者の判断と矛盾するものがコメントアウトされます。
    「閉じる(×)」を押すと終了します。
    「再検索」のチェックがついた状態で終了すると、探索終了時に再度探索を行います。

    51.前向き推論画面

    実行時にポップアップで現れます。
    前向き推論において新たに証明された事実が、表示されたり音声合成されたりするだけでなく、「事実として追加」を押すと一時文脈としても追加されます。
    「閉じる(×)」または「追加しないで閉じる」を押すと、事実を追加せずに終了します。"

    52.ネット過去分参照画面(一部のライセンスユーザーのみ)

    現在のネットワークノート区分(例えばA0)にネット保存した現在および過去のバージョン内容(ネットに残っている場合)を表示します。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルのみを表示します。
    起動時にポップアップで現れます。
    「閉じる(×)」を押すと終了します。

    53.重文質問

    {○○;△△}

    現在のリストに新たなルール(??? :- ○○;△△)を一時的に加えた上で、〇〇と△△の連立言葉方程式としてとらえ、〇〇と△△に含まれる変数の解を求めます。

    54.差分質問

    !!○○;△△

    現在のリストに事実(複数可)を加える前後で証明できる内容の差分を計算して求めます。

    55.連続主張

    !!!〇〇〇

    "連続主張(!!!)と定型応答(::)の部分一致処理を網羅的に行います。
    すなわち定型応答の左辺のすべてのパターンと一致を試み、一致して得られるすべての変数束縛に対して、右辺のすべての選択肢に対して波及させて、すべての選択肢を順番に表示します。

     12$X21;323 :: …

       !!!abc323abcの場合は良いが、!!!abc1244211の場合に、どうするか問題になる
       !!!は::の左辺のうち変数がないもの(323)についてはそのままでよい
       !!!は::の左辺のうち変数があるもの(12$X21)については含まれる判断が1回ではできない
        →${_L_}12$X21{$_R_}に置き換えて(${_L_}、${_R_}はから文字許す)、含まれる方向が逆にするのが素直
        A→多長一致が発生してしまう(ただし、最初のマッチだけ採用→for文発生しない)
        B→多長一致が発生してしまう(ただし、全部のマッチを採用→for文発生)
         →右辺がランダムということから、全部のマッチを採用することは必要か?
        C→!!!abc323abcでなく普通の文?abc323abc"

    101.共通の制限(ルール、事実、質問)

  • 1行のルールで用いる変数は16種類までです。
  • 1行に用いる文字数は最大で1024文字までです。
  • リストに登録出来る行数は最大で10000行までです。
  • 変数に「:YES」代入する(束縛する)ことはできません。
  • "__"、";;"は使えません。
  • 固定文字で区切られない複数の変数が含まれている内容は登録できません。
  • 変数を「${自由な文字列}」という形式で表記する場合、"自由な文字列"に以下の文字は使えません。
  • ¥ ^ . $ * ? | ( ) [ ] { }

    102.ルール及び事実の制限

  • ヘッドとボディが同じルールは登録できません。
  • 変数を含んだ事実は登録できません。
  • ヘッドに含まれている変数がボディに含まれていないルールは登録できません。
  • 現在のリストに既に存在する事実やルールは登録できません(オプション)。
  • 現在のリストに既に存在するルールのボディとヘッドが入れ替わったルールは登録できません(オプション)。
  • 1つのルールにはボディとして、命令文(print、req等)や条件式等を10個まで設ける事ができます。
  • 空白だけからなる事実やルールは登録できません。
  • 103.質問の制限

    無限ループの検出、探索深さ/探索回数の制限
    自己再帰、相互再帰

    その他

    お客様サポート

  • ソフトウェアの不具合やお客様からのご要望、お問い合わせにつきまして、ご購入日から3年間対応させていただきます。
  • 原則、eメールでの対応とさせて頂きます。
  • お手数ですが、info@humanote.xyz宛に、ライセンス認証で使用されたメールアドレスからお願いします。

  • ソフトウェア使用許諾契約

    必ず以下のソフトウェア使用許諾契約をよくお読み頂き、同意される場合にのみご使用ください。

    ナレルシステム株式会社(以下、「当社」)は、お客様に、メディア配布、メール送信、ダウンロード、その他の手段により提供されたソフトウェア(以下、「本ソフトウェア」)を使用する権利を下記の条件で許諾します。

    第1条 権利の許諾
    1.お客様は、本契約の条項にしたがって本ソフトウェアを使用する非独占的な権利を本契約に基づき取得します。お客様は、お客様のPCに搭載されたハードディスクその他の記憶装置に本ソフトウェアをインストールし、使用することができます。
    2.お客様は、本ソフトウェアをバックアップの目的において複製することができます。

    第2条 禁止事項
    1.お客様は、本ソフトウェアを改変、リバースエンジニアリング、逆コンパイルまたは逆アセンブルすることはできません。
    2.お客様は、本契約書に明示的に許諾されている場合を除いて、本ソフトウェアの全部または一部を使用、複製することはできません。
    3.お客様には本ソフトウェアを第三者に使用許諾する権利はなく、また販売、貸与またはリースすることもできません。

    第3条 契約期間
    1.本契約は、お客様が本ソフトウェアをダウンロードし、メールにより受領し、メディアを受領し、またはお客様のハードウェアにインストールした日をもって発効し、本条第2項によって終了されない限り有効に存続するものとします。
    2.お客様が本契約のいずれかの条項に違反したときは、当社は、お客様に対し何らの通知、催告を行うことなく直ちに本契約を終了させることができます。その場合、当社は、お客様の違反によって被った損害をお客様に請求することができます。なお、本契約が終了したときには、お客様は直ちにお客様のハードウェアに保存されている本ソフトウェアを破棄するものとします。

    第4条 免責
    1.本ソフトウェアのご使用、ご利用(本ソフトウェアにより出力されたデータの利用を含む)は、使用者、利用者ご自身の責任と費用によっておこなってください。当社は本ソフトウェアを利用する、もしくは利用できないことにより発生した損害、ならびに二次的に発生した一切の損害についていかなる責任も負わないものとします。
    2.当社は、いかなる場合においても、結果的、付随的あるいは懲罰的損害について、一切責任を負いません。お客様は、本ソフトウェアの使用に関連して第三者からお客様になされた請求に関連する損害、損失あるいは責任より当社を免責し、保証するものとします。
    3.本ソフトウェアは、一切の保証なく、現状で提供されるものであり、当社はその商品性、特定用途への適合性をはじめ、明示的にも黙示的にも本ソフトウェアに関して一切保証しません。

    第5条 著作権
    本ソフトウェアに関する著作権等の知的財産権は、当社に帰属し又は第三者から正当なライセンスを得たものであり、本ソフトウェアは、日本国およびその他の国の著作権法、特許法、商標法、意匠法、不正競争防止法ならびに関連する条約によって保護されています。

    第6条 一般条項
    本契約に関する紛争は、法令に特段の定めのない限り金沢地方裁判所を第一審の管轄裁判所とすることに合意します。

    第7条 バージョンアップ
    1.お客様に予告なしに本ソフトウェアの変更を行うことがあります。
    2.当社は本ソフトウェアを改良した新しいバージョンのソフトウェア(以下「新バージョン」という)をお客様に対して有償または無償で提供することができます。
    3.バージョンアップキットの提供を受けたお客様は、本ソフトウェアの使用権その他の権利を失い、新バージョンについて新しい契約による権利を取得するものとします。

    第8条 サポート期間
    1.本製品を購入された日か3年が経過した後は本ソフトウェアに関するサポートは終了するものとします。
    2.新バージョンが販売・配布された場合、本ソフトウェアは特別な理由により継続される場合を除き販売・配布終了となります。本ソフトウェアに関するサポートはそれに関わらず購入から1年経過した後に終了するものとします。
    3.前2項の規定にかかわらず、サポート終了後も当社の指定した期間内に限り、お客様はバージョンアップのサービスを受けることができるものとします。

    第9条 賠償請求
    お客様が、第2条または第3条に違反して本ソフトウェアの複製または譲渡、貸与等を行った場合、当社はお客様に対し、損害賠償として、本ソフトウェアの希望小売価格に複製回数を乗じて得た額の2倍に相当する金額を請求できるものとします。

    第10条 本規約の改定
    当社は、本規約を任意に改定できるものとし、また、当社において本規約を補充する規約(以下「補充規約」といいます)を定めることができます。本規約の改定または補充は、改定後の本規約または補充規約を当社所定のサイトに掲示したときにその効力を生じるものとします。この場合、会員は、改定後の規約および補充規約に従うものと致します。

    以上
    平成29年9月3日制定 平成29年7月28日改定(サポート期間を1年から3年に延長)

    謝辞

    安藤建剛さん、木戸口卓矢さん、川畑さんには本ソフトウェアの開発にあたり、多大なご協力を頂きました。深く感謝いたします。