ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

記号論理学という学問を知ってみたが

記号論理学は数学とは違うみたいですが、雰囲気が似ているので数学カテゴリにしました。

さて、当ブログはしばらくの間、PC関係のパーツについて書くブログになっていましたが、学問的な記事を書くのはいつぶりでしょうか。

過去記事を見てみたら2ヶ月ぶりでした!長え!

さて、10月から放送大学で記号論理学入門の番組を見ていました。

「放送大学って何」という話ですが、これは大学でありテレビ局です。
以前もデータ構造の勉強したという話で当ブログに出てきました。

関東の人は地上波で視聴できるので、ご存知の方も多いんじゃないでしょうか。

さて、番組は全15回ありまして、この度すべて視聴しました。
いや、第1回は見ていないんですけどね…。

要するに最近、私は記号論理学という学問について学んでいたのです。

当ブログの読者の方々は、記号論理学について知らないという人が多いんじゃないでしょうかね。

いや、わかりませんが…。
というわけで、いったいどんな学問なのか書いていったり、勉強した感想を述べます。





まず、記号論理学とは、命題を記号で表すことを根幹にした論理学です。

そして、論理学とは何かというと、推論する学問です。

推論とは何かというと、ある事柄が成り立っているなら、この事柄も成り立っているだろうというふうに推測することです。

推論というのは素晴らしいことで、ある事柄が成り立っているのは分かっているが、こっちの事柄が成り立っているかどうかは分からない、
しかしよく考えてみたら、この事柄が成り立っているならこっちも成り立っているはずである、

というふうに、分かっている事柄から分からない事柄まで分かるようにすることができるのです。


ただ、実は推論には色々ありまして、論理学では扱えない推論も存在するようです。

論理学においては、論理学で扱える推論のみを扱います。


さて、上記のあの事柄とかこの事柄とかの“事柄”を論理学では命題といいます。
たとえば、「リンゴは赤い」という事柄は一つの命題となります。

また、ある命題が成り立っているなら、この命題も成り立っているという推論の、前者を“前提”、後者を“結論”といいます。

前提は命題の集合(つまり前提の命題は複数あってもいい)、結論は基本的に一つの命題です。

また、命題が成り立っていることを論理学では命題が真であるといい、命題が成り立っていないことを命題が偽であるといいます。

真偽というとブール値は真偽です。
ブール値と論理学の関係については(私も詳しくないですが)後述します。

以上で論理学で基本となる用語は説明したかなと思います。


単に論理学というと、「リンゴは赤い」みたいに普通の日本語で命題を表していいんですが、
日本語などの自然言語ではイマイチ命題を表現するのに適していないということがあります。

自然言語では言語の制約が緩すぎるので、物事の表現方法が多種多様すぎて扱いづらいのです。

記号論理学では自然言語は用いずに、(私が学んだものでは)一階述語言語という言語を使います。

この言語は、言語の制約をガチガチに固めることによって命題を扱いやすくしました。

ただし、言語の制約を厳しくすることと、言語の表現力を低くすることは別物みたいで、一階述語言語でも日本語に劣らない表現力を持ちます。

ただし、一階述語言語は数値を表すことが苦手で、そこは残念といえるでしょう。

ちなみに、一階述語言語は一階述語論理という論理に基づいた言語です。

二階述語論理とかもあるみたいですね。




さて、一階述語言語では、具体的に命題(事実)をどうやって記述するのでしょうか。

あらかじめ言語仕様がガチガチに定められているので、それにそって日本語を翻訳していきます。

ただ、私が教えられる段階にありませんし、ここでは方法を書きません。

簡潔にいうと、日本語の「リンゴは赤い」は「∀x(Ax→Rx)」と翻訳できるのですが、

「∀x」は「全ての物について右の命題が真である」という意味で、xはforeach文の変数のように逐次全ての物が代入されるイメージです。

これ自体がまた一つの命題になっています。
命題と記号を組み合わせて命題を構成しているというのが基本です。

「→」は「左の命題(Ax、前件といいます)が真であるならば右の命題(Rx、後件といいます)も真である」という意味です。
これ全体も一つの命題です。

そして、「Ax」と「Rx」はどういう意味なのかというと、これらは一階述語言語として定められているわけではなく、状況に応じて意味を定義します。

「Ax」は「A」が記号の本体で、xは引数なのですが、今私はこれを「xがリンゴである」という意味で定義しました。

Rxは「xが赤い」という意味で定義しました。

つまり、「∀x(Ax→Rx)」は日本語に直訳すると「全ての物は、リンゴであるなら赤い」ということになります。

一階述語言語の文を日本語に翻訳することは容易ですが、日本語の文を一階述語言語に翻訳することは難しいみたいですね。


さて、先ほど「Ax」や「Rx」の意味を日本語で定義しましたが、これは望ましくありません。

せっかく命題を一階述語言語で表したのに、細かいところで日本語になっていては無意味です。

そこで、モデルという考え方を使います。

モデルというのは世界のようなもので、細かく言うと個体記号を個体へ、述語記号を個体の集合へ写す写像です。


私が放送大学で学んだかぎりではこのようになっていますが、関数記号というのもあるみたいですね。

よくわからないので触れませんが…。
こんな厳密な話は私も学んでいませんし、厳密な定義の話になるとかなり難解になるみたいですね。


簡単にいえば、Axの意味を定義するときに、「Aはリンゴである」というのではなく、「xがこの集合の要素ならAである」としてしまうのです。

外延的定義というそうです。

最初にリンゴである物の集合を決めておいて、xが集合に属しているならAxは真であるということです。

リンゴである物の集合というのは多すぎて、とても現実的には列挙できないのですが、論理的にはこう定義せざるを得ません。

また、明らかにリンゴでないと思われる物を集合に属させた場合も、属させたならそれはリンゴです。

モデルを定義するということは世界を創るようなもので、創った人がこれはリンゴだというならリンゴなのです。


モデルというのはややこしいですね。

ただ思いましたが、実際に推論していく場面ではモデルというのはあまり考えなくていいですね。

というのも、記号論理学では「あるモデルにおいて」ではなく「あらゆるモデルにおいて」正しい推論を主眼においているからです。

たとえば、「これはリンゴ」という前提から「これは赤い」という結論を導くことは出来ません。

赤くないリンゴが存在する世界(モデル)があるかもしれないからです。
というか、我々の世界にも青りんごがすでにありますね…。

ただし、「リンゴは赤い」という前提を追加すれば、リンゴが赤くてこれはリンゴであるような、あらゆる世界でこれは赤いと言っているのですから、正しい推論となります。




さて、一階述語言語で色々なものを表現してみましょう。
たとえば、「ヒトはオスかメスである」という命題です。

まず、「xがオスである」ことをMx、「xがメス」であることをFxとしてみます。

そして、ヒトという物をpとします。
pは一つの物となりますが、この場合はヒトが一つの物であるということです。

ヒトというのはヒトの集合であり、一つの物とは言いがたいですが、
この命題を翻訳する場合はヒトというレベルでまとめられますので、こうしました。

ただ、前提を追加するなどの将来性を考えたら、xがヒトであることをPxとでもして、xがヒトならxはオスかメスであるとしたほうがいいでしょう。

さて、こうして「ヒトはオスかメスである」という命題は一階述語言語では「Mp∨Fp」と翻訳できます。

「∨」というのは、左の命題(Mp)または右の命題(Fx)が真であるという意味です。

プログラミングでもOR演算子がありますが、ちょうどそれです。




プログラムでIF文などに使う論理式は、論理学に基づいているようです。
この一階述語言語にもそっくりですね。

論理式では基本的にAND、OR、NOTを使いますが、これらは一階述語言語にも存在します。

XORは上の演算子を使えばいいので、考えません。

実は一階述語言語の「→」も、ANDにあたるものとNOTにあたるもので代替可能で、「→」が存在しているのは冗長と言えます。

文が長ったらしくならないように省略記号として存在しているんじゃないですかね。


そのため、一階述語言語にもプログラムの論理式にもAND、OR、NOTがあって、同じものに見えます。

プログラムの論理式は命題論理という論理に基づいた言語で、一階述語論理は命題論理を拡張したものなのです。


具体的に何が命題論理になくて一階述語論理にあるのかというと、量化の存在です。

命題論理においては「全ての物は」ということはできませんが、一階述語論理ではそれができます。

命題論理ではある特定の物にたいしての命題しか表せないのです。

「リンゴは赤い」という命題が先ほどから登場していますが、リンゴという物を一つの物とするなら命題論理で表現できるのですが、

1つ1つのリンゴを最小単位として「全てのリンゴは赤い」というふうに表現する場合は命題論理では表現不可能です。


つまり「全てのリンゴは赤い」、「これはリンゴである」という前提から「これは赤い」というような結論を導けるのは、一階述語論理からです。
(このような推論を三段論法といいます。)

二階述語論理は一階述語論理の拡張ですから、できるだけ拡張したほうがいいんじゃないかとなりますが、
拡張しすぎるとパラドックスが生じるとかで、完全じゃなくなるとかなんとか…よくわからん。

よって、命題論理(プログラムの論理式)は一階述語論理のサブセットのようなものです。


まぁ、プログラムで物の集合と論理式を引数にとって、集合中の全てが与えられた論理式をTRUEにするならTRUEを返すような関数を作れば、
それを論理式中に埋め込んで「一階述語言語だ~」みたいなことができますね。

ただし集合を渡しているので命題論理の範疇は超えます。


一階述語言語の量化は、「全ての物について右の命題が真である」という意味の「∀」と、
あと「少なくとも一つの物について右の命題が真である」という意味の「∃」というものがあります。

“ほとんどの”とか“何割の”は無理です。
これは一階述語論理の弱点ですね。

「命題を真にする物がn個存在する」というようなカウントする命題は、頑張れば表現できます。
ただし表現方法はとても不便です。

実質的にはこれも不可能と思ったほうがいいでしょうね。




さてさて、これまで色々な命題を一階述語言語で表現することについて書いてきましたが、論理学で大事なのは推論することです。

ただし、論理学はなんらかの問題を解決に導くような推論を行ってくれるようなひみつ道具ではありません。

推論は原則として、人間が考えます。

では論理学で何ができるのかというと、推論の手助けをしてくれます。

自然言語の論理学についてはよくわかりませんが、一階述語論理においては、
人間が行った推論が正しいのか、間違っているのか、機械的に判定することができます。

色々な判定方法があるのですが、放送大学で私が学んだのはタブローの方法というものです。

これは非常に強力な判定方法で、推論が正しいのかどうか、比較的簡潔に、かつ機械的に判定できます。


自然言語で命題をゴチャゴチャと表していたら、機械的に判定することなんてできないでしょう。

命題を機械的な操作の枠組みに収めることができるというのが記号論理学の素晴らしさだということなんでしょう…たぶん。


タブローの方法…、Wikipediaに一応ページがあるのですが、未完成状態でほんの少ししか書かれていませんでした。

英語版のページを見たらビビるほど詳細に書いてあったんですけどね。

私が英語が読めないから悪いのか、日本人ウィキペディアン達のやる気が低いのが悪いのか…。


さて、こんな魅力的な方法を提示しておいてなんですが、ここではタブローの方法については説明をしません。

タブローという図をキャンバス上に描いて行っていくのですが、(必ずタブローは図であるというわけではないのかもしれませんが)

たとえば、「リンゴは赤い」、「これはリンゴである」という前提から「これは赤い」という結論を導く推論は正しいのかどうか判定してみます。

まず各命題を翻訳して、前提が「∀x(Ax→Rx)」と「At」、結論が「Rt」となりました。

タブローを描いて正しいのか判定してみます。

そのタブローがこちら
そのタブローがこちら


このようなタブローを描いたところ、上の推論は正しいということになりました。

タブローはツリー構造みたいになっていて、このタブローでは全ての終端にバツ印がついています。

これは、上の主張が成り立たないようなケースが一つもないから上の主張は正しいよね、というような意味になっています。


複雑な推論になると上図よりもタブローは大きくなるということなのですが、ご覧のとおり基本的には簡潔です。

論理が図になるというのはおかしな話ですが、ちゃんとした方法なのですから不思議ですね。




というわけで、私は記号論理学を学んできたわけですが、この学問は推論をするさいの銀の弾丸ではありません。

そもそも命題にできない事柄というのがありますし、推論を行うには数学の証明のように発想力が必要です。


また、量化(∀,∃)が存在する命題においては、推論の正しさをチェックできない場合もあるみたいです。

有限回ではチェックできないということみたいですが…。
私も入門編をやっただけですから、わからないことだらけです。

さらにいえば、放送大学での放送の第14回で上記の問題を取り扱ったのですが、第14回は内容が難しすぎて飛ばしまくりでした。

神様、申し訳ありません。
いつか学びますから…たぶん。


また、プログラムの論理式も論理学に基づいているということですし、コンピュータの発展に論理学は必要不可欠です。

論理学に関わってこなかった方々も、暇があれば勉強してみてはいかがでしょうか。

久しぶりの学問系の記事ということで、今回はだいぶ長くなりましたね~。

tag: 論理学 記号 論理式 放送大学

コメント

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/377-86a2fe19
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。