sasaharayuugo.net

数学の基礎付け

この数学の基礎付けっていうのは、二つのパートに分かれている。

一つは、要するに小学生や中学生の算数オリンピックの問題を、平行分岐するプログラミング言語みたいなもので統一的に記述できるという研究。
https://sasaharayuugo.net/kurorekishi/after10/2019_05_25_140213.html
https://sasaharayuugo.net/kurorekishi/after10/2019_06_10_120727.html
ちなみにこの計算量を減らすっていうのは、元々の記述にちょっと書き加えるだけでは駄目で、単純な並び替えアルゴリズムと最適化された並び替えアルゴリズムの違いぐらいに、根本的に書き換える必要がある。

プログラミング言語でテトリスを書くみたいに、大体の問題にはこの記述法で対応できる。
統一的に記述しようとするとこうなるはずで、「変数Aが確定しないように変数Bを設定する」だとか「A∪B == C」だとかの機能もあったけど、研究の続きをする人は自分でその場その場で機能を考えて加えていってほしい。
線形代数の連続的な増加はこう記述した。https://sasaharayuugo.net/kurorekishi/after10/2019_09_09_151517.html
途中にゲーム専用の記述法とかもあったけど、これはいらない気もする。https://sasaharayuugo.net/kurorekishi/after10/2019_08_16_211728.htmlの一番上の問題だけど。

で2つ目が、それで記述できなかったユークリッド幾何学の自動解答の模索。下2つで大体の概要は掴めるんじゃないかと思う。
https://sasaharayuugo.net/kurorekishi/after10/2019_10_27_171732.html(スマホで見ると表示がガタガタになる。パッと直し方が分からないし、全員に読ませることが目的の文章では無いので直さない。申し訳ない。これは、2つの角と間の辺が同じだったら他も同じ、みたいなのをpythonで機械的にやっているだけだ)
https://sasaharayuugo.net/kurorekishi/after10/2020_01_03_211211.html

人間の思考を率直に再現するならグラフ+αみたいになるはずで、その場合は角の和を検出するために辺の並びを時計回りで、その不確定さも含めて把握する必要があって、自分のよりもっと良い方法がある気がする。

すごく大雑把なんで、雰囲気さえ掴めれば良いというか、それで頭の良い人なら自分で実装できるんじゃないかと思う。研究の方向性として正しいというだけで、あまり厳密さを期待しないでほしい。正直自分でももうよく分からない。概要さえ把握できれば、後は結構誰でも思いつくようなことしか書いてなかったはず。

(超後日追記:そもそもの着想。これがないと伝わらないのではないか。 https://sasaharayuugo.net/kurorekishi/after10/2019_05_28_060732.html

これらがそれでも記述できなかった問題。
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081314.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081328.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081340.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081353.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081405.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081417.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081429.html
https://sasaharayuugo.net/kurorekishi/after10/2020_01_30_081440.html

超後日追記:説明のための例がないのはあんまりなので2つ用意する。表記が安定しないのは許してほしい。こういう算数の問題を記述するための記述法だと考えてほしい。

13年度ファイナル問題 問題6

『A〜Fの6人が、それぞれ1枚以上のカードを持っています。持っているカードの枚数について6人が次のように言いました。

A:「私は、Dより1枚多い枚数のカードを持っています。」
B:「私は、Cより3倍の枚数のカードを持っています。」
C:「私は、Bより5枚少ない枚数のカードを持っています。」
D:「私は、Eより7枚多い枚数のカードを持っています。」
E:「私は、Aより9枚多い枚数のカードを持っています。」
F:「6人合わせて20枚のカードを持っています。」

6人のうち、2人がウソをついているとき、次の各問いに答えなさい。

(1)ウソをついている2人はだれとだれですか。

(2)A〜Fの6人がそれぞれ持っているカードの枚数を答えなさい。』


result_list := [];
A, B, C, D, E, F >= 1;

or(それ以外否定で4){
 A == D + 1;
 result_list := 追加 := "A";
 ,
 B == C * 3;
 result_list := 追加 := "B";
 ,
 C == B - 5;
 result_list := 追加 := "C";
 ,
 D == E + 7;
 result_list := 追加 := "D";
 ,
 E == A + 9;
 result_list := 追加 := "E";
 ,
 A + B + C + D + E + F == 20;
 result_list := 追加 := "F";
}

結果における("A", "B", "C", "D", "E", "F").[?1: ?1 ∉ result_list];

結果における(A, B, C, D, E, F);



08年度トライアル問題 問題4

『次の表は2008年の4月のカレンダーです。カレンダーから、たて3マス、横3マスの四角形を取り出します。取り出す四角形はどの部分でもかまいませんが空白のマスがあってはいけません。

12345
6789101112
13141516171819
20212223242526
27282930

たとえば、太枠(今回は表の項目名で代用した)の部分を取り出したとします。

123
8910
151617

このとき、どの数字がどのマスに入っているかを表すときは、次の「あ」〜「け」の記号を使うものとします。

例えば、「あ」=1 「い」=2 のように表します。

2008年5月1日は木曜日です。次の問いは、2008年5月のカレンダーについて考えなさい。

問い1.「あ」+「お」+「け」が5の倍数になるときの「あ」の位置に入る数字をすべて求めなさい。
問い2.「い」+「え」+「お」+「か」+「く」が10の倍数になるときの「お」の位置に入る数字をすべて求めなさい。』


calendar := [
 [ , , , , 1, 2, 3],
 [4, 5, 6, 7, 8, 9, 10],
 [11, 12, 13, 14, 15, 16, 17],
 [18, 19, 20, 21, 22, 23, 24],
 [25, 26, 27, 28, 29, 30, 31]
];

calendar[A][B] + calendar[A+1][B+1] + calendar[A+2][B+2] == 5 * ?;

結果におけるcalendar[A][B];

calendar[C][D] + calendar[C + 1][D] + calendar[C - 1][D] + calendar[C][D + 1] + calendar[C][D - 1] == 10 * ?;

結果におけるcalendar[C][D];




自分は今、コンピューターサイエンス学部で習うようなこと(主にOSとコンパイラ、後はこまごまと、ってまあその二つもそこまで深くは勉強してないけど。OSはソースコードを読む限りかなり実用向けに作られていて、未来の人間が高校とかで同じ勉強をすべきかは分からない。今は本を読んでも分からない所があったりするが、全体的にとりあえず分かった気になる段階があるはずで、そこを目指してはいるが。学部生向けに作られた教材なんで可能だろうと考えている。今は処理を追うだけしかできず、なぜの部分が分からないが、おそらく起動やプロセスの生成やスケジューリングなどを抑えれば漠然とした全体像を掴むことぐらいはできるんじゃないかという仮説を立てている。全体像を得られれば深めていくことができる、そうじゃなければ今までの勉強は無駄になるんじゃないかと)を勉強していて、本当に最悪の場合は自分で実装することも考えている。あと高校や大学や大学院ぐらいの数学まで範囲を広げるつもりでいる。
(当然俺にそんな決定権は無いんだが、一個人として自分の研究で一教科内ですら今より大変になってほしくないとは思う。変に解釈されて皆マイクロカーネルを勉強するようになるっていうのは考えすぎなんだろうか。学びたい人間が学べるようになっていたら良いとは思うが、皆が一緒に勉強するものは少ないほうが良いと俺個人は思う。いや、マイクロカーネルで超超短くなる万が一のために可能性を消さない方が良いのかな?と一応考えた書き方だったのは事実だが。まああんまりゴチャゴチャ書くべきじゃないんだろうが、あのfacebookアカウントの複数の意味を持たせるというコンセプトは悪かったし、それ以前に西洋や東洋哲学のいろいろな決定権を持ってしまうあり方もどうかと思う。あと信じてもらえないだろうけど集合的無意識はある。)
(いろんな人に対してはどうもすみませんでしたとしか言うことは無い。あと集合的無意識はあるというのは、俺を疑わせるための方便とかそういういかにも東洋的な話で無く、マジなのはfacebookの最初の頃の書き込みをちょっとでも見てもらえれば分かると思う。ハッキリ書くなら、『東京奇譚集』は立ち読み部分しか読んでおらず、実話しか乗っていない本だと思っていた。ただ、変な現象が起きたように見えるのは最後の話だけだと思うし、あれぐらいなら全然偶然でも起こり得ると俺個人は思う。少なくとも仕込んでいないのは確かだ。俺にとって重要なのは、信頼されている作家がセンサーに引っかかったと発言しているというただそれだけだった。『現代の社会と思想について』でも並びに意味を持たせてしまっているのは残念ながら事実で、こうなるのも俺のせいなんだが、誰か実際の本を読んでさっさとこの状況を終わらせてほしいと思う、普通に匿名で買えるような仕組みになっているのだし。100%疑うっていうのは、否定を確定させているという意味で、例えば全体があれば肯定と似たようなものだと思う。)

自分は本当に愚かだと思う。
アルゴリズムやデザインパターンは後になってからコードを読めば良かった気がするし、それじゃあOSかなと思ってOS自体を勉強するのはチンチクリンだったと思うし、コードコンプリートも学校であれどこであれ一年ぐらい経験を積んでからあるあると思いながら読む本だった気がする。中学の頃にc言語入門、c++入門、java入門、javascript入門という具合に勉強していって挫折した時以来、俺はプログラミングの勉強において空回りし続けている気がする。
これからはこの並行分岐するプログラミング言語を動かすという大目標に向けた努力以外はしないようにしようと考えている、がその方針だって正しいかどうか分からない。
他の国ではプログラミングが義務教育とかに入るようになってきているそうで、それで学習方法が確立するのかもしれないし、しないのかもしれない。確立しないとすれば、それはプログラミングがクラフトだからなのかもしれない。とにかく、プログラミングについて俺から聞いたことは全部忘れて、プログラミングについてはプログラマーに聞けと言いたい。
その場で一番詳しい人間に聞くのはプロフェッショナリズムでは無いと思う。
現代人は「プロ」という単語が出た瞬間に気持ち良くなっている。そういう気持ち良さ、評価に結局人の行動は左右されている。ある国独特の行動、その時代独特の行動っていうのは、その気持ち良さが作っている。
プロと言ってもピンからキリだし、意見も分かれる。じゃあ業界標準の認識を発表している機関があって、その機関の言うことを聞くべきなのかと言えば、WHOとかに限ってはそうなのかもしれないが、そうじゃない時代や場所やジャンルもある、例えばWHOが滅茶苦茶な見解を発表し始める可能性はある。一番詳しい機関の言うことを常に聞くべきだという主張は、十分に批判対象であり得ると俺は思う。

言語理論や数学の記法や『現代の社会と思想について』だけには自信がある。それ以外への批判はしないでほしい(いやこれはプログラミングについてでは無くて、人格面への批判があまりにも多い。俺はそういう批判から言語理論や数学の記法や『現代の社会と思想について』を守らなければいけないとだけ思う)。19世紀以降は、数学や物理や工学がやっぱり凄いと俺は素直に思っている。俺はその端っこを突いただけの存在に過ぎない。駄目な俺を許して、あるいは許さなくて良いんでそういうものだけを見てほしい。

意志力が無いとこうやっていつまでもダラダラと書き連ねることになってしまう。コンピューターだとか高校数学だとかを勉強していて、自分はここで打ち止めなのではないかなどと思う。誰でも発見できそうなことを初めて発見するのが凄いというのは、評価される側からすると辛いんだということが分かった、自分側からすると根拠が無いから。おそらく11月の文学フリマでは認められないのも辛いし、対人戦略が高1で止まっているのも辛い。最近は寝っ転がってばかりいる。自分は2016年の延長線上でやっているのだと思っている。この理論は『数学の原理論』の良い作り直しになっていると思うし、集合的無意識があるというのも、あるから精神性だとかあの世だとか言う気は無いけれど、あるものはあるし、松中優子(松竹梅に金沢と富山の関係性、ってそこまでの解釈を許すなら奇跡でも何でも無いと思うのだが。なぜか仕込みでは無いと釈明させられるはめになっているが、あるいはこのページの『精神性と主観』で表紙の猿みたいに逆さになっているのが問題なのかもしれないが、先入観の問題だと思う)はどうでも良いとしてあの村上春樹氏の証言はなかなか有効なものだと思うし。投票と同じくらいに重要な問題だと思う。半信半疑でいさせることさえできれば、後は各自のセンサーに引っかかるのを待てば良い。自分もあるという所までしか分かっていない。

自分で並行分岐するプログラミング言語みたいなのを実装するのは諦めた。元々コードを公開するつもりは無くて、簡単な実装を自家用で使うつもりだったけど、二次方程式だとか三次方程式だとかそれ以上の制約を解くのが複雑になりそうだし、何より自分が辛いと思うことを楽しくやる人たちがいるなら、いつかそういう人たちがやった方が良いんじゃないかと思った。本当は大学までの数学教育を簡単にすることが、ある意味で革命につながるのだと思っていたけど、これからは一日一時間ほどのペースでゆるゆると数学を勉強していって、その目標をどれだけ達成できてどれだけ駄目だったのかを確認していくだけにしようと考えている。まあと言ってもこの形式は自分がいなくても量子コンピューターだとかの関係で成立していたものだったかもしれないから、自分はやっぱり本質的にはチョムスキーみたいな存在なのだと思う、チョムスキーはコンピューターもできたらしいけど。
本当は19世紀以降どころかいつの時代も数学とかがメインストリームだからね。そしてそれはあるいは素晴らしいことなのかもしれない。それをハッキリさせることができたのが研究成果だったのだと思う、それは俺がいなければならなかった、いやそう思うけども。日本でも多分どこでも俺を嫌っているんだろうけど、俺がいた方が良かったでしょほらほら。

大学までの数学教育を簡単にするために書くが、数学の問題を解く際には、1.問題文を数学的にモデル化する、2.計算量が足りなければ工夫する、3.手計算で解く、という工程を経るわけだが、これをバラバラに教えることができるようになったのは意義があると思うし、前者二つの計算結果はコンピューター内に残る。ちなみに、自分はnand2tetrisなるカリキュラムを勉強して、8章のバーチャルマシンでデバッグできずに詰んだが、こういうのも勉強したい人はできるようになっていれば良いと思うが、皆が勉強すべきものでは無いと思う(がこれについても俺よりプログラマーの意見を優先してほしい)。

読まれる文章として残しているつもりは無いし、このページに限ってダラダラ書き連ねて良いことにした。『現代の社会と思想について』もせいぜい21世紀内が賞味期限だと思っていて、それからは哲学書というより『共産党宣言』みたいに歴史的文章として読まれれば良いと思っている、巻末の簡潔な訂正リストと一緒に(ゲシュタルトはその単語が提唱された当初から脳神経のルールという扱いだったとか、「尊王攘夷」という単語が示すように東アジア論は常識の範囲内だったとか)。
コンピューターのメタファーで数学概念を理解するという提案が、この研究の一つの肝なのだと思っている。現代の数学は古代ギリシャの影響下にある、具体的には現代の数学の文化を形作った本はユークリッド原論の影響下で書かれている。犬儒派のディオゲネスが毛をむしった鳥で「二本足の羽のない動物」という人間の定義を茶化したという話が残っているように、古代ギリシャは言語的に物事を捉える傾向にある。ユークリッド原論のユークリッドはエジプトの学者なわけだが、エジプトにおいては幾何学はあのような言語的な形式はしていなかったのではないか。コンピューターのメタファーで数学概念を捉えるメリットは、今回の研究でプログラムでユークリッド幾何の問題を解いたように、簡単な言葉を使ってもコンピューターという想定が論理性を確保してくれることだと思う。これは歴史を遡れば、フワーリズミー的に数学を捉えるということなのかもしれない。そういう流派や文化が立ち上がらなければ、この研究は完成したとは言えないと思う。並行分岐するプログラミング言語という形式自体はほっといても生まれたものだったかもしれないが、その文化や文脈は俺がいなければ生まれなかったんじゃないか。世界四大文明と西洋をそれぞれ数学に噛ませることができたという点でも、俺はこの研究を気に入っている。

高校数学もやめた。今までの努力は真の意味で努力を減らすための努力で、もうアイデアは伝えたし、後は実現するなら実現するんだろうし実現しないなら実現しないんだろう。

超後日追記:この数学の基礎づけにおいて、計算の原理をCPUなどにおける実装に求めてはいけない。というのも、CPUなどでは補数表現というやつで引き算を実装している。つまり1(2進法で例えば4ケタだと0001)に対して-1は(1111)、2(0010)に対して-2は(1110)、3に(0011)に対して-3は(1101)、……、7(0111)に対して-7は(1001)、(1000)は-8というようにして、足し合わせた時にオーバーフローするように設定して、そのオーバーフロー分の処理を変えることで実装している。それを数学の計算の基礎づけと考えるのは無理がある。現在は数学でプログラミングが基礎づけられている中で、この試みでは根本的には集合論とフローチャートでプログラミングを基礎づけ、プログラミングで数学を基礎づけるという流れを採用している。