議論の構造
2022 年は日本語をもっとうまく使えるようになろうと思い、年末年始に『「正しく」考える方法』(晃洋書房)を読んでいた。図書館で何気なく手にとった本だが内容に見覚えがあり、よくよく調べてみると著者の一人である中村光世先生の講義を大学生のときに受けたことがあったらしい。この本もそのときに読んだのだろう。
さて、本を読んでいるときに、文の間の関係を掴んで話の内容を理解しているというよりも、文字の音だけをさらっているような感じがしたり、書いた文書を自分であとから読み返しているときに、うまくつながっていないような感じがすることがないだろうか。僕にはよくある。この文を繋げられない問題の原因はレトリックではなく、論理的に文をつなげるといういわばパズル的な能力が足りないところにある思うので、まずはルールを簡単にでも整理しようというのが本記事の狙いである。ルールさえ把握できれば、あとはプログラムのコードを書くように、自然に書けるようになるかもしれない。(レトリックも大事なので、それもいつか調べたいという気持ちはある)
議論とは
『「正しく」考える方法』(晃洋書房)では、前提、結論、議論、推理を次のように定義している。
これらの定義は普段使う語の意味とは若干ずれている気がするが、単純で分かりやすいと思う。
一つ例文を出してみよう。「スーパーAでは唐揚げ100gを200円で販売している。スーパーBでは唐揚げ100gを180円で販売している。スーパーBで買ったほうが安い。」という文章は、
前提1: スーパーAでは唐揚げ100gを200円で販売している。
前提2: スーパーBでは唐揚げ100gを180円で販売している。
結論: スーパーBで買ったほうが安い。
となる。
コードっぽく捉える
コードっぽく読み替えると、推論メソッドに前提を入れると結論が出てくるという関係なので、kotlin の文法で書くと下のようになると思う。
val conclusion = infer(setOf(support1, support2))
複雑な議論
複雑な議論では途中で出てきた議論の結論が、再び次の議論の前提になるような構造を取る。コードで書くとすると次のようになる。
val conclusion1 = infer(setOf(support1, support2))
val conclusion2 = infer(setOf(conclusion1, support3))
こうやってみると結構単純に見えてくる。しかし、これが何十行も続くと同じで読めなくなってくるのは想像できるので、そのときは段落や章として小さく分けていくことが必要になるのだろう。コードと同じだ。
まとめ
今回は上で示した本の導入部分だけ簡単にまとめた。「昨日は雪が降ったので、早めに仕事を上がった人が多い」のような曖昧性の高い文章(演繹的に処理できない文章)は取り扱っていない。この本ではもっと詳しく解説されているので興味がある方はぜひ読んでほしい。また、論理についてもう少しググってみると、前提は「規則」とそれ以外に分けることができたり、演繹的な推論以外にも、帰納的な推論やアブダクション(結論ではなく、前提を推測する方法)もあるので、そのあたりも別の機会に考えてみたい。