とね日記

理数系ネタ、パソコン、フランス語の話が中心。
量子テレポーテーションや超弦理論の理解を目指して勉強を続けています!

素数夜曲―女王陛下のLISP:吉田武:(後半の紹介)

2014年11月03日 18時09分39秒 | 物理学、数学
素数夜曲―女王陛下のLISP:吉田武

内容紹介
数学学習の“全方位独学法”を提供。ガウスが、数学の女王と讃えた整数論を主題とし、その頂に登る為の様々な手法を紹介する。「発見法的」に始め、「証明」へと進む。結果は「数値実験」により再確認され、「グラフ」により視覚化される。人物小史など内容は多岐に渡る。ラムダ計算の概要から、函数型言語の基礎までを紹介し、LISPの方言であるSchemeにより整数論を表現する。本文で語られた初等整数論の基礎が、附録ではプログラムとして与えられ、具体的な数値として議論される。函数型言語の入門書としても最適。 2012年刊行、871ページ。

著者略歴
吉田武:ウィキペディアの紹介記事 著書一覧
日本の著作家。1956年大阪府生まれ。京都大学工学博士(数理工学専攻)。著書『虚数の情緒・中学生からの全方位独学法』で、平成12年度日刊工業新聞社第16回技術・科学図書文化賞最優秀賞を受賞した。


理数系書籍のレビュー記事は本書で261冊目。

本書の後半は前半で語られた初等整数論の基礎が、附録ではプログラムとして与えられ、具体的な数値として議論される。函数型言語の入門書としても最適だ。

昔プログラマーをしていたことがあるが、これまで学んできたのはすべて手続型の言語ばかり。関数型の言語は僕にとって初めての世界だ。紹介される例をいくつか拾いながら、自分で試しながら読み進んだ。分量も多く、精読に徹したので後半だけでひと月近くかかった。

関数型言語と数学の相性がよいことは知っていたが、これほどまでマッチするとは思っていなかった。整数論に限らず数学は定義を元に論理を積み重ねて構築するものであり、この手順自体が関数型言語の定義と積み重ねに見事に対応しているのだ。

特に本書で強調されているのは「再帰構造をもった定義」であり、整数論のさまざまな定理の証明の中で使われている。この再帰の構造がプログラムにそのまま反映されているので、読者は言語を学ぶと同時に本書前半で学んだ整数論の証明過程を復習することができるのだ。

本書で使われているのはLISPの流れをくむSchemeという言語だ。著者は日本語をサポートしているSchemeとしてGaucheというプログラム言語をテキスト・エディタのEmacsとともに使ってプログラムを書いて紹介している。

Gauche - A Scheme Implementation (最新版のGaucheはこのサイトからダウンロード)
http://practical-scheme.net/gauche/index-j.html

GNU Emacs(最新版のEmacsはこのサイトからダウンロード)
http://www.gnu.org/software/emacs/


実際にプログラムを実行することによって、手では計算できないほど広い探索範囲で本書前半の理論を検証したり、膨大な数の解集合を得ることができるようになる。その結果にはときに驚かされ、解の分布の規則性や不規則性の中に人智の及ばなない何かの法則が隠されていることを見て取れるようになるのだ。単純な論理から生み出される複雑さを堪能するのが醍醐味のひとつである。

また以下のブログでは、本書のプログラムの実行例をYouTube動画として見ることができるが、整数論が生み出す美しい絵柄を鑑賞することも本書のもうひとつの楽しみである。

好きい夢 昭和な気まぐれ飛行機
http://scmblog.blog.shinobi.jp/%E7%B4%A0%E6%95%B0%E5%A4%9C%E6%9B%B2/


なぜ本書でSchemeを採用したかということについて、著者は次のように述べている。

プログラミング言語の選択は極めて悩ましい。著作が長く読まれ、役立つように、息の長い言語を選ぶことは当然として、その"教育的能力"が問題である。言語そのものを鍛え、言語を成長させていく過程が、そのまま数学的内容への理解へと繋がる、そんな言語を選ばねばならない。完璧なるMathematicaでは教育的効果に乏しいのである。

この意味でSchemeは最良の選択であったと信ずる。僅か50頁に充たない言語仕様書(R5RS)がそのことを示唆している。基本構成はしっかりとしているが、希望する処理は自分の手で組み上げる必要がある。そこに"教育"が存在する。誰の手を借りるでもない"自己鍛錬"の場として、Schemeは最高に環境を提供する。その結果、本書を読了された時、読者は整数論専用言語 Queen Scheme を自らの手で作り上げたことになる。


本書は好みが分かれるというのも事実だ。「虚数の情緒:吉田武」においてそれは顕著だったが、著者が若者に対して説いている「薀蓄(うんちく)」の部分が好きになれない人が世の中にはいるようである。正直言えば僕も「虚数の情緒:吉田武」の冒頭の薀蓄は長すぎると思っていた。

本書について言えば、僕はそれほど気にならなかった。というより著者が本書で述べている若者向けのお説教は、僕の気持ちにジャストミートした。おそらくそれは薀蓄を述べる大人を昨今ほとんど見かけなくなったからだろう。たしかに著者は正しいことを言っている。

年寄りの言うことを素直に聞かないのが若者の特権であり、それをそのまま実践してきた過去の自分を今さらながら後悔する年齢に僕が達してきているからなのだと思う。素直に読めてしまったのは、きっとそういうことなのだろう。


だから僕はちょうど中間の世代の人間として、僕のブログの若い読者の方に向けて、自分で何度もうなづいた部分を抜粋して紹介したいと思う。たとえ今はうっとうしいと感じたとしても、20年後、30年後には以下の文章に共感し、同じことを次の世代の若者に伝えていただけるのだと僕は期待している。

「車輪の発明」を例に上げ、すでに発見済みの事柄を自らのアイデアによって再発明するプロセスの重要性を筆者は次のように説いている。


再発明に徹せよ、概念の交差点に立て。
不合理や非効率を恐れず、自分の考えを推し進めろ。


社会人になれば、非効率は直ちに自身への低評価へと繋がる。学生にとっても、入試合格を目的とする立場からすれば、無意味な廻り道に過ぎない。しかし、それらはすべて錯覚である。冷笑家は、如何にも現実を見ている、知っているという態度を取ろうとするが、それは「合理的に新発見ができる」「学習は効率的にできる」と信じる”非現実的な妄想”に基づいている。

創造は不合理の果てに成されるものである。対象の深い理解には途方もない廻り道が必要である。あらゆる概念が試され、車輪もネジも傘も靴も再発見された後に、漸くそこに辿り着けるのである。それは人類の歴史が明確に示している。もし、低評価や不合格を恐れるのであれば、「再発見の速度」を上げればいい。自分の発想を捨てる必要など何処にもないのである。

何についても独自性を持つことは極めて難しく、辛いことである。しかし、「自分の方法」を見出した者は、それを貫き通すことで、漸く「自分自身を再発見する」。「その方法こそが自分なのだ」と悟るのである。遂には「その方法を捨てることは、自分を捨てることだ」という境地に達する。そして再び、「それを見出した理由」に想いを馳せて、なるほど「再発見を恐れず、基礎を重んじたからだ」という結論に至るのである。暮らしぶりは平凡の極みに徹しながらも、発想だけは独創性を保つ必要がある。「自分の人生を多数決に委ねるべきではない」---研究者・技術者の生涯はこの一点に尽きるのである。

「机に齧り附いているだけではダメだ」と識者達は指摘する。確かに「だけでは」ダメである。しかし、机に齧り附いた経験の無い者に未来は拓けない。旅することも各種ボランティアも大切である。しかし、地道な学習を軽視して大成は望めない。学ぶとは、明日の為に今日を鍛えることである。多くの仲間が内に外に動き廻っている。社会に関わって大人達の評価を得ている。こうしたことに焦らず、騒がず、動きたい気持ちを抑えて未来に備えることである。

青年に"静かな十年を贈る"のが教育者の務めである。十一年目には必ずや社会の礎となり、地域の軸となって大活躍する雄偉の人物となる。その為忍んで学ぶことに徹するべきである。勿論、人により得手不得手がある。動くことが得意な者は動けばいい。しかし、それだけが評価され、全てがその方向へ向くことは、将来の蓄えを放棄するに等しい。それでは社会が自滅する。

混乱期であればあるほど、青年達に静かな学習環境を与えることが必要なのである。強靭な日本、強く優しい日本は、強靭な青年の手によってしか作りえない。目先を乗り切る知識はあっても、二の矢、三の矢が出ない。アイデアが涸渇した若年寄ばかりになっては、助けられる人も助けられない。故郷を復旧させるのは大人の仕事であるが、復興させるのは、そうした大人の背中を見ながら、学ぶことに徹した青年達である。「こんな状況で数学なんて……」ではなく、こんな状況だからこそ数学や物理学を基礎から学んだ人達が、一人でも多く必要なのである。

註: この文章が書かれたのは平成24年3月11日、すなわち東日本大震災からちょうど1年後のことである。「安倍さん」にも読んでほしいと僕は思った。


関連ページ:

本書については何人かの人が感想記事を書いている。特に印象に残ったものを紹介しておこう。

(define 独学 再帰) - 書評 - 素数夜曲:女王陛下のLisp(404 Blog Not Found)
http://blog.livedoor.jp/dankogai/archives/51810854.html

吉田武「素数夜曲: 女王陛下のLISP」は、整数論とScheme入門として最高\(^O^)/
http://iiyu.asablo.jp/blog/2012/06/20/6486231

書評:素数夜曲(にょきにょきブログ)
http://aoking.hatenablog.jp/entry/20120918/1347975609

素数夜曲 女王陛下のLISP(ぱたヘネ)
http://d.hatena.ne.jp/natsutan/20120901/1346503936

素数夜曲―女王陛下のLISP 感想
http://book.akahoshitakuya.com/b/4486019245

好きい夢 昭和な気まぐれ飛行機
http://scmblog.blog.shinobi.jp/%E7%B4%A0%E6%95%B0%E5%A4%9C%E6%9B%B2/


関連記事:

素数夜曲―女王陛下のLISP:吉田武:(前半の紹介)
https://blog.goo.ne.jp/ktonegaw/e/3740cd7fde863f2aebd195e326488ff6

虚数の情緒 - 中学生からの全方位独学法
https://blog.goo.ne.jp/ktonegaw/e/27155c8d7b5242d7e69e00335411acc1

名著復刊:オイラーの贈物:吉田武
https://blog.goo.ne.jp/ktonegaw/e/9275a096b6bf54594d2a96dfa12f56e1


Gauche、Emacsを学ぶための書籍:

プログラミングGauche:Kahuaプロジェクト
入門 GNU Emacs 第3版

 


Gauche、Emacsを学ぶためのサイト:

連載:Gaucheでプログラミング!
http://thinkit.co.jp/article/74/1

Gaucheプログラミング(立読み版)
http://karetta.jp/book-cover/gauche-hacks

Gaucheでメタプログラミング
http://www.atmarkit.co.jp/fcoding/index/gauche.html

Emacs入門 (全9回)
http://dotinstall.com/lessons/basic_emacs

Emacs を使って,文章を書く
http://www.wakayama-u.ac.jp/~takehiko/webprg/toc.html#3


応援クリックをお願いします!
にほんブログ村 科学ブログ 物理学へ 人気ブログランキングへ 




素数夜曲―女王陛下のLISP:吉田武



目次(前半の詳細目次は前半の紹介記事を参照)

増補改訂版・序

第0夜:梟は黄昏に飛翔する
第1夜:素数のメロディ
第2夜:ピタゴラスの調べ
第3夜:自然数のリズム
第4夜:整数のパーティ
第5夜:マエストロの技
第6夜:小数のメリーゴーランド
第7夜:切れ目の無い数へ
第8夜:異次元への飛翔
第9夜:素数はめぐる

付録A:プログラミング言語の発見

- 無から始める
-- 無から括弧へ
-- 括弧から自然数へ

- 裏で支える集合論
-- 集合の定義
-- 要素から対へ
-- 対から順序対へ

- 集合を操る
-- 合併
-- 共通部分

- 命題と論理式
-- 命題
-- 命題論理
-- 論理式の意味
-- 万能結合子

- 自然数の構造

- 再帰による定義
-- 自然数の定義
-- 自己言及の定式化
-- 括弧と自然数

- 函数とラムダ記法
-- 函数の定義と記法
-- ラムダ記法
-- ラムダの来歴

- リストから始まる

- LISP is not LISt Processor
-- S-表記
-- リストの定義
-- 用語の多様性

付録B:プログラミング言語の骨格

- 評価値を得る
-- REPL
-- 四則計算
-- 一般評価規則

- 名前と手続
-- 函数の定義
-- アルファ変換

- ラムダ算法
-- ラムダ項を知る
-- 略記の方法
-- イータ変換
-- ラムダ項の定義
-- コンビネータ
-- 簡略の戦略

- 特殊形式
-- define
-- lambda
-- let
-- 引数の書法
-- 引数の無い函数
-- 抽象化の問題
-- quote
-- 内部と外部
-- set!
-- if
-- 特殊形式の意味

- 型の確認と構文の拡張
-- 非数値データの型
-- 数値データの型
-- 構文の拡張

- 継続
-- 継続渡し形式
-- 継続の生成
-- 継続の機能

付録C:プログラミング言語の拡張

- 函数を作る
-- 数のリスト
-- 選択肢のあるiota
-- 再帰による加算・乗算

- ループ不変表明
-- 末尾再帰
-- 逐次平方による冪乗計算
-- 階乗の計算

- リストを調べる
-- 恒等函数
-- 要素の抽出
-- 二重再帰
-- リストの平坦化

- 高階手続
-- apply
-- mapによる手続の分配
-- mapによる手続の入れ子
-- 要素の並べ方
-- リストによる数値計算
-- 総和と積
-- 文字と数字

- 函数型言語の基礎
-- チャーチの数字
-- 後任函数
-- 加算函数
-- 乗算函数
-- 冪乗函数
-- 条件分岐
-- 前任関数
-- Yコンビネータ
-- Yの導出への再帰

付録D:女王陛下のLISP

- 組込函数による数値計算

- フィボナッチ数列に学ぶ
-- 再帰の動き
-- 一般項の計算
-- 行列計算の為の手続
-- 行列の逐次平方
-- ベクタとリスト

- 四則計算の仕組
-- 互除法
-- 倍数と約数
-- 循環小数を計算する
-- 循環小数を表記する

- 素数を求める
-- チューリングマシン
-- 終了条件
-- 更新と書込み
-- 探索範囲の設定
-- エラトステネスの篩と素数分布
-- データの入出力とグラフ
-- 素数と巡廻数

- コラッツの問題

- パスカルの三角形と剰余
-- 係数の相互関係
-- パスカルの三角形に色を塗る
-- 描画ソフトへの対応
-- 係数の分布を調べる
-- パスカルカラーの世界
-- 墨絵の世界
-- カタラン数と径路
-- 冪の三角形を作る

- 連分数・円周率・ベルヌーイ数
-- 連分数による無理数の定義
-- ベルヌーイ数とゼータ函数

- ベクトルの変換性
-- 二つの積と行列式
-- 和の規約と縮約計算
-- ベクトルの展開
-- 座標系の廻転とベクトルの廻転
-- 三次元の廻転

- 行列で蝶を愛でる
-- 廻転行列と正多角形
-- 不可能を描く
-- 三次元への飛翔

- 四元数による廻転の記述
-- 四元数の性質
-- 虚空間の廻転角
-- 行列による四元数
-- 四元数による補間

- 黄金の花を愛でる

- 無理数の視覚化

- 疑似乱数を作る
-- 線型合同法
-- 規則性の切除
-- 実行と検証

- モンテカルロ法
-- 面積を求める
-- 三次元への拡張
-- ピタゴラス数を求める
-- ガウス素数の抽出

- 非決定性計算による解法

- 乱択アルゴリズム
-- フェルマー・テスト
-- カーマイケル数

- 有限集合に対する諸計算

- 無限ストリーム

- カードから格子点へ
-- 格子点を求める
-- 格子点の全数探査

- オイラーの函数
-- 式のコード化
-- 自然数の相互関係

- 合同計算と素数
-- 合同式と根の個数
-- 原始根を求める
-- 指数を求める
-- 無限降下法と平方和

- 拡張された互除法
-- 互除法における値の変化
-- 一般解を導く

- 平方剰余

- RSA暗号
-- 文字と数字の相互変換
-- 暗号生成と暗号解読

- 最終講義

付録E:数表(素数・原始根)

後書(Postscript)

索引
コメント (6)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 数式を効率的に点字入力する... | トップ | 地獄の日本兵―ニューギニア戦... »

6 コメント

コメント日が  古い順  |   新しい順
学習環境 (hirota)
2014-11-04 11:16:41
「静かな学習環境」では無理だったなー
後押しと認めてくれる人達が居た幸運に感謝するしかないし、恵まれなかった人を貶すなんて有り得ない。
見つける為に動くのはありだが、当てと幸運が必要ですね。
返信する
Re: 学習環境 (とね)
2014-11-04 12:32:25
hirotaさん

静かで恵まれた学習環境が与えられると、逆にだらけてしまうというのもありますね。人間はとかく怠惰なところがありますし。
逆境の中でも勉強時間を捻出してまで勉強したいという意欲がある人が結局、身になる学びを得ることができるのだと思います。あとその姿を見て支えたいという大人が周囲にいることも大切です。
僕は大学に行かせてくれた親に感謝しています。(その当時は感謝の気持ちをもっていませんでしたが、社会人になってから気がつきました。)
返信する
再発明 (やす)
2014-11-08 11:04:35
再発明が学習に効果的だと言うのは、私も実体験があります。

昔から受験のための勉強が苦手で、勉強した気になれませんでした。自分興味に押されて考えたり調べたりすると、「これは凄い発見かも知れない」と早まることがよくありますが、先人たちが既にやっていたことが殆どですよね。

でも、それは確実に自分の身になるので、まさに再発明の効用です。

昔、まだC++ を全く知らず、C
で(趣味で)プログラミングを楽しんでいた時、関数へのポインタを配列にいれて、関数で使う変数と一緒に構造体に入れて使ったら、5000人程度のデータベースプログラムを作るのにとても便利でした。

当時はオブジェクト思考という言葉も概念も知らなかったのですが、そのほんの入り口でしかありませんが、このささいな再発明はC++の勉強の敷居をとても低くしてくれました。

返信する
Re: 再発明 (とね)
2014-11-08 22:30:54
やすさん

> 「これは凄い発見かも知れない」と早まることがよくありますが、先人たちが既にやっていたことが殆どですよね。

おっしゃるとおりです。でも「これは凄い発見かもしれない」と思えるようになれるだけで、素晴らしいことだと思います。僕も何度かありましたが、すごく興奮して夜も眠れなくなりますよね。アドレナリン全開です。(笑)

だから再発明とは言っても、自分の周囲100メートルの範囲で言えば小さな世界の中での「新発見」なのです。

プログラミング言語はCから入りました。(大学時代のFORTRANはマスターしたとは言えません。)C++は少しかじった程度でものになってはいません。時間を見つけるのが本当に大変ですが、プログラミングを楽しむ時間ももちたいですね。
プログラミングをしていると、本当に時間がたつのが早いです。


返信する
数学的にも興味がある (リン)
2014-12-07 12:26:37
数学的にも興味ある部分がある。記事のまとめ方が素晴らしい。この記事からより広い知識を得ることができる。ラプラス変換のところとか、よくまとめられている。ソフトにも興味あるものがある。この記事を読んでグラフィックユーチューブを知ることができた。要は、この記事を読んで、この本を読もうと思ったところである。
返信する
Re: 数学的にも興味がある (とね)
2014-12-07 13:03:00
リンさんへ

コメントありがとうございます。この本はとても刺激的でした。特に前半は素晴らしいです。自分で理解している内容をこの本のように読者を引き込むような形で書けるようになりたいと常々思っています。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

物理学、数学」カテゴリの最新記事