書いたもの中から:
「離散数学って何?」と思われる方も多いだろう. そういった疑問も当然である. 離散数学が 数学の一分野とみなされるようになってからまだ日も浅く, 「離散数学」という言葉自体, 立場やとらえ方によって, いろいろな意味を持つからだ. 本稿でも「離散数学」を, 一般の人々が接する離散数学と, 研究者が接する離散数学の二つに分け, そのそれぞれが, 電子情報通信とどのようにかかわっているかを述べることにしよう.
こうした教養の離散数学の目標は何か? 少々大げさだが, 第一の目標は, 数学記号を使って, 論理的に分析したり,説明する技法 --- 数学的弁証法 --- を身につけることだ (と私は解釈している). 従来は, そうした技法の基礎を, 中学校の「幾何」などで体得し, 足りない分を他の数学科目の授業から補ってきた. 他の数学科目は, それなりに別の目標があるのだが, 「離散数学」は数学的弁証法の修得自身を 主な目標にしているのである.
この辺りをもう少し詳しく説明するために, 昔なつかしい「幾何の証明」を思い起こしてみよう. 私が習った証明は図1のようだったと記憶している.
仮定:△ABC において,AB=AC
結論:∠ABC=∠ACB
証明:△ABC と △ACB において,
まず, 仮定と結論をはっきり述べる. そして, 仮定に書かれていることと, 今まで習ってきた定理だけを使って, 結論を導き出さなければならないのである. 私の先生は, この証明の書き方に大変厳格だったので, 合同記号(≡)の位置にまでうるさかった. (合同記号がちゃんと中心に揃って書かれていないと注意されたのだ.) 当時は, 「そんなことまで」と思っていたが, きちんとした書き方をすることで, ミスが少なくなり, また考え方も整理されるわけで, 今思い返せば「そんなこと」も結構重要だったのだ (恩師に感謝!). このように, 幾何の厳密な証明を通して, 我々は数学的な証明の書き方の基本的なルールやマナーを学んだのである.
また, 証明手法という点から考えると, 最も基礎的な証明法の練習をしていたと考えられる. 大ざっぱな見方かもしれないが, 数理論理学でいうところの 「命題論理の自然演繹法」の練習だったと考えてもよいだろう.
一方, もう少し高度な論法は, さらに上級の数学の中に出てくる. たとえば, 数理論理学でいうところの「一階述語論理」が本格的に登場するのは, 大学の「解析学」である. 大学の数学で, ε-δ論法(図2)に悩まされる学生が多いと聞く.
数列 a_n に対して,次の条件が成り立つとき, a_n が b に収束するという.
それがもとで留年したり, 数学が嫌いになったりする人もいるそうだ. 原因は, 一階述語論理の基本, すなわち∀と∃を使った論法に 慣れていないからだろう. 微分,積分の計算方法の妥当性を厳密に議論しようとすると, どうしても∀と∃を使った議論が必要になってくる. これが, 計算方法の使い方を中心に勉強してきた新入生になじめないのだ. それも当然なことで, その前に∀と∃を使った論法を 練習しておいた方がよいのかもしれない.
教養の離散数学は, このような数学的弁証法を専門に習う授業なのである. 実は最近, 中学の「幾何」でも 先に述べたような厳密な証明を練習する機会が少なくなっていると聞く. とすると, 「離散数学」は, 数学的な論法を学ぶ (ほとんど)最初の機会になってしまったのかもしれない.
さて, このシリーズのねらいは, 数学がどの程度, 電子情報通信分野に関連しているのか (端的に言えば役に立っているか)を再確認することだそうだ. では,教養の離散数学の「役立ち度」だが, これは, 数学的弁証法がどれくらい大切かにかかってくる.
数学的弁証法は, 理工系, とくに電気情報通信を専門とする学生/研究者にとっては, 「読み書きソロバン」に匹敵するくらい重要である (少なくとも私はそう思っている). 電気情報通信分野は理工系のなかでも, 記号や抽象的な概念を使うことが多い分野だ. したがって, しっかりした数学的弁証法が身に付いていないと, ちょっとしたことでも, 人に筋道を立てて説明することができなくなってしまう.
また, 自分自身で問題を分析したり整理するにも, 数学的弁証法は重要だ. たとえば, 授業についていけない学生の中に, 自分でも授業のどこがわからないのか, それがわからなくなっている学生を見かける. どこまでがわかり, どの地点でわからなくなったのか, その分析ができないでいるのだ. これは数学的弁証法が身に付いていないからである. 授業についていく能力を養うためにも, 新入生は「離散数学」でみっちりしごかれる必要があるのだ.
ところで, この「離散数学」だが, 教えるのが難しいとか, よい教科書がない, という話しをよく耳にする. それも当然だと思う. 知識として教えなければならないことは, それ自体では至極単純なことが多いからだ.
たとえば, 集合の記号にしても ∈,∪,∩ など, 定義だけなら小学生でも習うようなことしか教えない. だから, 定義や基本的な使い方を書いただけでは, 内容の薄い教科書にしかならないし, それだけの授業では意味がない. 肝心なのは, そうした単純な記号を組み合わせて, どうやって議論を展開していくか, という点だ. ところが, その訓練のためのよい例題を一般的に提供するのはかなり難しい. 学生の知的興味を刺激する程度には難しく, しかも数学的弁証法を学ぶのに適した例題が必要なのだが, それを作り出すのは, まさに担当教官の力量にかかっているのである.
ただし, 電子情報通信といっても, 私に書けるのは, 精一杯頑張っても計算機科学程度. 今回はその中でも, アルゴリズム理論に限って述べさせて頂く.
アルゴリズム理論は, 理論計算機科学の大きな柱となっている分野だ. アルゴリズムとは計算手法のことで, ここでいう「アルゴリズム理論」とは, いろいろな問題に対して性能のよい計算手法を研究する分野のことである (参考文献 (4)). 離散数学とアルゴリズム理論の関連を説明する前に, まず, アルゴリズム理論の重要性について, ひとこと述べておこう. (というのも, 世の中には, プログラムの性能が多少悪くても, 性能のよいコンピュータさえ使えば十分速く計算できる, と考えている人が結構いるということを最近知ったからだ. そこまで極端でなくても, 最近のコンピュータは十分性能がよいので, 複雑なアルゴリズムを使わなくても十分速く計算できる, と思っておられる方もかなりいるだろう.) 確かに, 複雑なアルゴリズムが不要な場合も多い. しかし, コンピュータの性能に頼るより, 複雑でも, 性能のよいプログラムを開発した方が, 時間やコストの面で有利な場合も少なくない. また逆説的に思えるかもしれないが, コンピュータの性能が向上すればするほど, 高度なアルゴリズムが必要になってくるのだ.
たとえば, 私のところの博士課程の学生が, 新しい数学原理を用いたアルゴリズムを研究している. かなり複雑な手法を用いるので, 私は, そう速くなるとは思っていなかった. しかし, 実際に試してみると, かなり速い. とくに多量のデータを処理するのに優れている. 従来のアルゴリズムでは数十時間かかる計算を1時間程度でやってしまうのだ.
一般に, 複雑なアルゴリズムは, 処理するデータ量が多くなればなるほど強みを発揮する. 一方, コンピュータの性能が向上すると, より多くのデータがはき出されるようになり, 処理しなければならないデータ量が増加する. だから, コンピュータの性能が上がれば上がるほど, 複雑なアルゴリズムが重要になってくるのだ.
さて, アルゴリズム理論の大切さはこのくらいにして, 離散数学がアルゴリズム理論にどの程度関わっているかを述べよう.
「関わっているも何も, 我々は離散数学を毎日やっているのですよ!」 アルゴリズム理論の研究者ならば, そう言うに違いない. 新しいアルゴリズムを作り出す過程で, 往々にして離散数学の問題を解かなければならないからである.
一般に, アルゴリズムを設計するときは, 問題を分析し, 与えられた制約をうまく表現する方法を考える. それがグラフなど, 抽象的なものになることも多い. こうして表現されたグラフが満たす性質を調べ, それを利用して解く方法を考えるのである. この性質がどこかのグラフ理論の論文に出ていればいいのだが, そうは世の中甘くない. 自分で解かなければなら場合も結構多いのである (まあ, 研究者のほとんどは, それを楽しんでいるところもあるが).
グラフの性質など, 世の中に星の数ほど(いや,無限に)ある. その中で, グラフ理論の研究者たちは, 彼らなりの基準でおもしろい問題を選んで研究している. アルゴリズムの設計で出てくる問題の中には, そんな基準にひっかからなくて, 今まで考えられなかったものも多い. そんな問題にぶち当たったら, 自分で解くしかないのである.
もちろん, そんな場合にも離散数学の研究が役に立たないわけではない. むしろその逆で, 離散数学の研究がなかったならば解けない問題がほとんどだろう. 離散数学の手法や結果があるからこそ, アルゴリズム理論家が, 自ら自分の問題を解くことができるのだ. 一方, アルゴリズム理論が, 新しい問題を離散数学へ提供し, 新しい理論が発展するきっかけとなることもある. このように, 離散数学とアルゴリズム理論は, 切っても切れない深い仲なのである.