見出し画像

小林秀雄と科学⑧ー自明性のデバッグ:アインシュタインがエーテルを棄却(リファクタリング)し、カント的時空を動的引数へと反転させることー

〈19世紀末の物理学は、電磁気学という『場』の現象を、古典力学という『物』の論理で説明しようとし、致命的なシステムバグに直面していました。
媒介物『エーテル』による辻褄合わせは失敗し、ガリレイ、光速度、速度合成の3つの基本原則はデッドロック(矛盾)を起こします。
アインシュタインが試みたのは、システムの表面的な修正ではなく、ニュートンやカントがハードコード(公理化)した絶対時空そのものの解体でした。
自明とされた前提を動的引数(パラメータ)へとリファクタリングし、矛盾を恐れずに学問の成立根拠を書き換えた理論物理学の思考力を、Pythonのオーバーライド(多重定義)と例外処理の思想を用いて構造化してみたいと思います。〉

小林秀雄が理論物理学に興味を持った理由はアインシュタインの例にみられるように学問の成立根拠を否定し、解体することも恐れない、つまり理論物理学における矛盾を恐れない思考力の展開のためではないかと私には思われます。

さて、相対性理論は19世紀の物理学は前回触れた「光の波動説」を認めてもなお、古典物理学的な「物」中心の力学的な考え方を捨てておらず、「場」的な波動現象を「物」的な力学によって説明しようとしました。

ここに19世紀末の物理学者たちの直面した矛盾があり、この矛盾を解決するものとしてエーテルという概念は考え出されました。

しかし、このエーテルという物的な触媒により、電磁的な波動現象を説明するという考え方は成功することなく、この矛盾の解決はアインシュタインによってなされました。

アインシュタインは、エーテルという概念を捨てることによりこの矛盾を解決しました。

つまり古典物理学的な考え方それ自体の中に矛盾を発見し、その矛盾を克服するために新しい物理学、相対性理論を確立したのです。

アインシュタイン以前の力学法則は、
① 等速運動をしている系はすべて同格であるとするガリレイの相対性原理。
② 1887年のマイケルソンとモーレイの実験により照明された光速度不変の原則。
③ 速度の合成に関する法則。
という3つの基本法則から成り立っていましたが、これら3つの原則はともに両立することはできません。

アインシュタインは、この矛盾を③の速度の合成に関する法則を除去することにより解決、つまり、ニュートン力学の根本原則である速度の合成の原則を近似的にしか該当しないものとみなしたのです。

ニュートンの物理学は、光の速度と比較してずっと小さな速度で運動するものには妥当するが、光の速度に近い速度で運動する物体には妥当しないという考えたのです。

アインシュタインは①と②の原則の上に、相対性理論という新しい物理学を打ち立て、古典物理学の世界では自明とされ、考える必要すらない普遍的な実在とされた時間と空間という「場」の問題を提起したのです。

ニュートン物理学の哲学的基礎づけを行ったと言われるカントの「純粋理性批判」においても、自明の公理的前提として容認されていたのが時間と空間でした。

アインシュタインは、その時間と空間について問うたのです。

小林秀雄がアインシュタインら理論物理学者に見たものは単なる新しい科学的知識ではなく、「自明とされている前提(システム)の自己矛盾を直視し、それを解体・再構築する思考の絶対的な誠実さ」でした。

ニュートン力学、そしてカント哲学すら「自明の公理(ハードコードされた不変の定数)」とした絶対時間・絶対空間
アインシュタインは、ガリレイの相対性(①)と光速度不変(②)という、古典物理学の枠内では両立し得ない致命的なバグを前にして、辻褄合わせの「エーテル(媒介物)」を導入することを拒絶しました。代わりに、根幹の「速度合成則(③)」を「近似に過ぎない(特定の条件下でのみ動くローカル関数)」と見做してパッチを当て、時空そのものを動的な「変数」へと書き換えました。この矛盾を恐れぬ解体ショーを、さっそくPythonの文法でみてゆきたいと思います。

class NewtonianUniverse:
    """ニュートン&カント的宇宙(絶対時空がハードコードされたシステム)"""
    def __init__(self):
        # カントも自明とした、宇宙の「不変の定数(ハードコード)」としての時空
        self.ABSOLUTE_SPACE = "固定された絶対空間"
        self.ABSOLUTE_TIME  = "一様に流れる絶対時間"
        print(f"【古典的前提】 時空は普遍の実在として固定されています。")

    def velocity_addition(self, v1, v2):
        # 原則③: ニュートン力学の「速度の合成則」
        return v1 + v2

    def coordinate_transformation(self, v1, v2):
        # 19世紀末の矛盾(デッドロック)をシミュレートする内部関数
        # 原則①(ガリレイの相対性)と原則②(光速度不変: c)を、原則③(速度合成)で評価する
        c = 300000  # 光速 (km/s)
        
        # 光速の乗り物(v1=c)から、前方に光(v2=c)を放った場合
        combined_velocity = self.velocity_addition(v1, v2)
        
        print(f"\n--- 古典的計算の実行 (光速移動系での光速度) ---")
        print(f"合成計算結果: {combined_velocity} km/s")
        
        if combined_velocity != c:
            # 光速度不変(原則②)と速度合成(原則③)が正面衝突(矛盾)
            print("【19世紀末のバグ】 エーテルを導入して、この矛盾を辻褄合わせ(パッチ)しよう...")
            return "EtherPatchError: エーテルによる力学的説明は失敗しました。"

class EinsteinUniverse(NewtonianUniverse):
    """アインシュタイン的宇宙(矛盾を解決するリファクタリング・システム)"""
    
    # アインシュタインの覚悟:親クラスの「速度の合成則(原則③)」を完全に書き換える(オーバーライド)
    def velocity_addition(self, v1, v2):
        c = 300000
        # ニュートンの足し算(v1 + v2)は、光速に比べて十分小さい速度の「近似」に過ぎないと見做す
        denominator = 1 + (v1 * v2) / (c ** 2)
        return (v1 + v2) / denominator

    def relative_space_time(self, velocity):
        # 自明の前提だった時空を「固定値」から、速度によって変化する「動的オブジェクト(変数)」へ解体
        print(f"\n--- 相対性理論によるシステムの再構築 (移動速度: {velocity} km/s) ---")
        
        # 速度(引数)に応じて、時間と空間の「場」が動的に収縮・遅延(評価)される
        c = 300000
        lorentz_factor = (1 - (velocity**2 / c**2)) ** 0.5
        
        dynamic_space = f"速度 {velocity} に応じて縮む空間 (因数: {lorentz_factor:.4f})"
        dynamic_time  = f"速度 {velocity} に応じて遅れる時間 (因数: {lorentz_factor:.4f})"
        
        return {"space": dynamic_space, "time": dynamic_time}

# --- 思考力の展開(実行環境) ---
print("=== 1. 19世紀末の物理学者が直面した矛盾(デッドロック) ===")
old_physics = NewtonianUniverse()
result = old_physics.coordinate_transformation(v1=300000, v2=300000)
print(result)

print("\n=== 2. アインシュタインによる解体とリファクタリング ===")
# 矛盾を恐れず、システム(学問の成立根拠)そのものを再定義する
new_physics = EinsteinUniverse()

# 原則③を除去・修正したことで、原則①と②が矛盾なく両立する
c = 300000
resolved_velocity = new_physics.velocity_addition(v1=c, v2=c)
print(f"【矛盾の解消】 光速の光を合成しても速度は: {resolved_velocity} km/s (光速度不変の維持)")

# カント的「自明の前提」が、速度を引数とする動的な関数へ昇華
actual_space_time = new_physics.relative_space_time(velocity=250000)
print(f"解体された空間: {actual_space_time['space']}")
print(f"解体された時間: {actual_space_time['time']}")

Python歴の浅い私の今回の学び

辻褄合わせ(エーテル)と、根本的リファクタリング
プログラムが予期せぬエラー(矛盾)を起こしたとき、私たちはあまり原因を究明せず、その場しのぎの修正コード(if文による場当たり的なパッチ)を挟んでやり過ごそうとします。これは19世紀末の物理学者たちが考え出した「エーテル」の実態に似ています。
アインシュタインが行ったのは、そのようなパッチ当てではなく、システム全体の設計図(親クラスの根本原則)に潜むバグを認め、コードを根本から書き直す「リファクタリング」でした。

定数(ハードコード)から引数(パラメータ)への反転
ニュートンやカントは、時間と空間をシステムが起動する前からあらかじめ決まっている「不変の定数(ABSOLUTE_TIME)」として扱いました。
アインシュタインはこれを「速度(velocity)という外部からの引数によって、実行時にいくらでも形を変える動的な変数(オブジェクト)」へと変え、問い直したのです。「何を定数とし、何を引数(変数)とするか」の設計思想は、システムの柔軟性を決める重要な思考力となりますね。

Python歴の浅い私の今回のさらなる学び

① class と super().__init__()

親の遺産を引き継ぎつつ、新しい宇宙を創る

プログラムにおける「クラス(class)」とは、世界のルールを定義した「設計図」のようなものです。

class NewtonianUniverse:
    # ニュートンの世界(親)

class EinsteinUniverse(NewtonianUniverse):
    # アインシュタインの世界(子)

アインシュタインは、ニュートンを全否定したわけではありません。「光より圧倒的に遅い、私たちの日常のルール」としては、ニュートン力学をそのまま引き継いでいます。
Pythonでは、class 子クラス(親クラス): と書くことで、「親クラスのルールをすべて引き継いだ新しい設計図」を作ることができます。

このとき、子クラスの内部で使う super().__init__() は、「親の設計図に書かれていた初期設定を、そのまま自動で読み込んでね!」という合図です。親の遺産(バトン)を土台にして、新しい宇宙を立ち上げるための知恵ですね。

② メソッド・オーバーライド(関数の上書き)

「自明のルール」を書き換える、思考の解体

アインシュタインの「③の速度合成の法則を除去した」という決定的なドラマ。これをプログラムで表現したのが「オーバーライド(上書き)」です。

親であるニュートン・クラスには、以下のような足し算のルール(関数)が書かれていました。

def velocity_addition(self, v1, v2):
    return v1 + v2  # 単純な足し算(時速100キロ + 時速100キロ = 時速200キロ)

アインシュタイン・クラスは、親のこのルールが「光速の世界ではバグ(矛盾)を起こす」ことを見抜きました。そこで、子クラスの中でまったく同じ名前の関数をもう一度書き直したのです。

def velocity_addition(self, v1, v2):
    # 親の「単純な足し算」のルールを完全に無視して、
    # 光速を超えられない複雑な「相対論の計算式」で上書き(オーバーライド)する!

Pythonでは、親とまったく同じ名前の関数を子クラスで定義すると、自動的に子クラスの新しいルールが優先されます。
これは、古い学問の成立根拠(親のルール)を恐れずに書き換え、矛盾を克服したアインシュタインの「思考の展開」に重なりますね。

③ 固定された値(定数)から「引数(パラメータ)」への反転
【思想】カントの絶対時空を「変数」へと解放する
カントやニュートンは、時間や空間を「宇宙が始まる前から最初からそこに固定されて存在する、絶対に変わらない背景(ハードコードされた定数)」とみなしました。
アインシュタインの革命は、時間と空間を、「動く速度(引数)によって、その都度カタチを変える、生き物のような関数」に変えてしまったことです。

def relative_space_time(self, velocity):
    # 「velocity(速度)」という引数(バトン)を外から受け取る

この (self, velocity) の velocity が引数です。関数を呼び出すときに、外から放り込まれるデータの窓口です。

  • 時速0キロ(止まっている)という引数を放り込めば、いつもの見慣れた時間と空間が計算(出力)されます。

  • 時速25万キロという猛烈な引数を放り込めば、空間は縮み、時間は遅れるという、全く新しい時間と空間が動的に計算されます。

「最初から決まっている不変の実在」ではなく、「どんな引数(関係性)が与えられたかによって、その都度評価(変化)される場」として時空を再定義する。プログラミングにおいて、数値を直接書き込まずに、あえて「引数」にしておくことの本質的な意味が、ここにあります。

プログラムの文法は、「思想を形にするための枠組み」ですね。

数理的ギミックへ

メソッド・オーバーライドによる「原則③の除去」
Pythonにおける Method Override(多重定義) は、親クラス(ニュートン力学)が持っていた古い関数(velocity_addition)を、子クラス(アインシュタイン)が全く新しい計算式で上書きし、無効化する機能です。
アインシュタインが「速度の合成則」を除去し、それを「特定の低速領域でのみ有効な近似(ローカルな振る舞い)」へと格下げした工学的アプローチが、まさにこのオーバーライドの構造と重なります。

カントの公理系解体と、パラダイムの動的評価
カントの『純粋理性批判』は、人間の認識の「OS(オペレーティングシステム)」に最初からインストールされている直観の枠組みとして時間・空間を定義しました。
アインシュタインがそこに「場(電磁気学と相対性)」の概念を持ち込んでOS自体をアップデートした行為は、数理的には「静的なデータ構造から、関係性によって常に再計算される動的関数へのシフト」を意味しています。小林秀雄が魅了されたのは、この「己が立脚しているパラダイムそのものを、矛盾の検知によって解体してみせる、理性の命懸けの跳躍」だったのでしょう。

学問の成立根拠を否定し、解体することも恐れない思考力は、まさに小林秀雄の批評精神の核心であり、同時に現代の私たちがノベーションと呼ぶものの本質ですね。

ここまで、読んで下さり、ありがとうございます。

今日も、頑張りすぎず、頑張りたいですね。

では、また、次回。

※見出し画像は、カンディンスキーの「円の中の円」からです😌


いいなと思ったら応援しよう!