
潜在数学~無意識に使っている数学のこれを認めたら「怖く」なった話
数学といえば?
数式や計算がすっと浮かんでくるだろう。後は微分積分などの難しい数式。それ以外で浮かんでくるだろうか?
浮かぶ人は大学などで数学を学んでいる人だろう。誰かがおっしゃった。
「大学で学ぶ数学は哲学」大学向けの数学本を読むと、哲学に例えられるのも、よくわかる。だが、今だからわかるのであって、昔の僕はわからなかった……ゲームを作るまでは。
僕は現在ゲームを作っている。unityを起動し、プログラミングをいじる。いじっているとき、僕は普通にプログラムを組んでいた。
ふと、わざとらしい一言を挟んだ。
論理も数学……なのか?

数学で言う論理分野とは
ある条件を満たすなら「はい」満たさないなら「いいえ」といった分野。十分条件、必要条件という言葉を思い出さないだろうか。
あるいは否定・逆・対偶を思い出さないだろうか。
プログラミングだと0と1だ。単語だとTrue(真)/False(偽)だ。
「はい/True」が1で「いいえ/False」が0だ。
論理分野は数学の分野ではあるんだけど……僕の中では数学扱いしていなかった。国語の分野であり、数学の論理分野とは違うものと扱っていた。
論理的思考という言葉がある。数学よりも国語にぴったりの言葉であり、数学にふさわしいと思わなかった。
昔、数学の先生に「数学は論理的思考を養うってどういうことか?」尋ねたが、当時の僕が納得できる回答でなかった。
今の僕が過去の僕に「数学は論理的思考を養うんだよ、というのも……」言っても納得しないだろう。
ゲームや仕事と言った社会経験を積んで、初めて「数学は論理を養う」指摘できる。
プログラミングにおける論理の使い方
プログラミングにおいて、頭を悩ませる問題の一つが論理だ。今から簡単な例を出そう。
Q:今日の昼食は「かけうどん」ですか?
あなたはどっちだろう。かけうどんなら「はい」で、それ以外ならすべて「いいえ」になる。簡単だ。続いての問題は
Q:かけうどんにネギを入れますか?
簡単だろう。入れるなら「はい」で、入れないなら「いいえ」だ。
あなたがかけうどんを注文したとする。するとかけうどんなのに、なぜかカレールーが入っていた。あなたはどう思うだろうか?
かけうどんなのに、カレールーが入ってる理由
「カレールーを入れますか?」条件を付けていないからだ。
条件を差し込んでないため「カレールーを入れても入れなくてもいい=どっちでもいい」となる。
どっちでもいいのだから、カレールーを入れてもいいとなる。
カレールーを入れた側(プログラミング)は「なぜ相手が怒るのか」わからない。
論理の厄介な部分だ。一般的に思い浮かべる「かけうどん」が来るためには、こちらで条件を提示しなければならぬ。
うどん・醤油のつゆを入れる
カレールーは入れない
ねぎは入れても入れなくてもいい
プログラミングに直すと(変数は日本語)
その前にいくつか説明がある。ある変数 handan があるとして
※数学だとxやy、aやbのほうがわかりやすいか。
True→handan / False →!handan(頭に ! をつける)
かつ→&& または→||
プログラミング言語はC#を使っている。下記コードのままコピペしたら、エラーが出るので注意。分岐は間違っていない。
if(うどん&&醤油のつゆ&&!カレールー)かけうどんが来た
//コメント入力、別のやり方
if(うどん){if(醤油のつゆ){if(!カレールー)かけうどんが来た2}}
//ねぎは入れても入れなくてもいいので、書かなくていい。
複数の条件を一つに束ねた結果、求めるかけうどんがやってくる。
単純な「はい/いいえ」だと簡単だが、条件が複数まざると、一気に難しくなる。「これも条件に混ぜなければならないの?」が入ると、頭が固まる(笑)。
大学入試数学でも、難しい問題は条件分岐を先取りして複数考えねばならぬ時だ。難関大ほど一つの条件でなく、複数の条件で問題を出してくる。
例 $$y=ax^2+4x-9のグラフを描け$$
たいていはa>0としてさっさと二次関数を平方完成し、グラフを描くのだが……問題文にはaが何か? 一切指定がない。
なのでaが0より大きいだけとは限らない。0である場合、負である場合、さらに実数とも書いてないので、虚数の場合を想定して分岐しなければならない。
今はかけうどんの例を出した。noteを書いている人にとって、とても身近な論理(数学)をあげよう。
誰がこの記事を読んでいるの?
あなたのnote、読者層は主にどんな存在だろうか?
即答できる人は少ない。たいてい「誰でもいい」になる。簡単な条件ならわかる。たとえば今あなたが読んでいる記事は「数学に興味ある人」だ。数学に関する内容を書いているのだから。
複数の条件を思い浮かべたとき、難易度は一気に上がる。複数の条件とは絞り込みだ。絞れば絞るほど、訪問者が少なくなる一方、書き手が望む読者と出会いやすくなる。
ちなみにこの記事を投稿してから2日の時点で閲覧数34、いいねが7個ついてる。$$7/34=20.6%$$こと閲覧者の2割がいいねを押してる計算だ。僕のnoteにしては珍しすぎる数値だ(笑)
条件絞り込みの効果とみている。
条件の絞り込みにおいて、僕たちは数学の論理と計算を堂々と使っている。ただ数式や計算を表現していない(というか、できない)から、数学と気づいてないだけだ。
何よりピンとこないだろう。
数学が好きである
数学に興味がある
昔、数学を勉強していた
数学は社会に出て役に立たないと思っている
数学が社会に出て役に立っている
役に立っているが、どう役に立つか、うまく説明できない
特に最後の部分はつながった条件分岐だ。
数学が社会に出て役に立ってる「かつ」どう役に立っているか、うまく説明できない
言い換えると
数学が社会に出て役に立っているとわかっている「もとで」どう役に立っているか、うまく説明できない
あるいはこれもあるかもしれない。
数学が社会で役に立たないと思っている「かつ」役に立っている人が"どう役に立っているか"気になる
この状態にあるとき、僕の書いた記事に興味を抱き、何かしらの情報を得られるのでないかと期待し、ここを読む。
もちろん、この条件でも読まない人はいる。読まない理由として、別の条件分岐が重なったからだ。
たとえば「読む時間が足りない」だの「書いてる内容が難しそう」など。こちらが意図しない条件が加わると、この記事は読まれない。こちらがきちんと条件を入れたり外したりしなければならぬ。
ここらがわからない、思いつかないから確率になってしまう。
「うわ、面倒くさい」思っただろうか。
面倒と感じた場合、うんざりとした感情を今ここで抑えてほしい。僕たちの脳は面倒くさい条件分岐を軽々と処理している。そして今、あなたはここにいる。
無意識に数学を使っているが、数式や計算を使っていない。あらゆる条件に「はい/いいえ」と答えた結果だ。僕たちは認めなばならぬ。
はい/いいえも計算だ
今、あなたは論理を数学と認められるだろうか?
いや、ピンと来てるだろうか?
「そりゃ数学の一分野だし、認めるも何もないでしょ」思うかもしれない。一方で数式や計算・数字を使っていないのに、数学といわれても納得しにくいのでないか。
できる人は素晴らしい。きちんと数学と向き合っている。僕は今でもできない……できるんだけど、完全に同意してない。6割くらい同意してる状態だ。
ここなんだ。間に挟まっている真の問題は。
事実を指摘しても、きちんと受け入れない限り「なかった」ことになる。反対に嘘を述べても、脳がピンと来たら(=納得したら)「あった」ことになる。
代表例が陰謀論だ。陰謀論は一部の話において「実際に起きてる陰謀で、嘘ではない」から面白い。
一方で明らかな嘘も混ざっている。科学で否定されている事実でも、脳内でつながりができた場合、肯定された事実として真実へと変わる。
陰謀論を聞いているときも、僕らの脳内では高速処理が起きている。計算も数式も関数も生じて、いろいろ使いこなしている。
もちろん関数や数式が実際の立式として出てくるのではない。
ある知識について、どこまで知っているか。実体験を持っているか。話し手が信頼できる人が。量と質によって陰謀論を信じるか、まやかしかと判断できるわけだ。
陰謀論一つでも論理という名の数学を使っている。
裏を返すと数学の論理で、いくらでも話を組み立てられる。
話を組み立てるとは、問そして条件分岐を複数作って、すべて当てはまる人のみ変化を起こす作業だ。
今、あなたはここまで記事を読んでいる。あなたの中にどんな考えが浮かんでいるだろうか。
ありきたりな話でつまらないだろうか。
異次元の話でついていけないだろうか。
ついていけるし、ひらめきも生じただろうか。
ついていけないけど、何か自分の内側から言葉がでてきたか。
あなたの内側からひらめきや言葉が出た時点で、僕の組み立てた数学(論理こと問と条件分岐の積み重ね)が働き、あなたの中に新しい数式・関数・定理が生まれた瞬間だ。
論理はただ受け取るだけでは意味がない。というかつまらない。
あなたの生活に応用して初めて面白さが生まれる。
数学は意図しないところで、無意識なところで堂々と使いまくってる。「数学はこうでないといけない」が頭にあるため、論理を数学と認めず、僕たちは「数学なんぞ、何の役に立つか」思っている。
わかってる人は静かに数学を使いこなし、周りに応用こと工作を仕掛ける。ただし数学でも数式や関数による計算を使わない数学だ。
いや、使っているんだけど
$$f(x) = dy/dt y = 2x^2+4x-6$$
と言った数式や数学用語でなく
人生に不満を持つ人の特徴=常に自分の思い通りにならない。(夢がかなわないとき)
思い通りになっても、すぐ思い通りにならなかった部分が見つかる。(夢がかなう時)
不満を持つ人の欲を満たす陰謀論関数{
金持ちと貧乏を分ける。
金持ちの戦略を一部かつ簡潔に書く
比較しつつ「いかに損してるか」煽る
メルマガに登録してもらう}
母語として使っているわけだ。
母語として使っている論理・処理を数学と認めますかという話だ。
認めたら日常生活に応用できる。
認めないなら応用などできぬ。無意識なままに使って、意識していれば捉えられた条件を見逃すだけだ。
あるいは意識して使っている人々に使われる。
僕はここまで冷静に、時に興奮して記事を書いている。
あなたはどうだろう。「ふーん」で終わるだろうか。
終わってもいいし、終わらなくてもいい。あなたがどう受け取るかは、僕の知るところではない。
僕は論理も数学の分野と認めた結果、日常生活へ応用できると分かったし、応用したいと楽しみが増えた。
何より堂々と使っている、堂々と目の間にあるのに、素通りされてる、気づいていないものを表に引きずり出す行為が、とても楽しいとわかった。人生での仕事というべきか。
あなたはどうだろう。僕は楽しいので、何か企画を創りたくなった。
続きはこちら。
追記:画像元のゲームプログラミング
画像で貼り付けたプログラミングスクリプト、unityでアイテムを取得するプログラムを描いている。最もわからない部分が多いだろう。unityをやっているなら、参考になるかもしれぬ。
using System.Collections;
using System.Collections.Generic;
using UnityEngine.AddressableAssets;
using UnityEngine;
using UnityEngine.VFX;
using ItemSpace;//自作ネームスペース
using ConverSpaces;//自作ネームスペース
using TMPro;
using System.Text;
using Mangers;//自作ネームスペース
using UnityEngine.UI;
using SaveSpaces;//自作ネームスペース
public class IteManager : MonoBehaviour{
[SerializeField] private bool hardoff;//ハードの場合、このアイテムは表示しないorする
public int id ;//id:部屋間オートセーブに必要。0はセーブなし
[SerializeField] protected byte idso;//スクリプタブルから要素数を呼ぶ
[SerializeField] private SphereCollider box;
[SerializeField] private MeshRenderer meshr;
[SerializeField] protected AssetReferenceT<ItemData> iD;//ItemDataという名のAddressableネームを入れた
[SerializeField] private InstanceManager iM;//別の創作スクリプト
[SerializeField] private AutoSave save;
[SerializeField] private VisualEffect veffect;
protected byte itemtypeno ; //itemtypeno:0:アイテム、1:武器、2:読み物
private ItemData itemData; private GetsItems getsItemd; //テキスト表示のみ必要.GetsItemsはList
private string menutexts;
private const string Cpr = "Cpr" , Itemt = "Item";
private int cprv = Shader.PropertyToID(Cpr);
private Sprite sprites;
private WaitForSeconds wfs1 = new(1f);
internal bool geted;//autosaveで使用
private void Start() {
if(geted || hardoff)Process();//trueの場合、非表示
StartPlus();//継承先のプログラム
Addressables.LoadAssetAsync<ItemData>(iD).Completed += hundle =>{
itemData = hundle.Result;getsItemd = itemData.getsItems[idso]; menutexts = getsItemd.MenuName;sprites = getsItemd.Img; };
}
public virtual void StartPlus() { }//継承先の初期データ入力
private void OnBecameVisible() { veffect.SetBool(cprv, true); } //カメラが映るときはつけておく
//private void OnBecameInVisible() { veffect.SetBool(cprv, false); } //カメラが消えたら消しておく
public void ToolAssist() { StartCoroutine(ItemFunction()); }
private IEnumerator ItemFunction() {
iM.ConITS(menutexts , sprites);
iM.ItemIDM(idso);//IDを向こうへ提供
GetPieces();//取得アイテム個数、弾薬とその他で場合分け
if(id != 0) save.AutoID(id , Itemt , 0);//セーブ
yield return wfs1;
Process();
iM.ConITE();
}
public virtual void GetPieces() {}
private void Process(){box.enabled = meshr.enabled = veffect.enabled = false; geted = true;}
private void OnDestroy(){
Addressables.Release(itemData);
itemData = null;getsItemd = null;
Destroy(this);
}//メモリ解放
}
参考になれば。
いいなと思ったら応援しよう!
