YiMatrix・アカデミージャーナル
「易経」に隠されたアルゴリズム、チューリングマシンより三千年早かった
「大衍の数は五十、その用は四十有九」——『周易・繋辞』に記されたこの一文は、コードに翻訳すれば初期化・ループ・終了条件を備えたアルゴリズムとなる。数学史、計算機科学、情報符号化の三つの尺度で易経の「数」を再読する:それは神秘主義ではなく、古代中国が最初に書き記し、今日でも動作するアルゴリズムである。

「大衍の数は五十、その用は四十有九。」
この一文は『周易・繋辞』に記されている。
理解できなくても構わない。私はこれを、現代のプログラマーが理解できるコードに直接翻訳する——まず五十を取る;一つは使わずに残す;残りの四十九を二つの山に分ける;一本を抜き取り指の間に挟む;四本ずつ数えて余りを出す;これを十八回繰り返し、一つの卦を導き出す。
これは哲学ではない。
これは遥か昔に書き記され、今日でも動作するアルゴリズムである。
以下、三つの尺度でこれを測る:数学史、計算機科学史、情報符号化。測り終えた時、この文を書いた人が行ったことは、後に「計算」という概念を明確にした人々と同じであることが分かるだろう。
一、一文ずつ逆コンパイルする
まず原文を一文ずつ分解する。古文の一文ごとに、現代語訳を添え、さらにコードの概念に対応させる。
「大衍の数は五十、その用は四十有九。」
五十本の蓍草(一種の草の茎。古代の計算道具で、そろばんの珠に相当)のうち、まず一本を動かさずに残し、残りの四十九本で演算を始める。
——これは初期化:開始値を定義する。
「分けて二と為し、以て両に象る。」
四十九本を無作為に二つの山に分ける。
——状態を二分する。ここから全体の流れの状態が変化し始める。
「一を掛けて以て三に象る。」
一方の山から一本を取り出し、指の間に挟む。
——確定した数の取り出し動作。
「之を揲して四を以てし、以て四時に象る。」
二つの山をそれぞれ四本ずつ数える。
——4をステップとして剰余演算を行い、最後に何本余るかを確認する。
「奇を扐に帰して以て閏に象る。」
数え終わった後の余り——一本、二本、三本、または四本——も指の間に挟んで記録する。
——余りを一時変数に格納する。
「故に再び扐して而る後に掛く。」
この一連の作業を一変と呼ぶ。三変で一爻を導き出し、六爻で一卦を構成する。
——これはループと終了条件:十八回ループし、六爻が揃ったら停止する。
これら五つの文をまとめると、次のようなものになる。コードが分からなくても構わない——左列が動作で、右列のシャープ記号以降が対応する古文の原文であり、一行ずつ対応している。
init 蓍草 = 50 # 大衍の数は五十
use 蓍草 = 49 # その用は四十有九(一本は動かさない)
loop 18 回: # 十八変
無作為に二つの山に分ける # 分けて二と為し、以て両に象る
一本を抜き取り指の間に挟む # 一を掛けて以て三に象る
四本ずつ数え余りを出す # 之を揲して四を以てし、以て四時に象る
余りを保存する # 奇を扐に帰して以て閏に象る
return 六爻成卦 # 故に再び扐して而る後に掛く
これに何があるか。
初期化(五十)がある。状態変数(手元の草の本数、毎回変化する)がある。ループ(十八変)がある。終了条件(六爻が揃ったら停止)がある。
初期化、状態変数、ループ、終了条件——この四つは、あらゆるプログラムの骨格である。
あの文には、骨格が揃っている。
二、これこそがチューリングマシンである
初めてこれを読み終えた時、しばらく考え込んだ。
これは哲学者が世界観を表現しているのではない。これは正確で、一歩一歩実行可能なプロセスである——同じ初期条件を与え、同じ手順を踏めば、各ステップに明確な規則がある。
1936年、イギリスの数学者チューリングは「計算可能数について」という論文を書いた。
その論文で彼は初めて、あることを厳密に特徴づけた:どのようなプロセスが、機械が一歩一歩実行し、最終的に結果を算出できるか——後に人々はこれを「計算可能」と呼んだ。彼が示した基準は明確だ:プロセスには開始状態、一連の遷移規則、終了条件が必要である。これらを満たせば、それは機械で計算可能である。
彼がそのために構築した抽象モデルは、後にチューリングマシンと呼ばれる。
今日あなたが使うすべてのコンピュータ、すべてのスマートフォンは、本質的にチューリングマシンの工学的実装である。CPUが行っていることは、最も基本的なレベルでは、「現在の状態を読み取り、規則に従って次の状態に遷移し、停止するまで続ける」である。
では、あの五十本の草に戻ろう。
開始状態——五十から四十九を取る。遷移規則——分ける、掛ける、揲する、帰する。終了条件——六爻が揃って卦ができる。
すべて揃っている。
大衍の数は、蓍草と人間の手で実行可能なアルゴリズムであり——その実行主体こそが、最古のチューリングマシンである。
時間軸を並べると、さらに興味深い。
1936年、チューリングは一編の論文全体を使って、「どのようなプロセスが計算可能か」ということを初めて厳密に述べた。
一方、『繋辞』のこの一連の文章を書いた古代人は、「アルゴリズム」という言葉も概念も、自分たちが何をしているかを記述する抽象的な数学言語さえ持っていなかった。
チューリングは一編の論文で「アルゴリズム」を明確にした。古代人はそれを明確にしなかった——彼らはそれを直接実行したのである。
三、太極から六十四卦へ、完璧な二分木
易経にはもう一つの構造が隠されており、より直接的で一目で認識できる。
『繋辞上伝』第十一章に次の一文がある:
「易に太極あり、是れ両儀を生じ、両儀は四象を生じ、四象は八卦を生ず。」
現代語に訳せば——
太極は一。両儀は二。四象は四。八卦は八。
一が二に、二が四に、四が八に、各層で二倍になる。八卦がさらに二つずつ重なり、八掛ける八で六十四卦を得る。
この数列を書き出せば:
1 → 2 → 4 → 8 → 16 → 32 → 64。
すなわち、2の0乗から2の6乗まで。6乗は、一つの卦の六爻に対応する。
これは厳密な二分木である。各ノードは下に二つの枝に分かれる——陰か陽、0か1、第三の可能性はない。
計算機科学で聞いたことのある名前——二分探索、二分ヒープ、ハフマン符号——これらはすべてこの木の遠い親戚である。今日あなたが顔認証でスマートフォンを解除する背後には、0と1が層ごとに二分されている。
一、二、四、八、十六、三十二、六十四——これは遊びで数えているのではない、木が成長しているのである。

さらに、あの「五十」に戻ろう。これも適当に決められた数ではなく、背後に算術がある。
『繋辞』第九章によれば、天数(奇数:一、三、五、七、九)の合計は二十五、地数(偶数:二、四、六、八、十)の合計は三十、合わせて五十五である。
しかし演算に使われるのは五十——五十五から五を引いた数である。
この点は正直に述べなければならない:なぜ五を引くのか?古代人が与えた理由は、「五行」という五つの基数を基本層としてシステム外に置き、演算に参加させないためである。このステップは約束事であり、「五十五」という数から厳密に導かれたものではない。
そして五十から四十九へ——五十からさらに一を引く——このステップは明確である:引かれた「一」は、動かない「太極」であり、起点そのものが計算に入らない。
五十五、五十、四十九——これらの数字はそれぞれ独立しているわけではなく、少なくとも後半は互いに連動している。これは算術の問題であり、神秘的なものではない。
四、しかし易経はアルゴリズムの源泉ではない
ここで、興奮して誤読されやすいことを述べておかなければならない。
易経は今日の計算機科学の源泉ではない。
ライプニッツ——「八卦から二進法を発明した」と伝えられる人物——彼は1679年にすでに独自に二進法の原稿を書いており、その時点では中国の卦図を全く見たことがなかった。彼は八卦から二進法を学んだのではない。
彼が伏羲の六十四卦図を見たのは1703年であり、その時初めて、はるか昔の中国人がすでにこの体系を書き記していたことに驚いた。順序は逆である。
チューリングも同様である。彼は『繋辞』を読んでチューリングマシンを思いついたのではない。彼はケンブリッジで、西洋の数理論理学の系譜に沿って、自ら「何が計算可能か」という問題にたどり着いた。
(「はるか昔」について言えば、一字一句逆コンパイルした『繋辞』の成立は実際には遅く、多くは戦国時代から漢初にかけて書き定められた;しかし、それが記録しているのは、さらに古くから使われていたあの演算である。)
二つの異なる文明が、千年以上の時代を隔て、互いに見たこともなく、独立して同じ構造に到達した。
この事実は、「易経が源泉である」という主張よりも百倍衝撃的である。
誰かが誰かを模倣したのではない。人間が真剣に自然を観察し、抽象的な規則を見出そうとすれば、遅かれ早かれ同じ基本構造にたどり着くのである。
計算可能な世界は、東洋も西洋も、古今も問わない。それはそこにあり、異なる方向から異なる人々が歩み寄り、出会うのを待っている。
古代人にはキーボードもCPUも、「アルゴリズム」という言葉もなかった。
彼らは五十本の草を使って、実行可能な演算を、数千年にわたって絶えることのない一冊の書物に書き記した——まず世界を数え、状態を符号化し、一歩一歩推論し、最後に目の前の象に還元した。
今日、私たちはこれをアルゴリズムと呼ぶ。彼らはただ、真剣にこの世界を見つめただけである。