見出し画像

ゴールデン街と量子物理学者

なんか鳥の唐揚げが食べたいなあ、と思ったのだ。
というのも、僕は居酒屋に滅多に行かなくなってしまったからだ。
居酒屋といえば鳥の唐揚げ。
居酒屋に一人で行く人はあまりいないと思う。僕もぼっち人間なので一人で夕飯を食べる場所を探すことが多い。

一人で夕飯を食べるということは、居酒屋に行かないということである。
でもいいのだ。ゴーデン街があるから。

居酒屋以外の場所で唐揚げを食べるとなると定食屋などに限られる。しかし最近、大戸屋はなんかちょっとオシャレな感じがして近づきにくくなってしまった。なんていうか、松屋よりもスープストック東京になってしまった感じというか。コメダ珈琲よりもスタバ寄りというか。

オシャレ大戸屋で鳥の唐揚げ定食なんか食べてるとどうも調子が狂う。
なんとなく秋葉原駅前をぶらぶらする。朝から何も食べてない。エチオピアという気分でもないし、うどんでもない。立ち食い寿司を見て「おっ」と思うが、寿司なら昨日食べたなあと思い直す。

上品な寿司

そうしたら「昭和食堂」という店が駅前にあって、まるで往年の「神田食堂」みたいな雰囲気をかんじてフラフラと近づいていった。

昼の1時にようやく今日最初の飯を食うことになったのは、昨夜ゴールデン街で飲み過ぎたからだ。

「東京に住んでるのか?」

「ああ。君はどこから来たんだ?」

「俺はフランクフルトだ」

「アム・マイン?」

「そうだな。ハハ。確かにフランクフルトは沢山ある。ドイツで一番大きなフランクフルトだ。フランクフルト・アム・マイン。ヘッセン州の」

「そうか。俺も何度か行ったことがあるよ」

「本当かい?・・・君は仕事は何をしてるんだ?」

仕事・・・仕事か。いつも答えに詰まる。
あまり詮索されるのも面倒なので、「研究家Researcherだ」と名乗ると、男は目を丸くした。

「本当かい?実は俺も研究者なんだ」

「へえ、何の?」

「物理学だ。君は?」

「AIだ」

「そうか。AIか」

「ドイツには有名な物理学者が沢山いるよね。シュヴァルツシルトとかシュレディンガーとか」

「エルヴィン・シュレディンガーはオーストリアだ」

「そうだった。最近趣味で量子力学の計算方法を勉強してるんだ。ほら、ブラ=ケット何とかっていう・・・」

「ブラ=ケット記法ノーテーション?何でそんなものを君が?」

「そこに実に深い意味があるんじゃないかと考えているんだ。ブラ-ケット記法は実際にはベクトルを表現していて、量子力学の計算はほとんどが行列とベクトルの計算になる。それはAIの計算と大部分が共通しているんだ。それに、もっと興味深いのは、どちらも"ネットワーク"を題材としているところなんだ」

AIは言うまでもなく「ニューラル"ネットワーク"」を扱う。量子力学では「スピン"ネットワーク"」を扱う。ネットワークと代数幾何学は一見するとまるで無関係なものなのにネットワークの計算を扱おうとすると代数幾何学が必要になる。実に不思議だ。

そして、モデルは単純なのにそこから生まれる振る舞いは複雑怪奇で人間の想像力では追いつかないという点も、AIと量子力学の奇妙な類似点である。

「それは実に興味深い話だね。アメリカ人の、ほら、有名な物理学者で、何と言ったかな・・・多分ユダヤ人の」

「フォン・ノイマン?」

「違う。確かに彼もユダヤ人だが、誰だっけほら、あの有名な・・・」

「ファインマンか」

「そう!ファインマンだ。彼は電気回路のアナロジーでよく量子力学を説明するんだ。コンデンサキャパシタンスコイルコンダクタンス、そして抵抗器レジスタンスの関係さ。この三つで宇宙全部を説明できるんだよ」

「本当かい?」

「本当だとも」

それから彼はつらつらと何か言っていたがだんだんと酔っ払ってきたらしく早口に磨きがかかった。僕の本が店に置いてあったので本を見せると、彼も自分の書いた本を紹介してくれた。

最後に名刺をもらうと、フランクフルトにある原子物理研究所の研究者だった。

そんなことをぼんやり思い出しながら、電気回路とスピンネットワークの関係なんて考えたこともなかったから、このアナロジーで何を説明しようとしているのか気になった。酒もあったから、頭もはっきりしていないし。定食を食べながらとりあえずChatGPTに聞いてみた。

抵抗、コンデンサ、コイルをスピンネットワークに適用したときのアナロジーを教えて

思考時間: 11 秒

スピンネットワークは、もともとロジャー・ペンローズによって提唱された概念であり、特にループ量子重力理論で重要な役割を果たしています。ファインマンが直接スピンネットワークを考案したという記録はありませんが、彼の業績であるファインマンダイアグラムや経路積分法などで、電気回路のアナロジーが使われることがあります。

抵抗、コンデンサ、コイル(インダクタ)とスピンネットワークのアナロジー抵抗(レジスタンス)
電気回路での役割:電流の流れを妨げ、エネルギーを熱として散逸します。
スピンネットワークでの類似:スピン間の相互作用がエネルギーの散逸や減衰を引き起こす場合、抵抗に類似した役割を果たすと考えられます。
コンデンサ(キャパシタンス)
電気回路での役割:電荷を蓄積し、電圧の変化に対してエネルギーを供給または吸収します。
スピンネットワークでの類似:特定のノードやリンクがエネルギーや情報を蓄積し、システムの状態変化に応じてそれを放出する機能を持つ場合、コンデンサに似た役割を果たします。
コイル(インダクタンス)
電気回路での役割:磁場を通じてエネルギーを蓄積し、電流の変化に抵抗します。
スピンネットワークでの類似:スピンの向きや量子位相の変化に対して、システムがエネルギーを蓄積または放出する場合、コイルの挙動と類似しています。


これらのアナロジーを通じて、スピンネットワーク内でのエネルギー伝達や相互作用のダイナミクスを、電気回路の概念を用いて直感的に理解することができます。ただし、これはあくまで概念的なアナロジーであり、厳密な物理的対応があるわけではない点に注意が必要です。

o1

さっぱりわからん。
そもそもスピンネットワークがよくわからないのだ。

スピンネットワークについてプログラマーに説明してくれ

スピンネットワークをプログラマー向けに説明すると、次のように捉えることができます。

スピンネットワークとは?

スピンネットワークは、ループ量子重力理論で用いられるグラフ構造です。ノード(頂点)とエッジ(辺)で構成されるグラフで、物理的には空間の量子状態を記述します。このグラフのエッジには「スピン」という量子数が割り当てられ、エッジの数や繋がり方が、空間のジオメトリや量子重力の効果を表しています。

プログラミングに例えると?ノード(頂点)
プログラムで言うなら「オブジェクト」や「ノード」と捉えられます。各ノードは何らかのデータ(例えば位置や量子状態)を保持しています。
エッジ(辺)
ノード同士を結ぶエッジは、オブジェクト間の「リンク」や「リレーションシップ」と考えることができます。エッジには「スピン」という量子状態が割り当てられており、このスピンがエッジにおける相互作用や情報の伝達を表します。これは、エッジに重みや属性を持たせるグラフ構造に似ています。
スピン
エッジに付与された「スピン」は、量子情報を保持するプロパティの一つです。プログラムで言うなら、エッジの属性値や、エッジに紐づく特定のデータ構造に相当します。


スピンネットワークの動作

プログラムでダイナミックなグラフアルゴリズムを考えると、スピンネットワークの動作に似ています。例えば、エッジにかかる「スピン」が変化することで、ノード同士の関係性(すなわち空間の量子構造)が変化します。この変化は、イベント駆動的にアップデートされるネットワークの振る舞いと似ていると言えます。

ループ量子重力理論との関連

スピンネットワークは、宇宙や空間そのものが連続的ではなく「量子化」されていることを表現しています。プログラム的に言えば、空間が無限に分割されるのではなく、特定の単位に区切られた離散的な状態で保持されているようなものです。この「離散性」は、データベースのレコードや、オブジェクト間の有限な関係性に似ています。

まとめスピンネットワークは、ノードとエッジからなるグラフ構造で、エッジにスピンという量子数が割り当てられる。
各ノードとエッジは、プログラミングにおけるオブジェクトとリレーションに相当し、空間や相互作用を記述する。
空間の量子状態をシミュレーションするために使われ、変化や進化はイベント駆動のように捉えることができる。


量子力学的な空間の振る舞いを「グラフ」によって表現するこの考え方は、プログラミングで扱うデータ構造やアルゴリズムに非常に近い概念です。

わかったようなわからないような。
しかしプログラマーの武器は、プログラムなら読めると言うことである。
そこでこう命じてみた。

スピンネットワークのシミュレータをPythonで書いて

スピンネットワークのシミュレータは、量子力学的な概念を取り入れてノード(頂点)とエッジ(辺)を持つグラフ構造をシミュレートします。ここでは、簡単な例としてスピンネットワークをPythonでシミュレーションする方法を示します。このシミュレータは、ノード間のエッジに「スピン」を割り当て、それらがどのように相互作用するかをシミュレートします。

以下は、Pythonとnetworkxライブラリを使用してスピンネットワークを構築し、エッジにスピンを割り当て、シンプルなシミュレーションを実装する例です。

必要なライブラリのインストール

まず、networkxとmatplotlibをインストールします(必要な場合):

bash

Copy code

pip install networkx matplotlib

スピンネットワークシミュレータの実装

import networkx as nx
import matplotlib.pyplot as plt
import random

# スピンネットワーククラスの定義
class SpinNetwork:
    def __init__(self, num_nodes):
        self.graph = nx.Graph()
        self.num_nodes = num_nodes
        self._create_nodes()
        self._create_edges()
        
    # ノードの作成
    def _create_nodes(self):
        for i in range(self.num_nodes):
            self.graph.add_node(i, spin=random.choice([-1, 1]))  # 各ノードにスピンを割り当てる(-1か1)
    
    # エッジの作成
    def _create_edges(self):
        for i in range(self.num_nodes):
            for j in range(i+1, self.num_nodes):
                if random.random() > 0.5:  # ランダムにエッジを作成
                    self.graph.add_edge(i, j, spin=random.choice([-1, 1]))  # エッジにスピンを割り当てる

    # スピンネットワークの描画
    def draw_network(self):
        pos = nx.spring_layout(self.graph)
        edge_labels = nx.get_edge_attributes(self.graph, 'spin')
        node_colors = ['red' if self.graph.nodes[node]['spin'] == 1 else 'blue' for node in self.graph.nodes]
        
        nx.draw(self.graph, pos, with_labels=True, node_color=node_colors, node_size=700, font_color='white')
        nx.draw_networkx_edge_labels(self.graph, pos, edge_labels=edge_labels)
        plt.show()
    
    # シンプルな相互作用シミュレーション(隣接ノード間でスピンの伝搬)
    def simulate(self, steps):
        for step in range(steps):
            print(f"Step {step + 1}")
            for (u, v, data) in self.graph.edges(data=True):
                # 隣接するノード間でスピンが一致しない場合、エッジのスピンをノードに伝搬
                if self.graph.nodes[u]['spin'] != self.graph.nodes[v]['spin']:
                    print(f"Node {u} and Node {v} have different spins. Updating edge.")
                    data['spin'] = self.graph.nodes[u]['spin']
            self.draw_network()

# スピンネットワークの作成
num_nodes = 6  # ノード数
network = SpinNetwork(num_nodes)

# ネットワークの描画
network.draw_network()

# スピン相互作用のシミュレーション(5ステップ)
network.simulate(steps=5)

実装の説明SpinNetworkクラス:__init__: ノードとエッジを作成します。_create_nodes: ノードにランダムにスピン(1または-1)を割り当てます。_create_edges: ランダムにノード同士をエッジで接続し、エッジにもスピンを割り当てます。draw_network:ノードとエッジを描画します。ノードのスピンが1なら赤、-1なら青で表示し、エッジにはスピンが表示されます。simulate:ノード間のスピン相互作用をシミュレートします。隣接するノードのスピンが異なる場合、エッジのスピンがノードに伝わるように更新します。実行結果初期状態のスピンネットワークが描画され、その後、各ステップでスピン相互作用がシミュレートされます。ノードとエッジのスピンの変化がビジュアルで確認できます。これでスピンネットワークのシンプルなシミュレーションが可能になります。より複雑なシミュレーションや物理法則に基づく相互作用も追加できます。

スピンネットワークは、どうやら僕らコンピュータ科学者がセル・オートマトンと呼んでいるものと似た動作をするらしい。

ニューラルネットワークでも、初期のホップフィールドモデルなどは似たような動作をする。こんなところにも量子力学とAIの類似性があって面白い。

スピンネットワークの動きを確認するのに丁度いい現象は何か?

スピンネットワークの動きを確認するための現象として適しているものは、量子力学や統計力学に関連する以下の現象です。これらは、スピンの相互作用やネットワークの変化を視覚化・理解するのに役立ちます。

1. イジングモデル

イジングモデルは、スピンネットワークを理解するための基本的な物理モデルの一つです。このモデルは、格子状のスピンネットワークを使って、各ノード(スピン)の状態が隣接ノードとの相互作用に応じて変化する様子をシミュレートします。例えば、以下の現象が確認できます。スピンの配列と相互作用: 近接するスピンが同じ方向を向く傾向(強磁性)や反対方向を向く傾向(反強磁性)などが観察され、相互作用によってスピンネットワークがどう変化するかを確認できます。
相転移: 温度などのパラメータを変えることで、スピンが無秩序から秩序に移行する(相転移)様子が観察されます。これは、スピンネットワークのダイナミクスを見るのに適しています。


2. 量子ホール効果

量子ホール効果は、スピンネットワークの特定の状況下で発生する現象として知られています。この現象では、電子のスピンが特定のトポロジー的な状態を形成し、これによりホール電流が量子化されます。スピンネットワークの幾何構造やトポロジー的な変化を観察するには、量子ホール効果の理解が役立ちます。スピンのトポロジー的特徴: 量子ホール効果では、スピンネットワークのトポロジー的な特性が量子化されたホール電流に関連します。スピンネットワークがどのようにトポロジー的に進化するかを観察するのに適しています。


3. エンタングルメント(量子もつれ)

スピンネットワークにおいて重要な現象の一つが、スピン間の量子もつれです。2つのスピンがエンタングルメント状態にあるとき、一方のスピンが変化すると、離れた位置にあるもう一方のスピンも連動して変化します。この現象は、スピンネットワークの非局所的な相互作用を観察するために適しています。量子情報の伝達: スピンネットワークが情報伝達にどのように利用されるか、エンタングルメントを通じて観察できます。
ネットワーク全体の連動性: エンタングルメントを考慮すると、スピンネットワークが一つの統合されたシステムとして振る舞う様子を観察することができます。


4. ループ量子重力における空間の量子化

スピンネットワークは、ループ量子重力理論において空間の量子化を記述するために使われます。この理論では、空間が連続的ではなく、離散的なスピンネットワークによって構成されていると考えられます。スピンネットワークの時間発展や構造の変化を観察することで、空間の量子化や時間発展をシミュレートすることができます。空間の構造の変化: スピンネットワークを通じて、空間がどのように構成され、進化していくかを観察します。
ブラックホールのエントロピー: スピンネットワークはブラックホールのエントロピーの計算にも使われており、この現象をシミュレーションすることで、スピンネットワークが物理的にどのように影響を与えるかが確認できます。


まとめ

スピンネットワークの動きを確認するために適した現象としては、イジングモデルのようなスピンの相互作用、量子ホール効果によるトポロジー的な変化、量子もつれを通じたエンタングルメント、そしてループ量子重力における空間の量子化が挙げられます。これらの現象は、スピンネットワークがどのように進化し、物理的な結果を生み出すかを視覚的に捉えるのに非常に適しています。

イジングモデルのシミュレーションをやってみて

こちらが、イジングモデルのシミュレーション結果です。20x20のスピン格子が示されており、赤と青の色でスピンが+1と-1を表しています。この結果は、温度2.0の条件で10,000ステップにわたってシミュレーションされたものです。

温度が高いほど、スピンの向きがランダムになりやすく、温度が低い場合はスピンが同じ方向に揃う傾向が強くなります。温度やシミュレーションステップ数を変えて、異なる結果を試すこともできます。 ​

さっきのスピンネットワークのシミュレータでイジングモデルを作って

それでは、先ほどのスピンネットワークのシミュレータに基づいて、イジングモデルのシミュレーションを作成します。ここでは、ノードがスピンを持ち、エッジで繋がれたノード同士が相互作用するシンプルなイジングモデルをスピンネットワーク上で動かす例を示します。

import networkx as nx
import matplotlib.pyplot as plt
import random
import numpy as np

# スピンネットワーククラスの定義(イジングモデル版)
class SpinNetworkIsingModel:
    def __init__(self, num_nodes, temperature):
        self.graph = nx.Graph()
        self.num_nodes = num_nodes
        self.temperature = temperature
        self._create_nodes()
        self._create_edges()

    # ノードの作成(スピンの初期化)
    def _create_nodes(self):
        for i in range(self.num_nodes):
            self.graph.add_node(i, spin=random.choice([-1, 1]))  # 各ノードにスピンを割り当てる(-1か1)

    # エッジの作成
    def _create_edges(self):
        for i in range(self.num_nodes):
            for j in range(i + 1, self.num_nodes):
                if random.random() > 0.5:  # ランダムにエッジを作成
                    self.graph.add_edge(i, j)

    # 隣接スピンと相互作用してエネルギー差を計算
    def _calculate_energy(self, node):
        spin_sum = 0
        for neighbor in self.graph.neighbors(node):
            spin_sum += self.graph.nodes[neighbor]['spin']
        return -self.graph.nodes[node]['spin'] * spin_sum

    # メトロポリスステップ
    def _metropolis_step(self):
        node = random.choice(list(self.graph.nodes))  # ランダムにノードを選択

        # スピンを反転させたときのエネルギー差を計算
        delta_E = 2 * self._calculate_energy(node)

        # エネルギーが低下する場合、または一定確率でスピンを反転
        if delta_E < 0 or random.random() < np.exp(-delta_E / self.temperature):
            self.graph.nodes[node]['spin'] = -self.graph.nodes[node]['spin']

    # シミュレーション
    def simulate(self, steps):
        for step in range(steps):
            self._metropolis_step()

    # ネットワークの描画
    def draw_network(self):
        pos = nx.spring_layout(self.graph)
        node_colors = ['red' if self.graph.nodes[node]['spin'] == 1 else 'blue' for node in self.graph.nodes]

        nx.draw(self.graph, pos, with_labels=True, node_color=node_colors, node_size=700, font_color='white')
        plt.show()

# スピンネットワークの作成とシミュレーション
num_nodes = 10  # ノード数
temperature = 2.0  # 温度
steps = 10000  # シミュレーションステップ数

spin_network = SpinNetworkIsingModel(num_nodes, temperature)

# 初期状態のスピンネットワークの描画
print("初期状態")
spin_network.draw_network()

# シミュレーションの実行
spin_network.simulate(steps)

# シミュレーション後のスピンネットワークの描画
print("シミュレーション後")
spin_network.draw_network()

説明ノード(スピン): 各ノードには-1または1のスピンがランダムに割り当てられます。
エッジ: ランダムにノード同士をエッジで接続します。ノード同士のエッジが相互作用を示します。
メトロポリスアルゴリズム: 各ステップで、ランダムに選ばれたノードのスピンが隣接ノードと相互作用し、スピン反転がエネルギー的に有利かどうかを評価します。反転するかどうかはメトロポリス法で決定されます。
描画: スピンが1のノードは赤、-1のノードは青で表示されます。


実行の流れ初期状態のスピンネットワークを描画します。
メトロポリスアルゴリズムを用いてスピンの相互作用をシミュレートします(10,000ステップ)。
シミュレーション後のスピンネットワークを描画します。


スピンの配置やネットワークの構造がどのように進化するかを視覚的に確認することができます。

実行しろ

こちらがスピンネットワークに基づいたイジングモデルのシミュレーション結果です。最初に初期状態が表示され、その後、10,000ステップのシミュレーションを経た後の状態が描かれています。ノードのスピンが相互作用を通じてどのように変化しているかが視覚的に確認できます。

ノードが赤い場合はスピンが+1、青い場合はスピンが-1を示しています。シミュレーションを通して、スピンがどのようにネットワーク全体で影響し合い、組織化されていく様子が観察できます

なるほどわからん。

同じようにエンタングルメントもシミュレーションしてみて

エンタングルメント(量子もつれ)をシミュレーションすることは、イジングモデルとは異なる量子力学的な概念を扱います。エンタングルメントでは、2つ以上の量子ビット(またはスピン)の状態が強く相関しており、片方の状態が決まると他方の状態も連動して決まるという性質を持ちます。

これをスピンネットワークでシミュレーションするために、基本的な量子ビットのエンタングルメントを実装し、ネットワークの隣接ノードがエンタングルしている様子をシミュレートするモデルを作ります。エンタングルメントは量子力学的な現象ですが、今回はスピンネットワークの隣接ノード同士を「擬似的なエンタングルメント」として相関させる方法でシミュレーションを行います。

この方法では、2つのノードをエンタングルメント状態とし、片方のノードのスピンが変化した場合、自動的にもう片方のノードのスピンも連動して変化するようにします。

import matplotlib
matplotlib.use('TkAgg')  # または 'Qt5Agg' など
import networkx as nx
import matplotlib.pyplot as plt
import random

# スピンネットワーククラスの定義(擬似エンタングルメント版)
class SpinNetworkEntanglementSim:
    def __init__(self, num_nodes):
        self.graph = nx.Graph()
        self.num_nodes = num_nodes
        self._create_nodes()
        self._create_edges()

    # ノードの作成
    def _create_nodes(self):
        for i in range(self.num_nodes):
            self.graph.add_node(i, spin=random.choice([-1, 1]))  # 各ノードにスピンを割り当てる(-1か1)

    # エッジの作成
    def _create_edges(self):
        for i in range(self.num_nodes):
            for j in range(i + 1, self.num_nodes):
                if random.random() > 0.5:  # ランダムにエッジを作成
                    self.graph.add_edge(i, j, entangled=False)  # エンタングルメント状態かどうかのフラグ

    # エンタングルメントを作成してエッジに反映
    def entangle(self, node1, node2):
        # ノード間にエッジがない場合はエッジを追加
        if not self.graph.has_edge(node1, node2):
            self.graph.add_edge(node1, node2, entangled=False)
        
        # ノードがエンタングル状態としてマークされる
        self.graph.edges[node1, node2]['entangled'] = True
        print(f"Nodes {node1} and {node2} are now entangled.")

    # エンタングルメント状態のスピンが連動して変化する
    def update_entangled_spins(self, node1, node2):
        if self.graph.edges[node1, node2].get('entangled'):
            self.graph.nodes[node2]['spin'] = self.graph.nodes[node1]['spin']
            print(f"Node {node2} spin is updated to match Node {node1}'s spin: {self.graph.nodes[node1]['spin']}")

    # シミュレーション:指定したノードのスピンを変更し、エンタングルされたノードのスピンも更新
    def change_spin(self, node):
        self.graph.nodes[node]['spin'] = -self.graph.nodes[node]['spin']  # スピンを反転
        for neighbor in self.graph.neighbors(node):
            self.update_entangled_spins(node, neighbor)

    # エンタングルメントを含むネットワークの描画
    def draw_network(self):
        pos = nx.spring_layout(self.graph)
        node_colors = ['red' if self.graph.nodes[node]['spin'] == 1 else 'blue' for node in self.graph.nodes]
        edge_colors = ['green' if self.graph.edges[edge].get('entangled') else 'black' for edge in self.graph.edges]

        nx.draw(self.graph, pos, with_labels=True, node_color=node_colors, edge_color=edge_colors, node_size=700, font_color='white')
        plt.show()

# スピンネットワークの作成と擬似エンタングルメントシミュレーション
num_nodes = 6  # ノード数
spin_network = SpinNetworkEntanglementSim(num_nodes)

# 初期状態のスピンネットワークの描画
print("初期状態")
spin_network.draw_network()

# 任意の2ノードをエンタングルさせる
spin_network.entangle(0, 1)
spin_network.entangle(2, 3)

# ノードのスピンを変更(エンタングルされたノードも連動して変化)
spin_network.change_spin(0)
spin_network.change_spin(2)

# エンタングルメント後のスピンネットワークの描画
print("エンタングルメント後")
spin_network.draw_network()


実装の説明擬似エンタングルメント:
エンタングルメントとしてマークされたノードペア(エッジ)は、片方のスピンが変わるともう片方のスピンも連動して変化します。
エッジがエンタングルメント状態になると、緑色で表示されます。
スピンの変更と連動:
change_spin関数を呼び出すと、指定したノードのスピンが反転し、そのノードとエンタングルしているノードのスピンも同じように反転します。
エンタングルメントの可視化:
ノードのスピンが+1の場合は赤、-1の場合は青で表示されます。エンタングルメントがあるエッジは緑色、それ以外のエッジは黒で表示されます。


実行の流れ初期状態のスピンネットワークを描画します。
任意の2つのノードをエンタングルメント状態に設定します。
ノードのスピンを変更すると、エンタングルメントされた隣接ノードのスピンも連動して変化します。
エンタングルメント後のスピンネットワークを描画します。


これにより、擬似エンタングルメントの概念を視覚的に確認することができます。


エンタングルメント前


エンタングルメント後

なるほどわからん。
あってるのかどうか、ナンセンスなのかどうかすらわからん。
なかなかわからない話というものはあるものだ。

とりあえずファインマン先生の教科書をもう一度読んでみることにしてこの本を注文した。