2019年2月20日水曜日

読書環境

開発環境

プログラマの数学第2版 (結城 浩 (著)、SBクリエイティブ)の第2章(論理 - trueとfalseの2分割)で「ん?」と思ったことと、Pythonでのベン図の書き方を少し。

「ん?」となったのは、論理の話で真理値表や論理演算の中にベン図が出てきた箇所。ベン図って集合の話なのに何故か論理の話に登場したから。もうちょっとだけ数学的にいえば、公理があって論理演算があって、そこから集合が定義されて、そして集合を理解やすくするためにベン図が登場って流れだと思っていたから混乱。

ということで、ちょっとだけ調べてみたら解決。ベン図に、

論理演算をベン図で表すことがある。ベン図は本来は集合についての関係を表すもので、論理演算に対してベン図を用いるのは本来の使い方ではないが、現実には、集合代数と論理演算がブール代数として等価であることから、論理演算を視覚的にわかりやすく表現する手法としてしばしばベン図が用いられる。
との記述あり。

おそらく著者の結城浩さんは理解しやすいように、この意味、意図で使ってたりするのかも。あくまでプログラマの数学だし。

あと、せっかくだから、Pythonでベン図を描いたり、集合演算をするプログラムのコードを書いてみた。

コード

Python 3

#!/usr/bin/env python3
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
from sympy import FiniteSet, pprint
import random
A = FiniteSet(*[random.randrange(10) for _ in range(5)])
B = FiniteSet(*[random.randrange(10) for _ in range(10)])

venn2(subsets=(A, B))
plt.savefig('sample1.png')

for t, s in zip(['A', 'B', 'A ∪ B', 'A ∩ B', 'A △ B'],
                [A, B, A | B, A & B, A ^ B]):
    print(t)
    pprint(s)
    print()

入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))

C:\Users\...> py -3 sample1.py
A
{1, 4, 6, 9}

B
{1, 2, 3, 6, 8}

A ∪ B
{1, 2, 3, 4, 6, 8, 9}

A ∩ B
{1, 6}

A △ B
{2, 3, 4, 8, 9}


C:\Users\...>

A △ B (A ^ B)は対称差。

0 コメント:

コメントを投稿