
HTM講座第14回「集合の操作と構成:数学的関係&関数を作ってみる」
前回ZFCの公理の一部を使って、順序対などの基本的な操作を体験していただきました。
そこからさらに進めて、数学的な「関係」や「関数」をつくるという段階に入ります。
一般に、複数の物事が互いに関わり合っている状態を関係(relation)と呼びますが、
これを数学的にどのように定式化できるでしょうか。
◆数学における「関係(relation)」とは:
集合の要素間の相互作用や関連性を表すもので、特に2項関係(binary relation)が重要な概念です。
◆2項関係(binary relation):
Xを集合として、その任意の2つの要素a, b∈Xに対して、aからbへの対応が真偽の定まった命題であるとき、aとbの間の関係を「2項関係」と呼びます。
例:
人と誕生日のペア、学生と点数のペア、商品と価格のペア…
数学における「関係」は、要素間の相互作用を理解するための基本的な概念で、関係を通じて、数学的な構造や性質を探求することが可能になります。
◆デカルト積(cartesian product):
集合 A,B に対して、順序対の集合R⊆A×Bを作ることで、AとBの間に「関係」ができます。
※このとき、任意の2つの集合の順序対の集合を、「デカルト積」 といいます。
cartesian product: A×B={(a,b)∣a∈A,b∈B}
つまり、集合の操作だけで順序という性質を持ったペア(順序対)を作ることができ、
さらにそれを集めることで“ペアの集合”を作れる。
そしてそこに「関係」というものが生まれてくる、というわけです。
◆デカルト積のコード化
集合を操作して数学的な関係を生成する手順は、そのままプログラミングに応用できます。
Pythonで集合 A = {1, 2}, B = {'x', 'y'} のデカルト積を作るコードを組んでみましょう。
import itertools
A = {1, 2}
B = {'x', 'y'}
# デカルト積 A × B
cartesian_product = list(itertools.product(A, B))
print("A × B =", cartesian_product)
※実行結果は次のようになります:
A × B = [(1, 'x'), (1, 'y'), (2, 'x'), (2, 'y')]
練習のため簡単なサンプルで試してみましたが、これでデカルト積という数学的な「関係」を実装することができました。
次に、「関数」です。
◆関数(function)とは:
ある集合 A の各要素に、集合 B の要素を“ただ一つずつ”対応させる関係のこと。
つまり、 f⊆A×B という関係であって、
任意の a∈A に対して、ただ1つの b∈B が存在して (a,b)∈f
を満たすものが「関数」です。
別の表現をすると、関係の中でも「毎回ひとつだけ答えが返ってくるような特別な“機能”」を持つものを、特に「関数」と呼びます(A を入力すると B を出力してくれるような存在です)。
関数そのものが集合だから、関数の“集合”もまた定義できます。
この仕組みが、線形代数・解析・位相空間論など、さまざまな数学の分野につながっていきます。
◆関数のコード化
同様に関数の構造をPythonで実装してみましょう。
関数 f: A → B を、A の各要素に B の要素を1つずつ対応させる形で定義するコードを組みます。
# A = {1, 2}, B = {'x', 'y'}
# 関数 f: A → B を {(1, 'x'), (2, 'y')} とする
f = {
1: 'x',
2: 'y'
}
# 出力確認
for a in f:
print(f"f({a}) = {f[a]}")
※実行結果は次のようになります:
f(1) = x
f(2) = y
以上、今回は「集合の操作・構成」の応用というかたちで、数学的な「関係」と「関数」を作り出す、という体験をしていただきました。
次回は「数」そのものを作ってみましょう。
数って作れるものなの?最初からあるんじゃないの?と感じた方もいらっしゃるかもしれませんが、市販のルーでなく自分でルーから作ってカレーを調理するような感じです。
自分で数学を手作りする楽しさを味わってみてください。