日本語表現、非形式的記号表現、形式的記号表現 (G2 A3P2)

※この記事は「記事3 問題集2」

内容:

人間とシステム

演繹システム〈deduction system〉とは、人間の論理的行為/論理的能力をシミュレート〈模倣〉するソフトウェア・システムだと思えばよい。演繹システムは、人間がゼロから作り出す完全に人工的なシステムである。自然物や神様がくれるモノではない!

演繹システムは人工物なので、そこで使うデータの形式や処理のアルゴリズムは、ゼロから設計・定義・構成する必要がある。前もって自然にあるモノではないし、神様が決めてくれるモノでもない。

人間の行為/能力をシミュレートするので、

  • データは、人間の使っている言語に似ているほうがよい。
  • 動作は、人間が行っている行為に似ているほうがよい。

だが、

  • データは、人間の使っている言語(日本語や英語)と同じではない。
  • システムの内部動作が人間と同じかどうかを確認する方法がない(人間の脳や知的行為の内部メカニズムが分かってない)。入出力が似ていることは実験によりある程度確認できる。

次の混同・混乱はしばしば起こり、数理論理学を学ぶ上での大きな障害になっている。

  • 人間の使っている言語と、演繹システムが使うデータが区別できない。ゴッチャにしてしまう。
  • 人間の行為と、演繹システムの動作を区別できない。ゴッチャにしてしまう。

人間の言語/行為と、演繹システムのデータ/動作がシッカリ区別できるようになれば、数理論理学の議論は通常の数学としてスムーズに進行する。

[補足]
数理論理学は数理科学〈mathematical science〉であって、巷の「論理的な話し方・考え方 講座」などでやっている“論理”とはまったく違う。数理論理学で最初に行うことは、人間が使っている言語の一部と人間が行っている知的行為の一部を数学の土俵に乗せることである。この最初のセットアップが出来ないと、スタートが切れない。

最初のセットアップとはつまり、演繹システムの設定である。数理論理学の対象物が演繹システムなのだから、演繹システムがないとはじまらない。演繹システムは、人間の行為/能力をシミュレートする目的で設計・定義・構成されるが、一度作られてしまえば、それは現実世界とは別なシステムとなる。現実世界と混同してはならない。[/補足]

三種の表現の区別

日本語による表現は、作為的に記号を使わないようにする。例えば、「1 + 3」を「一足す三」のように。実際には、記号を使わないで日本語だけの表現を使うことはないのだが、対比を強調するためにわざとらしい日本語表現を使う。

演繹システムの入力/出力/処理に使われるデータとしての命題を論理式〈formula〉と呼ぶ。論理式を構成する中間段階で、次のような記号的表現も必要になる。

  1. 定数記号: 1, 3, 258, π など
  2. 変数記号: x, y, z, a, b, c など
  3. 演算子記号、関数記号〈関数名〉: +, ×, - など*1
  4. 関係記号: =, >, <, ≧, ≦ など

これらの記号は、既に日常的に使われているものをそのまま使う。例えば、我々が日常使っている式「x + 2×y」に対応する演繹システムのデータも「x + 2×y」とする(のが普通)。

ただし、見た目が同じでも目的が異なる(人間のコミュニケーション用と、システムの入力/出力/処理用)ので、演繹システムのデータは二重引用符で囲むことにする。

  • 人間のコミュニケーション用は、x + 2×y
  • システムの入力/出力/処理用は "x + 2×y"

話がややこしくなるのは論理記号である。論理記号は、基本的には演繹システムのデータとして使う。しかし、人間のコミュニケーションでも使いたい。

  • 目的1: 論理記号は、演繹システムのデータとして使う。
  • 目的2: 論理記号を、人間のコミュニケーションでも使いたい。

二つの目的に同じ論理記号を使うと、シッチャカメッチャカになるので、人間のコミュニケーション用の論理記号は丸括弧で囲むことにする。

日本語 人間のコミュニケーション用論理記号 システムのデータ用論理記号
かつ (∧)
または (∨)
ではない (¬)
ならば (⇒)
任意の (∀)
存在する (∃)

システムのデータ用ではなくて、人間のコミュニケーション用に使う論理記号をメタ論理記号〈meta logical symbol〉と呼ぶ。今導入したルールは:

  • メタ論理記号は、論理記号を丸括弧で囲む。

システムのデータ用ではなくて、人間のコミュニケーション用に使う論理式をメタ論理式〈meta formula〉と呼ぶ。メタ論理式は人間のコミュニケーション用なので、役割は日本語と同じであるし、日本語に置き換えることができる。

  • メタ論理式は、使ったほうがコミュニケーションが正確になるが、使わないで済ませることができる。

建前としては「メタ論理記号/メタ論理式はなくてもよい」のだが、本音としては「メタ論理記号/メタ論理式を一切使わないのは辛すぎる!」ので、使いますよ

「論理記号」/「論理式」に限らず、「人間が使う/人間が行っている」「通常の数学の」という意味で、形容詞「メタ」を付ける。「メタ」という言葉に、「人間を超えている」とか「通常以上の」という意味はまったくないので注意!

日本語表現、メタ記号表現、記号表現(練習問題あり)

ここから先、三種の表現を、「日本語表現」「メタ記号表現」「記号表現」と呼ぶ。

  • 日本語表現: 日本語による表現だが、作為的に記号の使用を避けている表現。
  • メタ記号表現: 人間どうしのコミュニケーション用の記号表現。メタレベルの表現/形式化されてない表現/非形式的な表現ともいう。既に日常的に使っているものもある。
  • 記号表現: 演繹システムの入力/出力/処理に使うデータとしての記号表現。見た目が同じでも、人間のコミュニケーション用とは別物。二重引用符で囲むことにする。

三種の表現の、幾つかの例を挙げる。コンテキスト(変数の変域指定)が省略されているが、すべての変数はN(自然数の集合)上を動くとする。日本語における変数は「甲乙丙丁戊己庚辛壬癸」(十干*2)を使う。

日本語表現 メタ記号表現 記号表現
3 "3"
一足す三 1 + 3 "1 + 3"
甲、乙、丙 x, y, z "x", "y", "z"
甲に三を足す(甲と三の和) x + 3 "x + 3"
甲に乙の百倍を足す x + 100×y "x + 100×y"
甲は零より大きい x > 0 "x > 0"
甲は零より大きい かつ 乙は一以上 x > 0 (∧) y ≧ 1 "x > 0 ∧ y ≧ 1"
甲は零より大きい ならば 乙は一以上 x > 0 (⇒) y ≧ 1 "x > 0 ⇒ y ≧ 1"
自然数である任意の甲に対して、「甲は零より大きい ならば 乙は一以上」 (∀)x∈N.(x > 0 (⇒) y ≧ 1) "∀x∈N.(x > 0 ⇒ y ≧ 1)"

コンテキストの書き方は次のように約束しよう(もちろん、ここだけのローカルルール)。

日本語表現 メタ記号表現 記号表現
甲は実数だとして、… For x∈R, … "x∈R | …"
甲は実数、乙は自然数だとして、… For x∈R, y∈N, … "x∈R, y∈N | …"
(甲, 乙) は実数と自然数の対だとして、… For (x, y)∈R×N, … "(x, y)∈R×N | …"

「2次方程式の判別式が非負なら、その2次方程式は解を持つ」は、さまざまな表現の仕方があるが、(作為的な)日本語表現で書けば:

  • 甲、乙、丙は実数だとして、甲は零ではない かつ 「乙の平方と「甲と丙の積の四倍」との差」が零以上 ならば 実数である丁が存在して、「「甲と「丁の平方」の積 と 乙と丁の積 と 丙」らの和」が零 となる。

この鬱陶しさ*3を見れば、日常的にも記号表現を使わざるを得ないことが分かるだろう。

  1. 練習問題: 上の日本語表現を、コンテキストを表す「For …」とメタ論理記号を使って、メタ記号表現に“直訳”せよ。
  2. 練習問題: 同様に、上の日本語表現を記号表現(演繹システムが使うデータ)に“直訳”せよ。

練習問題: 日本語表現 → メタ記号表現、記号表現

以下の日本語表現を、メタ記号表現(人間のコミュニケーション用だが記号を使用)と記号表現(演繹システムのデータ)に翻訳せよ。記号表現は二重引用符で囲むこと。なお、命題としての真偽は問題にしてない、表現の書き換えだけをする。

  1. 二百五十八
  2. 円周率の二倍
  3. 二百五十八と円周率の二倍との差
  4. 円周率の二倍は二百五十八に等しい。
  5. 円周率の二倍は六以上である。
  6. 甲、乙は自然数として、甲と乙の和
  7. 甲、乙は実数として、甲と円周率の二倍との差*4
  8. 甲、乙は自然数として、甲と乙の和は乙と甲の和に等しい。
  9. 甲、乙は実数として、甲と乙の和は乙と甲の積より大きい。
  10. 甲、乙、丙は実数として、「甲と丙の積」と乙との和は零に等しい。
  11. 甲、乙、丙は実数として、「甲と丙の積」と乙との和は零に等しくない。
  12. 甲、乙は実数として、甲の三倍と乙との和は零に等しくない。
  13. 甲、乙は実数として、甲は零以上 かつ 乙は零以上 ならば 甲と乙の和は一 である。
  14. 甲、乙は自然数として、甲と乙の積はニと等しい。
  15. 甲は自然数として、自然数である乙が存在して、甲と乙の積はニと等しい。*5
  16. 甲は自然数として、実数である乙が存在して、甲と乙の積はニと等しい。
  17. 甲は自然数として、実数である任意の乙に対して、甲と乙の積はニと等しい。
  18. 甲は実数として、「自然数である任意の乙に対して、甲と乙の積は零と等しい」ならば 甲は一に等しくない。
  19. 甲は実数として、「自然数である任意の乙に対して、甲と乙の積は零と等しい」ならば「実数である丙が存在して、甲と丙の積は一に等しい」。
  20. 実数である任意の甲に対して、実数である任意の乙に対して、「甲が零以上 かつ 乙が零以上」ならば 甲と乙の和は零以上である。

練習問題: 記号表現 → メタ記号表現

我々の記号・記法の約束では、記号表現 → メタ記号表現 の翻訳はきわめて簡単である。

  1. 二重引用符を外す。
  2. 論理式をメタ論理記号(丸括弧付き)に置き換える。

これは、メタレベル(人間どうしの日常・通常のコミュニケーション)と演繹システムのデータをできるだけ似せる設計方針だからである。しかし、演繹システムはゼロから設計・定義・構成していくので、「メタレベルに似せないといけない」という縛りはない。システムの設計者は、自分の目的と好みに応じて、自由に設計してよい。既存の演繹システムは、各設計者(論理学者)が恣意的に自由に(つまり、てんでんばらばらに)設計したものである。

次の設計方針を採用するとしよう。

  1. 定数記号と変数記号はメタレベル(人間どうしの日常・通常のコミュニケーション)と同じ。
  2. 足し算の演算子記号を"□"とする。
  3. 掛け算の演算子記号はなし、代わりに関数記号"mul"(multiplyから)を使う。
  4. 関係記号(等号、不等号)はメタレベル(人間どうしの日常・通常のコミュニケーション)と同じ。
  5. 論理記号は以下のようにする。
日本語 論理記号 備考
かつ ナカグロ記号
または 二重の縦棒
ではない 後置で使う
ならば よく使われる含意記号
任意の 通常の「かつ」を別用途に転用
存在する 通常の「または」を別用途に転用

この設計方針で作られた演繹システムの記号表現(演繹システムのデータ)を考える。メタ記号表現と記号表現との対応を幾つか挙げる。

メタ記号表現 記号表現 備考
3 "3" 同じ
1 + 3 "1 □ 3" 足し算は"□"
x, y, z "x", "y", "z" 同じ
x + 3 "x □ 3" 足し算は"□"
x + 100×y "x □ mul(100, y)" 掛け算は"mul"
x > 0 "x > 0" 同じ
x > 0 (∧) y ≧ 1 "x > 0 ・ y ≧ 1" 「かつ」はナカグロ
x > 0 (⇒) y ≧ 1 "x > 0 ⊃ y ≧ 1" 「ならば」は、論理界隈では標準的記号の"⊃"
(∀)x∈N.(x > 0 (⇒) y ≧ 1) "∧x.(x > 0 ⊃ y ≧ 1)" "∧"を転用
(¬) y ≧ 1 "y ≧ 1 ~" 否定記号は後置、日本語と同じ語順

コンテキストの表現は、縦棒で区切る方式を引き続き採用する。

練習問題: 次の記号表現(演繹システムのデータ)を、メタ記号表現(常識に近い、人間のコミュニケーション用の記号表現)に翻訳せよ。

  1. "1□2"
  2. "mul(mul(2, 3□5), 100)"
  3. "mul(1, mul(100, mul(2, 3)))"
  4. "x, y∈R | x □ mul(2, y)"
  5. "x∈R | mul(x, x) = 1 ⊃ (x = 1 ‖ x = -1)"
  6. "x, y∈N | ∨c∈N.(y = mul(x, c))"
  7. "a∈N | ∨x∈N.∨y∈N.(a = mul(x, y) ⊃ (x = 1 ‖ y = 1))"
  8. "∧x∈R.(x = 0 ~ ⊃ ∨y∈R.(mul(x, y) = 2))"
  9. "a, b∈R | (a > 0 ・ b > 0) ⊃ ∨n∈N.(mul(n, a) > b)"
  10. "∧a∈R.∧b∈R.(mul(a, b) = 0 ~ ⊃ (a = 0 ~)・(b = 0 ~))"

練習問題: 前節の練習問題の日本語表現(20個)を、この節で定義した記号表現に翻訳せよ。

*1:マイナス記号は、引き算の二項演算子記号と、符号反転の単項演算子記号の両方で使われている(多義的使用〈オーバーロード〉という)。多義的記号〈オーバーロードされた記号〉は、その扱いを事前にハッキリさせておく必要がある。

*2:十干の本来の意味は無視して、単なる変数記号として使う。実際に契約書などで、「甲」「乙」を単なる変数記号として使っている。

*3:鬱陶しいだけでなく、区切り目がよく分からない。事前の知識なしに区切り目が判読できるようにするには、もっと鉤括弧が必要だろう。

*4:コンテキストに出現した変数をすべて使う必要はない。例えば、"x, y, z∈R | x2 + 1" や "x, y, z∈R, a∈N | y≦z" は何の問題もない。

*5:自然数と実数の足し算や掛け算をどう定義するかは事前に決めておく必要がある。ここでは、自然数を実数とみなして演算して、結果は実数だとする。