見出し画像

☆ 世界で考える写像

関数型プログラミング言語の知識を現実に当てはめると、世界の見え方が変わった話。

写像?何すか写像って?

写像※とは超ざっくり言うと関数のことだ。
以降分かりやすいように関数と呼ぶ。

世界は関数

世界を関数と見るのがこの話のキモだ。
この世の全ての事象は関数としてみることができる。
買い物をするのも関数だし、料理をするのも関数だ。

ここで、関数は関数の組み合わせで出来ていることを意識してみてほしい。

例えば、
料理を恋人に食べてもらう
という関数を考える。

ゴールは
恋人を家に呼んで、一緒に料理を食べる
ことだ。

そうすると必要なステップを以下のように細分化できる。
1. 材料を買う
2. 恋人を呼ぶ
3. 料理を作る
4. 食べる

この一つ一つのステップは関数であり、関数の組み合わせ(合成)でゴールを達成できているのが分かるだろう。

そして逆に、一つ一つの関数がどこかでうまくいってなかったら、恋人にご飯は振る舞えなかっただろう。
例えば、材料を何か買い忘れていたり、恋人の予定が合わなかったりしたら…である。

細分化して考える

世界は関数とみれるし、関数は関数の組み合わせで示される。
そう考えると少し世界の見え方は変わってくるのではないだろうか?

よければスキとフォローをお願いします!
不一

以下からパート2、少し数学の話に入る。
上述まで読んでいただいて感謝しかない。
詳しく知りたい方だけお進み下さい。

学び直し

関数の定義域、値域

まず、関数は定義域と値域を持つことを思い出してほしい。

例えば
f(x) = 2x
という関数Aがあったとする。
ここで、0 < x < 2 と定義域を定めると、
0 < f(x) < 4 が値域だ。

関数の合成

では次に
g(x) = x + 5
を関数Bとしよう。

関数AとBの合成を考える。
g(y) に y = f(x) を代入すると
g(y) = g(f(x)) = f(x) + 5 = 2x + 5
という関数Cになる。
この時の値域は 5 < g(y) < 9 だ。

ここまでが基礎知識。

あれ、関数Bの定義域は?

では、本題。
意図的に隠していたが、
先ほど関数Bの定義域は定めていない。

しかし、関数の合成を行う時は、本来定義域と値域を明確に意識しなければならない。

この合成を行うためには、
Bの定義域がAの値域よりも大きくなければならないのだ。

つまりBの定義域は
関数Aの値域: 0 < f(x) < 4
を包含する形で定義されなければならない。
例えば、
関数Bの定義域: -2 < x < 7
のような形だ。

現実に落とし込む

この前提を置くと、
先ほどの料理の話がまた違った見え方をする。

例えば、
料理を作る段階になって、
材料が足りず作れなかったとする。
これはまさに定義域と値域のずれによるものだ。

もし、潤沢に余分な材料を買ってきていたら、
つまり、関数Aの値域を関数Bの定義域が包含していたら、料理は無事に作ることができただろう。

まとめ

長くなったが、最後にまとめ。

世界を関数としてとらえる。
関数を分割する。
それらの定義域、値域を揃える。

こうすることによって、もっとスムーズに人生を運用できるのではないかと思った。

よければスキとフォローをお願いします!

不一

※ 写像とは集合のそれぞれの要素に対して、集合の要素を1つずつ定める規則のこと

いいなと思ったら応援しよう!