2021-10-23

数学・物理 プログラミングと数学/相転移プロダクション

今回のテーマ

式を含むこともよくあるため, 記事本体はアーカイブサイトへのリンク先にまとめています.

メルマガのバックナンバーは次のページにまとめてあります. 興味があればどうぞ.

感想をください

「読んだよ」だけでもいいのでぜひ感想をください. メルマガを書く励みになります. 最近感想を頂く機会が増えてきたので素直に嬉しいです.

メルマガへの返信でも構いませんし, 次のアンケートフォームへの回答でも構いません.

ではまたメールします.

何となく近況報告

今週はワクチン二回目で二日間ノックダウンであまり何もできていません. Functional Differential GeometryをClojureで進める関係で, ちょこちょこClojure関係のドキュメントを読んでいました.

Clojureはいい感じに整理されていてほしかったタイプのCommon Lispの趣があります. Common Lispは歴史があるというかありすぎるので仕方ないようですが. 素数夜曲の写経でだいぶ括弧の嵐に慣れましたし, Lisp系は確かに味があるのもわかりました.

あと何よりも嬉しいのはメインエディタのEmacsと相性がいいことです. 混沌を極めていて結局メインはVSCodeプラグインになったらしいHaskellと違って, Common LispもClojureも一番基本的なエディタはEmacsのようです. REPLでパチパチ小さく実行してテストできるのは本当に楽しいです. Haskell, F#, Juliaあたりも(VSCodeで)REPLありますが, REPLがあるとどれも開発体験がいいです.

もちろんモノによってJupyterもありますし, Jupyterのネイティブアプリ化という進化もあります. そしてお絵描きしたいときは特にJupyterが便利です. 純粋なコードを書く体験的にエディタに及ばない部分がつらいです. 以前使ってみたときはVSCode上でのJupyterもキーバインドの設定が外れてしまうようで, そういうのも厳しいところです.

何にせよ, 語学はともかく, 数学・物理・プログラミングに関してはもう少しまとまって勉強できるようなコンテンツの形を探っています. 言語をどうするかはひたすらに悩むところですが, いま, 単純に計算するという視点ならとりあえずJuliaなのでしょう. 理論に習熟させるという視点では, 年単位で前に紹介したLearn Physics by Programming in Haskellを見て, Haskellまたは同じくらい型が強い言語がいい気はします. F#はunits of measureまであるので, 数値計算まで込めてもいい選択肢とは思っています. 一応Microsoftも次の記事でF#を機械学習の言語として使いたい, みたいな話もあるようです. これがいまも, これからも動き続けるなら線型代数・数値微分積分系, お絵描き系も充実するのでしょうし.

まだお絵描き部分がどうなるかかあっていないのですが, sicmutilsを見ているとLisp系の特徴をうまく使ったシンボリックな計算もできていて, かなり面白そうです. プログラミングとしては原初のプログラミング言語としての一つとしてのLisp系(計算機系でも時々出てくる), 計算機科学に近いところの諸課題に関して実装言語としてよく使われている印象もあるHaskell, いろいろな人がいろいろな高速計算で遊び倒しているJuliaの三本柱を使い回す形で進める予定です.

計算機科学をもっとやりたい

素数夜曲でSchemeとも合わせて計算機科学の話題がいくつか扱われています. 雑にしか勉強できていませんがやはりラムダ計算が面白そうで, この辺ももっときちんとやりたいと思っています. 近々Introduction to Computation Haskell, Logic and Automataという本も出るようです. 以前魔法少女に教えてもらったアンダースタンディングコンピュテーションのHaskell版だろうと思っているのですが, これは実装言語がRubyなのが気に食わなかったため, かなり気になっています.

自分がやるだけなら何とかするのですが, コンテンツとしていろいろな人, 特に想定ターゲットの中高生にやらせようと思うと, Haskellはいわゆる「ふつうの処理」をやるハードルがあるので鬱陶しい問題があります. ただ読み書きしていて楽しい言語ではあり, これはこれでもっと理解を深めたい言語です. 私自身の計算機科学の話題への理解も全くないといっていいレベルなのでこれもちゃんとしなければとずっと思っています.

それはそうと, 素数夜曲でもフォン・ノイマン流の自然数の定義などが出て来ました. 学生時代は数学としてはフォン・ノイマン環, 数理物理としては作用素論・作用素環論の量子論への応用でフォン・ノイマンが直接作った土台の上でいろいろやってきました. いまになってさらに計算機関連の話でも具体的にフォン・ノイマンの影がちらつきはじめ, 別途勉強している超準解析でも数理論理・集合論で当然フォン・ノイマンの影がちらつくので, 大学以降の人生が全部フォン・ノイマンの手の平の上にあるようです.

統計力学がやりたい

堀田量子が出て以来, 物理熱が高まっています. 量子情報も含めた量子力学の基本の再勉強も進めていますが, イジング・(量子)スピン系などの統計力学の基礎も改めて勉強熱が高まっています.

量子力学は世間的にやたらニーズが高いらしい線型代数の実戦訓練の場でもあります. イジング・スピン系・格子模型はいろいろな問題はあれど, 数値計算が盛んな土地柄らしいですし, ここでも数学・物理・プログラミングが交錯します. 先日も紹介しましたが永井さんがJuliaでの物理プログラミング本を出すそうですし, ここも非常に楽しみです.

いま読んでいる超準解析の本もノートを作りつつさっさと一回通しで読み終えて, 田崎さんのイジング本・格子系の本を読みたいです. 両方とも査読に参加したのですがまだ完全に身についていませんし楽しみが尽きませんん.

トレースにまつわる話

ちょっとTwitterでやりとりしたので転載しておきます.

トレースとか、計算しろと言われたら、そりゃ定義知ってるから計算できるけど。一体あれがなんでそんな大事なのか分かってない。

以下私の回答.

理由の一つは、行列ではなく線型写像であることから来る不変性です。暴論を言えば圏論がらみの応用で普遍性があると嬉しい(背後に何かありそう)みたいな話が出てくるように、トレースで書ける量には何かありそう、的な話も展開します。 あと、トレースは計算しやすく、しかもいろいろな方法で計算できる利点があります。例えば無限次元で線型作用素(量子力学)で素直に計算するのと、確率論((量子)統計力学)で計算するのとで二通りの計算方法があり、物理としても二つの分野の計算手法・物理的直観の交換があります。 詳しいことは知らないのですが、幾何の金字塔である指数定理ではディラック作用素のトレースから引き出せる情報が重要で、その計算手法の多彩さと引き出せる情報の精度、解釈に直接反映されているようで、現代的な幾何と物理の交流でも基本的らしいように思います。

この辺の数学と物理, きちんとノートを作りたいのですがなかなか. 指数定理は学生の頃からの憧れなのでいつかは必ず挑む予定ではいます.

プログラミングと数学

現代数学観光ツアーのアンケートコメントが来たのでそれについて. 区分求積法の体で高校の教科書にもあるリーマン積分のイメージ図が定積分のイメージ作りに役立つというコメントを頂きました. 一枚絵でもそこそこ気分は掴めますが, もう一つ, 極限で確かに面積を厳密に定式化できる動的なイメージも大事です. この手の動画を昔は自力で作ることなど夢のまた夢でしたが, いまはその辺に転がっているコードをGoogle Colabで流せば簡単に改造できていろいろな例で確認できるようになりました. 私のGithubのどこかにもipynbを置いておいたので, 興味がある人は確認してみてください.

ただ, メンテしていないのでGithub上のコードはいま動くかは不明です. メンテする気がある分はコンテンツとして販売しているのでよろしければどうぞ.

これもJulia版を作りたいと思って幾星霜です.

あとリーマン可積分でない関数に対するコメントがあったので, 一応ここでも書いておきましょう. 単位区間$[0,1]$上の関数として, 有理数の上で$1$, 無理数の上で$0$を取る関数はリーマン可積分でない関数として有名で, 特にディリクレ関数という名前がついています. 現代数学観光ツアーでも確か紹介していたはずです.

ちなみに「(リーマン)可積分ではない」は多少曖昧さのある言葉ですが, ここでは極限の値が一意に決まらないという意味で使われています. 無限大に発散してしまうことを「可積分ではない」ということもありますし, 特にルベーグ積分は積分以前に可測ではない関数を真面目に考える必要もあります. 虚心坦懐に数学科の数学をやりたいのでもない限りルベーグ積分の事情は気にする必要はありませんが, 入門的なところにも魔界がボコボコあり, 集合論的なお遊びポイントもたくさんあるようなので数学としては多彩な遊び方があります.

最後にもう少しClojureとFunctional Differential Geometryの話. Functional Differential Geometryではお絵描きパートがあるのか確認できていません. 数値積分プログラムはあるので積分計算自体はあるようですが, それを使ったお絵描きがあるかは非常に気になるところです. Scheme本体にそんなものがあるはずがないので, scmutilsには関連するプログラムがあるはずで, Clojure移植版のsicmutilsにお絵描きプログラムがあるかが気になります. scmutilsだと素数夜曲のようにGnuplotに外出しされている可能性もありますが, Javaの資産も含めればいくらでもやりようはあるはずですし, 静止画だけでもよく簡単でもいいのでよさげなお絵描きプログラムつきだと嬉しいですね.

Prologueに出てきたプログラムを実行すると, かなりいい感じにラグランジアンが書けるので, これがシンボリックな計算だけではなく, 数値計算とお絵描きとどこまで連携しているのかがこれからの読書の楽しみです. Clojureでの確認後はJulia移植もしたいところです.

語学 キッズ向け科学雑誌の英語が面白い上に役に立つ/相転移プロダクション

今回の内容

数物系のメルマガが式を含むことも多いため, 先日から引き続き, 記事本体はアーカイブサイトへのリンク先にまとめています.

メルマガのバックナンバーは次のページにまとめてあります. 興味があればどうぞ.

感想をください

「読んだよ」だけでもいいのでぜひ感想をください. メルマガを書く励みになります.

メルマガへの返信でも構いませんし, 次のアンケートフォームへの回答でも構いません.

ではまたメールします.

相対論の勉強会でのドイツ語

今回の勉強会で構文に関して変なことを言ってしまいました. 都合で今週はお休みなので次週(次回)補足するのですが, ここで結論だけ言うと, やはり英語の感覚で適当に処理すると根本的に駄目でした. 当たり前ですがドイツ語はドイツ語の文法に沿ってきちんと考えないと, 勝手に自滅します.

ここ最近語学に力が入れられていないので, いい刺激にはなりました.

科学雑誌勉強会での英語

メルマガで書いたかちょっとすぐにわからないのですが, この勉強会で使っているのはキッズナショジオの文章であるにも関わらず, 何というか, いわゆる「難関大の受験英語」でも出てこないような単語がぽろっと出て来ます.

例えばprosperous. 対応する「繁栄」という日本語は多少難しめの言葉ですが, ちょっと気の利いた小学生なら知っていて, 高校生なら確実に知っている言葉だと思いますし, そう思えば確かにキッズ単語ではあります.

何でこんなことを書くかと言えば, 私の英語はガチガチの学校英語で, 大学受験+数学・物理の専門教育とプログラミングに関わる職業教育的な文脈での英語なので, 日常的な英単語に対する感覚が徹頭徹尾ないのだな, と改めて実感したからです.

ちなみに毎回参加してくれている翻訳の人とも話題になるのですが, そこまで難しくはない英語ではあるものの, 英語らしい表現がたくさんあります. 「英語から日本語に訳すのは簡単でも, 日本語から英語に適切に戻すのが難しい」というタイプの文, または単語・表現選択がたくさんあり, 文章を読み込んだあとに英作文教材としてもそのまま転用できるレベルです. 内容的にも科学系なので私にはとっつきやすく, これはいいコンテンツだと毎回非常に楽しみな勉強会です.

ドイツ語で遊ぼう

haben

今回からドイツ語単語もやることにしました. 初回はhabenを見ます.

見ての通り英語のhaveと同根です. Wiktionaryによると印欧祖語由来でオランダ語のhebben, デンマーク語のhaveと同根です. ゲルマン系の言語には同根の語があり, オランダ語やデンマーク語はゲルマン系なのだろうというのが推察されます. 勉強会でいつも言っているのですが, Wiktionaryで同根の単語を見ていると言語をまたいだときの語の変遷というか, 語の意味を持つのはどの要素なのか, 詳細な語源研究の成果はともかく「単語が似ている, または同根のような気がする」という感覚はどこにどう持てばいいのか, といった肌感覚が身につくようで非常に面白いです. さすがにオランダ語やデンマーク語を覚える気力と時間, 今はありませんが, いろいろな単語をWiktionaryで見てみると類似の事情があるのだろうと思えてきて無限に時間が溶かせます.

同じ「持つ」の意味があるフランス語のavoirとは同根ではないのですが, 面白いはどれも時制に関わる助動詞としてhaveに相当する単語を使う共通点があります. 完了または過去に関わります.

英語だといわゆる完了です. これについてはいいでしょう. ドイツ語の時制は英語の時制と表面的にはよく似ていますが, 意味や指す内容・守備範囲は全然違います. ドイツ語の現在形は英語でいう現在完了・現在進行形も含めた広い概念です. そもそもドイツ語には現在進行形自体が存在しません. フランス語のavoirから派生する時制も英語・ドイツ語と違います.

ちなみにドイツ語でも「頭痛は持つもの」で, "Ich habe Kopfschmerzen."と書きます. フランス語でも"J'ai mal à la tête."でやはり「頭痛は持つもの」です. 何が持てるか, 各言語で比較してみるとまたいろいろ違うのかもしれません. まだそこまで調べ切れておらず, 今後の個人的研究テーマというか表現集として貯めておかないといけないと思っているところです.

フランス語で遊ぼう

mettre

これはモノをどこかに「置く」意味が基本で, 置く場所は前置詞句や副詞で指示します.

「衣類を着る・身につける」の意味は身につける動作を指す言葉です. 英語でも着る動作はput on, 着ている状態はwearです. フランス語でのwearはporterです. ただし複合過去形では「身につけた状態」を意味するようで面倒です.

これ以外に人やモノを「ある状態に置く・仕向ける」, 「お金や時間を費やす」意味もあります.

代名動詞se mettreは「ある状態に身を置く」の意味です. 例えばêtre à tableは「食卓についている状態」で, se mettre à tableは「食卓につく動作」です. さらにse mettre à + inf.で「---しはじめる」と全然違う意味になります.

基本単語はいろいろな単語が合流したり意味の展開があったりと多義的なことが多く, これもその例に漏れないようです.

Wiktionaryによるとラテン語mittōの現在能動不定形のmittereに由来します. ラテン語はsendなどの意味を持ちます. これだけ見ていてもわかりませんが, やはりWiktionary先生のDerived termsを見ると, 例えばadmittō, ēmittōなどがあります. これらを再びWiktionaryで見てみれば, 英語のadmit, emitにあたります. ここでadは「向かう」という意味の前置詞でadvertiseなどのadです. 一方ēmittōのēはex由来でemitの「放出する」といった意味と対応しています. パッと見ではわかりませんが, 英語にもきちんと生きている言葉です.

また, これで調べてはじめて, 私はadmitとemitに関係があることを知りました. たぶんメルマガ読者の方は多言語に興味がある人はあまりいないように思うのですが, こういうのを丁寧にやっていくことで, 多言語学習が英語にも活きること, 言語感覚を育てるのに活きることを何とかして伝えられないかと思っています. プログラミング言語では多言語学習・実践はある程度当たり前である以上, これを自然言語の学習にも転用できないかという試みでもあります.