見出し画像

潜在数学~無意識に使っている数学のこれを認めたら「怖く」なった話

数学といえば?

数式や計算がすっと浮かんでくるだろう。後は微分積分などの難しい数式。それ以外で浮かんでくるだろうか?

浮かぶ人は大学などで数学を学んでいる人だろう。誰かがおっしゃった。

大学で学ぶ数学は哲学」大学向けの数学本を読むと、哲学に例えられるのも、よくわかる。だが、今だからわかるのであって、昔の僕はわからなかった……ゲームを作るまでは。

僕は現在ゲームを作っている。unityを起動し、プログラミングをいじる。いじっているとき、僕は普通にプログラムを組んでいた。

ふと、わざとらしい一言を挟んだ。

論理も数学……なのか?

数学で言う論理分野とは

ある条件を満たすなら「はい」満たさないなら「いいえ」といった分野。十分条件、必要条件という言葉を思い出さないだろうか。
あるいは否定・逆・対偶を思い出さないだろうか。

プログラミングだと0と1だ。単語だとTrue(真)/False(偽)だ。
「はい/True」が1で「いいえ/False」が0だ。

論理分野は数学の分野ではあるんだけど……僕の中では数学扱いしていなかった。国語の分野であり、数学の論理分野とは違うものと扱っていた。

論理的思考という言葉がある。数学よりも国語にぴったりの言葉であり、数学にふさわしいと思わなかった

昔、数学の先生に「数学は論理的思考を養うってどういうことか?」尋ねたが、当時の僕が納得できる回答でなかった。

今の僕が過去の僕に「数学は論理的思考を養うんだよ、というのも……」言っても納得しないだろう。

ゲームや仕事と言った社会経験を積んで、初めて「数学は論理を養う」指摘できる。

プログラミングにおける論理の使い方

プログラミングにおいて、頭を悩ませる問題の一つが論理だ。今から簡単な例を出そう。

Q:今日の昼食は「かけうどん」ですか?

あなたはどっちだろう。かけうどんなら「はい」で、それ以外ならすべて「いいえ」になる。簡単だ。続いての問題は

Q:かけうどんにネギを入れますか?

簡単だろう。入れるなら「はい」で、入れないなら「いいえ」だ。

あなたがかけうどんを注文したとする。するとかけうどんなのに、なぜかカレールーが入っていた。あなたはどう思うだろうか?

かけうどんなのに、カレールーが入ってる理由

「カレールーを入れますか?」条件を付けていないからだ。
条件を差し込んでないため「カレールーを入れても入れなくてもいい=どっちでもいい」となる。

どっちでもいいのだから、カレールーを入れてもいいとなる。
カレールーを入れた側(プログラミング)は「なぜ相手が怒るのか」わからない。

論理の厄介な部分だ。一般的に思い浮かべる「かけうどん」が来るためには、こちらで条件を提示しなければならぬ。

  1. うどん・醤油のつゆを入れる

  2. カレールーは入れない

  3. ねぎは入れても入れなくてもいい

プログラミングに直すと(変数は日本語)
その前にいくつか説明がある。ある変数 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);
    }//メモリ解放
   
}

参考になれば。

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

せんけん
支援していただきありがとうございます。支援は僕の作品作りを含め、子供へのお小遣いや楽しいことに貢献します。ありがとうございます