ipython --pylab

ipython に --pylab コマンドラインオプションをつけて起動してみた。こうすると、次の例のように円周率の pi や linspace 関数や plot 関数や畳み込み関数の convolve など数学関連の関数がモジュール指定なしに動作しているようだ。数学の教科書を読むときに便利かもしれない。

C:\Users\******>ipython --pylab
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]

Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: TkAgg

In [1]: x = linspace(0,6*pi)

In [2]: y = sin(x)

In [3]: z = sin(2*x)

In [4]: a = exp(-0.25*x)

In [5]: plot(x,y)
Out[5]: [<matplotlib.lines.Line2D at 0x2498e0042b0>]

In [6]: plot(x,z)
Out[6]: [<matplotlib.lines.Line2D at 0x2498e071668>]

In [7]: plot(x,a)
Out[7]: [<matplotlib.lines.Line2D at 0x2498e06f780>]

In [8]: plot(x,convolve(a,y)[0:50])
Out[8]: [<matplotlib.lines.Line2D at 0x2498e07ffd0>]

In [9]: plot(x,convolve(a,z)[0:50])
Out[9]: [<matplotlib.lines.Line2D at 0x2498e085a20>]

In [10]: close()

インパルス応答関数が指数関数のCR回路に正弦波を入力すると、高周波のほうが振幅が小さくなることが分かる。

上の実行例でグラフが記述できるのだが、ipython の使い方のメモということで画像は添付していません。使い方が分かるようになるためには、こういう単純な例を繰り返し実行させて手になじませる必要があるようだ。


[PR]
# by tnomura9 | 2018-04-18 12:57 | Python | Comments(0)

Python によるデータ分析入門

『Pythonによるデータ分析入門』Wes Machinney 著を一通り通読した。この本は一体どういう本なのだろうか。それは、巻末の著者紹介を読めばわかる。以下に引用する。

著者紹介
Wes McKinney (ウェス・マッキニー)
ニューヨークを拠点に活動するデータハッカー兼起業家。MITで数学を専攻し、2007年に卒業した後は、コネチカット州グリニッジのAQR Capital Management でクオンツ運用に従事。使いにくいデータ分析ツールに辟易し、2008年に Python を覚えて、のちに pandas と呼ばれることになるプロジェクトを始める。現在 Python の科学コミュニティーのアクティブメンバーであり、データ分析、金融、統計計算アプリケーション部門での Python 推進者でもある。

つまり、この本は金融関係のデータマイニングに Python を使う人のための本だ。それ以外には、数値データを統計処理する研究者にも有用だろう。管理人は残念ながらそのどれにも該当しない。

この本は pandas を使いこなせるようになるための教科書だ。ただ、pandas というライブラリの使い方を学ぶだけでは使えるようにはならないようだ。pandas を使いこなせるようになるためには IPython、Numpy 、matplotlib などのライブラリの知識も必要だ。これらのライブラリが有機的に pandas と組み合わされることによって。数値データの統計的な分析を効率的に行うことができる。

この本では、Ipython、Numpy、pandas、matplotlib という4つの Python のモジュールが有機的に解説されていて、pandas を用いたデータ分析が実践的に行えるようなるように構成されている。

Python で金融データの処理や、統計計算をしてみたいと思う人にはお勧めの一冊ではないだろうか。また、AI を使ってみたいと思って Python を学ぶ人にも必読の書だろう。

しかし、単に Python を使ってみるという目的のためにもこの本は示唆的だ。まず、IPython は、Python を対話的に使うだけでなく、シェルとしても使うことができるのが分かる。IPython 上でデータを扱うためのファイル操作を含めてすべてを行えるのだ。Numby は ndarray という多次元の数値データ型を提供し、複数の数値データを全くループを書くことなく自由に加工することが可能になっている。また、matplotlib を使うことによってこれらのデータを簡単に図表化することによって数値データの可視化を行える。pandas は Excel に似た表計算のデータを Python で簡単に処理するためのモジュールだ。pandas の最大の利点は欠落データのある数値データを簡単に取り扱えることだろう。実世界のデータを扱うときに欠落データの処理は必発だ。

対話的な環境で、複雑なデータをオブジェクトにくるんで、ループなどの制御構造なしにリアルタイムに処理するというスキーマは Python 以外のプログラム言語を使う際にも共通する重要な戦略になるような気がする。

[PR]
# by tnomura9 | 2018-04-11 22:11 | Python | Comments(0)

Python と JSON

Python では json モジュールをインポートすると、簡単に JSON のデータを Python のオブジェクトに変換できる。これをテストするのに自分で JSON データを作るのは面倒だし、面白くないのでオープンデータを利用してみた。次のサイトでは無料で API を使って鉄道路線に関する JSON データを利用することができる。


HeatRails Express のホームページの API タグをクリックすると路線データを取得するための API の説明が記載してある。今回は単に JSON データが欲しいだけなので、「駅情報取得 API」のサンプルレスポンスの「新宿」に合致する駅の情報の一覧のクエリのリンクを右クリックして JSON ファイル json.json をダウンロードした。ファイル名は sinjuku.json に変更した。

Windows のスタートメニューから [Anaconda3 (64-bit)] - [Anaconda Prompt] を選択。ダウンロードした sinjuku.json のあるディレクトリに移動し、ipython を起動した。

まずファイルのデータを文字列 sinjuku_file に取り込む。
In [1]: sinjuku_file = オープン('sinjuku.json','rt',encoding='utf-8').リード()

*オープンとリードは実際には英小文字で入力

json モジュールをインポートし、
In [2]: import json

文字列をオブジェクトの sinjuku に変換する。
In [3]: sinjuku = json.loads(sinjuku_file)

sinjuku オブジェクトの内容は次のようになる。
In [4]: sinjuku
Out[4]:
{'response': {'station': [{'line': 'JR中央線',
'name': '新宿',
'next': '大久保',
'postal': '1600022',
'prefecture': '東京都',
'prev': '代々木',
'x': 139.700464,
'y': 35.689729},
{'line': 'JR埼京線',
'name': '新宿',
'next': '池袋',
'postal': '1600022',
'prefecture': '東京都',
'prev': '渋谷',
'x': 139.700464,
'y': 35.689729},
.....

response と station のキーは不要なので取り除くと検索結果のオブジェクトのリストが得られる。
In [5]: sinjuku = sinjuku['response']['station']

このリストから内包表記で路線と前後の駅のタプルのリストを作る。
In [6]: [(stn['line'],stn['prev'],stn['next']) for stn in sinjuku]
Out[6]:
[('JR中央線', '代々木', '大久保'),
('JR埼京線', '渋谷', '池袋'),
('JR山手線', '代々木', '新大久保'),
('JR湘南新宿ライン', '池袋', '渋谷'),
('JR総武線', '大久保', '代々木'),
('京王線', None, '笹塚'),
('小田急小田原線', None, '南新宿'),
('東京メトロ丸ノ内線', '新宿三丁目', '西新宿'),
('都営大江戸線', '代々木', '都庁前'),
('都営新宿線', None, '新宿三丁目')]

JSON データをオブジェクトに変換するのも、オブジェクトの処理も簡単だった。

[PR]
# by tnomura9 | 2018-03-27 07:53 | Python | Comments(0)

jupyter notebook

Anaconda をインストールしたら、Python の対話環境である jupyter notebook を使うことができる。これはブラウザで Python のコードを入力し、実行、保存ができるようになっている。

起動はスタートメニューから [Anaconda3 (64-bit)] - [Jupyter Notebook] を選択する。ウェブベースのアプリケーションなのでウェブサーバーが立ち上がるまでしばらく待たされるが、やがて、ウェブのページが自動的に表示される。

これはエクスプローラと操作が似ている。フォルダーの名称をクリックするとそのフォルダーが開く。新しいフォルダーはツールバーの [New] ドロップダウンリストから Folder を選ぶ。フォルダーの名称は最初 Untitled になっているが、フォルダーのチェックボックスをクリックすると、ツールバーに Rename ボタンが現れるのでそれをクリックするとフォルダーの名称変更ができる。フォルダーの削除はゴミ箱アイコンをクリックする。

Python のコードを保存したいフォルダーを開いたら、ツールボックスの [New] ドロップダウンリストをクリックし Python 3 を選択すると、新しいノートブックが表示される。ノートブックのメニューバーの Help リストの User Interface Tour を選択すると notebook の各種のコントロールの簡単な説明を見ることができる。

Notebook のコード表示エリアには最初テキストボックスが一つしか表示されていないが、そこをクリックすると Python のコードを入力することができる。まず、

print('hello, world')

と入力してリターンキーを押すと、カーソルが次の行に移動するだけでコードは実行されない。これは入力が複数行のものも作成するためである。

テキストエリアのコードを実行するにはツールバーの [Run] ボタンをクリックするか、Ctrl-Enter と入力する。コードの実行結果はテキストボックスの下に表示される。入力したコードとその実行結果はひとかたまりで「セル」と呼ばれる。Shift-Enter のショートカットでもコードを実行できるが、コードが実行された後そのセルの下に新しいセルが作成される。

このように一つの notebook には複数のセルを作成できるので、複数のスニペットを一つの notebook で管理することができる。これらのセルはファイルとして保存できる。ツールバーのフロッピーディスクアイコンをクリックするといい。ノートブックの名称変更は Jupyter タイトルの横に表示されているノートブック名をクリックすると変更できる。

ノートブックを終了するときは File メニューの Close and Halt を選択すると、自動的にノートブックのタブも消滅する。フォルダーの表示に戻ると、そこにノートブックのファイルが、.ipynb の拡張子で表示されている。ファイル名をクリックするとノートブックを再び表示させることができる。

セルには Python のコードだけではなく、マークダウンによる文書を記述することができる。セルのタイプをマークダウンに変更するには Cell メニューから [Cell Type] - [Markdown] を選択する。マークダウンで入力した後コード実行と同じように Ctrl-Enter をおすとレンダリングして表示される。再編集はセルを選択し Enter キーをおす。

Jupyter notebook を触ってみた感想は、スニペットの管理には使いやすいかなという感じだ。

ちなみに木星は Jupiter で Jupyter ではない。Google 検索で使い方を検索するときに木星の情報が出てこないので便利だ。

ノートブックの本体はファイルのチェックボックスをチェックした後、ツールバーの [Edit] ボタンをクリックすると見ることができる。驚いたことにこれは普通の JSON のテキストファイルだ。Python の対話型環境の使いやすさはもちろんだが、Web アプリケーションのお手本になるかもしれない。

参考サイト




[PR]
# by tnomura9 | 2018-03-25 00:11 | Python | Comments(0)

Anaconda をインストールした。

『入門 Python 3』を一通り読み終わったので、いよいよ機械学習の勉強を始めようと思って『ゼロから作る Deep Learning』を読み始めたらいきなり NumPy や matplotlib などの外部モジュールが必要だった。Windows の Python では pip もついていないようなので、Windows では機械学習の勉強は無理かとがっかりしていたら、Window 用の Anaconda をインストールすればいいのが分かった。


インストール後に、『ゼロから作る Deep Learning』の次の例を実行してみたら、サインカーブが描画された。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.show()

Anaconda には必要なものが全部揃っているようだ。まさに、"batteries are included" だった。

追記

ユーザのディレクトリ名が日本語だとインストールできなかった。ascii 文字列のローカルアカウントを新しく作ったらそちらにはインストールできた。


[PR]
# by tnomura9 | 2018-03-19 08:04 | Python | Comments(0)

命題論理と全称命題

領域 D のすべての要素 a について、原子的な述語 P(x) による命題 P(a) が必ず真偽の真理値のどちらかを持つとき、すなわち、排中律が成立するとき、領域 D の任意の原子的な命題 P(a) は命題論理に従う。また、原子的な命題 P(a), Q(b), ... 等を論理記号で結合した複合命題も命題論理に従う。なぜなら、命題論理においてこれらの複合命題に含まれる原子命題の個数は有限個だからだ。有限個の原子命題からなる複合命題は再帰的に必ず真偽の真理値のどちらかを持つことが言えるからだ。

しかし、領域 D の要素数が無限の場合、述語論理の全称命題

∀x P(x)

の真理値を命題論理のような方法で決定することはできない。

∀x P(x) = P(a) ∧ P(b) ∧ ...

と全称命題を原子命題の論理積として展開しようとしてもすべての命題を展開することはできないからだ。展開の過程でどれか一つの命題 P(n) でも偽であれば ∀x P(x) は偽となってしまうからだ。

このようなときには、数学では伝統的に「全て」を「任意の」という言い方に置き換える。領域 D のどの要素 a をとっても P(a) が真なら、領域 D の全ての要素についても P(a) が真であると考えてもいいではないかという議論だ。

「全て」と「任意の」という二つの操作は同じものではない。「全て」の場合は要素全てを列挙することができるのに対し、「任意の」というサンプリングの操作では、すべての要素を列挙しているわけではないからだ。

しかし、「全て」と「任意の」が同等なものと考えたとき、命題

∀x P(x)

は任意の a に対し P(a) であると解釈することができる。これならば最初の例のようにすべての P(a) を列挙する必要はないので、これに真理値を割り当てることができる。すなわち、任意の a に対し常に P(a) が真ならば命題 ∀x P(x) は真である。なぜなら P(a) が偽となるような要素 a を見つけ出すことができないからだ。

∀x を「任意のx」と読み替えるやり方は、x を全て列挙しているわけではないので、これを「全て」と同じと考えるのは不適当だ。しかし、それを容認することで、

∀x (P(x)->Q(x))

のような複合的な述語を持った命題も解析できる。すなわち、どのような要素 a についても P(a)->Q(a) が真なのだから。P(a) が真であって Q(a) が偽であることはないということが、命題論理の法則で示される。したがって、P(x), Q(x) の真理集合を P, Q とすると、a ∈ P ならば a ∈ Q 、すなわち、P ⊂ Q であることが推論できる。

このように「全て」を「任意の」に言い換えることは全く正当なように見える。しかし、ラッセルのパラドックスがこのような無邪気な考え方が成立しない場合があることを示している。

すなわち、どのような「自分自身を要素として含まない集合の集合」を集めてきたとしても、その集合は自分自身を要素としては含まない。すなわち、任意の「自分自身を要素として含まない集合の集合」は自分自身を要素としては含まない。それにも関わらず、全ての「自分自身を要素として含まない集合の集合」は矛盾となるからだ。

すなわち、「全て」を「任意の」に置き換えるやり方は多くの場合妥当だが、しかし、妥当だと考えることはできない場合があることを示している。
[PR]
# by tnomura9 | 2018-03-15 07:47 | ラッセルのパラドックス | Comments(0)

単純な述語の全称命題と存在命題

領域 D の全要素に対し述語 P(x) が定義されているとき、要素 a と述語のペア P(a) は命題である。また、P(a) は真または偽のどちらかの真理値をとる。P(x) の真理値が真となるような要素 x の集合 {x | P(x)} は述語 P(x) の真理集合である。真理集合は左のような内包的定義で必ず定義できる。また、真理集合 P は領域 D のべき集合の要素である。

この要素的な述語を論理記号で連結した複合的な述語もまた、領域 D の述語である。たとえば、P(x) -> Q(x) という述語は変数 x に領域 D の要素を a を当てはめたとき、P(a) -> Q(a) は必ず真または偽の値をとる。この複合的な述語も当然真理値をもつので、真理集合が存在し、それは、(D - P) ⋁ Q である。この真理集合もやはり領域 D のべき集合の要素である。

領域 D については、このような複合的な述語の他に、原子命題を論理記号で結合した複合命題がある。複合的な述語では主語の x は P(x) と Q(x) は一致していたが、主語が一致していない命題 P(a) と Q(b) についても P(a) -> Q(b) のような複合命題は考えることができる。このような命題については真理集合は考えられない。

領域 D における命題はこのように、要素的な述語と領域 D の要素による命題。複合的な述語と要素による命題、要素的な命題の複合命題、あるいはそれらの組み合わせが存在するが、それらの命題すべてに命題論理の定理は適用することができる。命題論理の定理はあくまでも真理値を持つ命題の関係を述べたものであり、けっきょくのところ述語と領域の要素のペアである命題 P(a) について述べているからだ。実のところ、命題論理の立場からは述語の真理集合が何かということについては無視できる。

一方、述語論理では述語の性質そのものが議論の対象となる。要素的な述語の全称命題、

∀x.P(x)

は領域 D の全ての要素 x について P(x) が真であれば真の真理値をもち、そうでなければ偽の真理値をもつ。この命題は真理値を持つが、それは P(x) と要素 a とのペア P(a) で決まるわけではない。つまり、この命題を構成する述語 Q(x) は存在しない。この命題が規定しているのは述語 P(x) の真理集合 P が領域と等しい、すなわち、P = D であるということである。この命題が偽である場合それは P /= D すなわち集合 (D - P) が空集合ではないということを意味している。

要素的な述語の存在命題、

∃x.P(x)

は、P(a) が真となるような要素 a が少なくとも一つは存在することを規定する。この命題が真であるとき、述語 P(x) の真理集合は存在するすなわち、真理集合 P が存在する。この命題が偽であるときは述語 P(x) の真理集合は存在しない。すなわち、P は空集合である。このとき、(D - P) = D であるから、P の補集合は D と等しくなる。すなわち ∀x.¬P(x) と ¬∃x.P(x) は同値だ。

このように量化子を用いた全称命題や存在命題は、述語 P(x) の真理集合を定めるのではなく、述語の真理集合の性質を規定するものだ。たとえば、

∀x.(P(x)->Q(x))

という命題が真であれば、

(D - P) ⋁ Q = D

であるから、

P ∧ (D - Q)= φ

したがって、

a ∈ P ならば a ∈ Q すなわち P ⊂ Q (または、a /∈ Q ならば a /∈ P)

である。このように全称命題は述語の真理値を定めるものではなく、述語の真理集合の関係性を定めるものだ。さらに、存在命題について考えてみる。

∃x.(P(X)->Q(x))

これは、ある a に対し ¬P(a) ⋁ Q(a) が真であることを意味しているから、P(x), Q(x) の真理集合で言えば (D - P) = Q = φ すなわち、

P = D かつ Q = φ

の時以外は命題が真になることをしめしている。すなわち、P(x) の真理集合が領域 D と一致し、かつ、Q(x) の真理集合が空集合の場合以外は上の命題は妥当な命題だ。

全称命題や存在命題は真理集合そのものではなく、真理集合間の性質を規定する述語論理の方程式のようなものだ。述語と領域 D の要素のペアからなる命題や、その真理集合にくらべ全称命題や存在命題のイメージがつかみにくいのは、それらが、真理集合そのものではなく、真理集合間の関係性を規定するものだからだ。




[PR]
# by tnomura9 | 2018-03-11 17:25 | ラッセルのパラドックス | Comments(0)

領域と存在命題

領域 D における論理の構成要素は明確だ。命題論理の場合も述語論理の場合も変わりない。それは、述語 P(x) と領域 D の要素とのペア P(a) が命題であるということだ。

命題論理の場合は、命題 P(a) が真か偽の真理値のどちらかを持つという条件があれば、命題論理の定理を適用することができる。命題論理の場合は量化子が導入されているので、命題が真か偽の真理値のどれかを取るという条件だけでは、命題論理を領域 D に適用できない。述語論理では述語 P(x) の真理集合 P = {x| P(x)} を考えることで、領域 D の要素 a が述語 P(x) を充足することを

a ∈ P

で表すことができる。

論理と集合で循環しているようだが、命題論理と述語論理の関係を考えるのには集合で考えるのが便利だ。存在命題

∃x.P(x)

を集合で表すと、

a ∈ P となるような a が存在する。(P(x) の真理集合 P は存在する。)

という表現になる。注意が必要なのは、真理集合 P が存在することはわかるが、真理集合 P がどのような集合なのかはこの命題ではわからないということだ。a がたった一つしか含まれないのか、それともかなりの量の要素を P が含んでいるのか、存在命題だけからは知ることはできない。

それでは、次の場合はどうだろうか。

∃x.P(x)->Q(x)

真理集合でこの命題を論じる場合は P(x)->Q(x) と同値の ¬P(x)⋁Q(x) を利用したほうがいい。この命題の真理集合は便宜的に P の補集合を ¬P と書くことにすると、¬P∪Q である。したがって上の存在命題は、

a ∈ ¬P∪Q となる領域 D の要素 a が存在する

という意味を表している。これは ¬P∪Q という集合が存在するということである。すなわち真理集合 ¬P と Q の和集合が存在することを示している。しかし、¬ P と Q の和集合はどのような場合にも存在する。ただし、P = D, Q = φのときは、¬P∪Q はどのような要素も含まない。したがって、

∃x.P(x)->Q(x)

は P = D, Q = φ でない限りは、自明な命題だ。このように、量化子を含んだ命題は、真理集合と真理集合の関係性を述べている。P(x) という述語は真理集合 P を定めるが、Ex.P(x)->Q(x) は特定の真理集合ではなく、真理集合と真理集合の関係を定めているのだ。

このように、命題論理は確定した真理集合を扱うのに対し、述語論理の量化子を含む命題は、真理集合と真理集合の関係性を記述している。命題論理の命題にくらべ、量化子を含む命題の取り扱いが難しく感じるのは両者の命題の性質が異なっているからだ。



[PR]
# by tnomura9 | 2018-03-06 07:29 | ラッセルのパラドックス | Comments(0)

領域と述語論理

領域 D の一階述語論理の場合も述語 P(x) と対象 a のペア P(a) を命題と考えるのは、命題論理の場合と同じだ。また、P(a) が真となるような要素の集合は領域 D の部分集合であり、これを真理集合 P で表すことができる。このとき、述語 P(a) が真であることと a ∈ P であることは同値と考えることができる。すなわち述語論理の命題を集合の演算に置き換えることができる。

しかし、述語論理の場合は量化子のついた命題を扱う。すなわち、∀x.P(x) や∃x.Q(x) のようなものも命題と考える。このような命題はどうすれば集合の表現に置き換えることができるだろうか。

たとえば、∀x.P(x) はどのように解釈したらよいのだろうか。領域 D の全ての要素 x について P(x) が真となるということだから、これは 述語 P(x) の真理集合が領域 D と一致していることを意味する。すなわち、

P = D

である。それでは ∀x.P(x)->Q(x) はどうだろう。いま述語 R(x) を考え、

R(x) = P(x)->Q(x)

とする。この時 R(x) の真理集合はどのようなものだろうか。R(a) = P(a)->Q(a) が真となるのは命題論理の性質から P(a) が偽かまたは Q(a) が真の時である。すなわち R(a) = P(a) -> Q(a) が真になるのは a /∈ P または、a ∈ Q の時だ。

これは述語 R(x) = P(x)->Q(x) の真理集合が Pの補集合と Q の和集合であることを意味している。Pの補集合を便宜的に¬P で表すことにすると、P(x)->Q(x) の真理集合は ¬P ∩ Q である。

したがって、

∀x.P(x)->Q(x) は

¬P ∪ Q = D

このことから

P ∩ ¬Q = φ

つまり、

a ∈ P かつ a ∈ ¬Q を満たす a は存在しない。

a ∈ P ならば必ず a ∈ Q

すなわち

P ⊂ Q

であることが分かる。

これは、∀x.P(x)->Q(x) が真ならば、P ⊂ Q が真であるので、a ∈ P ならばかならず a ∈ Q であることが推論できる。

このことは、すべての人間は死すべきものである。ソクラテスは人間である。ゆえにソクラテスは死すべきものであるという推論の正当性を示している。

このように領域 D という集合を定めるとき、領域 D における対象と述語に関して一階述語論理は真理集合の関係として表現できる。この時、命題と命題の関係である命題論理の法則が、一階述語論理の推論に活用される。また、それによって、量化子を含む命題から真理集合の間の関係が導き出される。このことによって、命題論理では表現できない主語と述語の論理的な関係を、集合の性質として記述できることが分かる。

公理系の観点からはイメージしずらかった命題論理と一階述語論理の関係は、一階述語論理の適用範囲を領域 D に制限することによってわかりやすいものとなる。

論理を領域 D に制限することは論理の一般性を制限することになるかもしれないが、そのことによって、かえって、論理の本質とは何かという問いに答えやすくなるのではないだろうか。すなわち、論理の本質とは集合なのである。
[PR]
# by tnomura9 | 2018-03-02 21:47 | ラッセルのパラドックス | Comments(0)

領域と命題論理

領域 D が集合であれば、領域 D における命題は述語と命題のペア P(a) になる。また命題 P(a) の真理値は述語 P(x) と領域 D の要素のペアで一意的に決まる。

命題 P(a) と命題 Q(b) の複合命題の真理値については、P(a) の真理値と Q(b) の真理値の組み合わせで決まる。例えば含意については次の真理表で決定される。

P(a) Q(b) P(a)->Q(b)

T .. T .. ...T...
T .. F .. ...F...
F .. T .. ...T...
F .. F .. ...T...

領域 D においては P(a) や Q(b) は真か偽のどちらかの値を必ず取るから P(a)->Q(b) の真理値の場合も、それによって真か偽のどちらかの値をとる。たとえば P(a) = T, Q(b) = F のとき P(a)->Q(b) = F である。このように領域 D における命題については全て真理値はすべて決定している。

しかし、命題論理学の定理では論理式の命題は全て命題変数である。すなわち、命題変数 A は真の値も偽の値もとり得る。領域 D の命題と命題論理学の関係はどのようなものだろうか。

命題論理学の命題は真または偽の値をとり得る変数だ。つまり、領域 D の構造にかかわらず、命題論理学の定理は成り立つ。命題論理学の定理に領域 D の構造が関与するとすればそれは、述語 P(x) と要素 a からなる命題 P(a) が必ず真か偽の値をとるということである。

言い換えると、領域 D に命題論理が適用できる条件は、領域 D の命題 P(a) が必ず真または偽の値をとるということである。P(a) の真理値がパラドックスによる不定値となる場合は、領域 D に命題論理を適用することはできない。

また、領域 D の命題 P(a) と Q(a) に依存関係、たとえば P(a) が真なら Q(a) も真という関連性があったとしてもそれは命題論理の定理には影響しない。それらの真理値を単に定理の変数に代入するだけだからだ。

このように領域 D の命題に命題論理が適用される必要十分条件は、それらの命題が必ず真または偽の値のどちらかをとるということだ。


[PR]
# by tnomura9 | 2018-03-01 12:54 | ラッセルのパラドックス | Comments(0)