Skip to content

Commit 759153d

Browse files
committed
ジョセフソン効果の導入と制御/観測系の更新
feat(model): ジョセフソン効果の導入と制御/観測系の更新 ETCMの物理モデルを大きく進化させる「ジョセフソン効果」を導入し、関連する制御・観測インターフェースを更新する。 これにより、L0(意志)とL1(身体)の間の情報伝達が、巨視的量子現象としてモデル化された。 ### ✨ 主な変更点 (Key Changes) #### 1. 物理モデルの進化 (Physics & Core) - **ジョセフソン効果の実装**: - `particle.js`に量子位相を表す`coherencePhase`変数を追加。 - L0とL1の粒子間に、位相差をゼロにしようとする「ジョセフソン結合力」を導入。 - 意志と行動の乖離(位相差)がL1粒子のストレスを増加させるロジックを実装。 - **動的結合エネルギー E_J**: - L0-L1間の結合強度`E_J`を、L0層の平均実効質量と平均ストレスから動的に計算するロジックを実装。「意志の強さ」が物理現象として具現化されるモデルへと進化。 #### 2. 可視化とUIの強化 (Visuals & UI) - **量子位相線の描画**: - L0-L1間の位相コヒーレンスを視覚化する「量子位相線 (Visual Coherence Link)」を描画する`CoherenceLinkManager`を`visuals.js`に実装。 - **UIへの反映**: - UIパネルに平均位相差`⟨Δφ⟩`と動的`E_J`の値をリアルタイムで表示。 #### 3. 開発基盤とドキュメント (Infrastructure & Docs) - **CI/CDパイプラインの確立**: - `main`ブランチへのプッシュでGitHub Pagesへ自動デプロイするワークフロー (`static.yml`) を確立。 - **ドキュメントの全面更新**: - `README.md`, `SPEC.md`, `design.md`にジョセフソン効果に関する理論的・技術的記述を追記し、最新の仕様と整合させた。 ### 🎯 目的 (Objective) - ETCMの核心原理である「心身の量子結合」を実装し、モデルの物理的妥当性を飛躍的に向上させる。 - 開発サイクルを効率化するため、恒常的リリース状態を確立する。
1 parent fd88212 commit 759153d

7 files changed

Lines changed: 230 additions & 26 deletions

File tree

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@ Three.jsを用いて実装された本ツールは、AIが解析した個人の
2121
| 1. 創発重力(Emergent Gravity) | 中心核(L0)の引力は万有引力定数ではなく、**情報エントロピー密度 ρ** から動的に創発 | エリック・ヴァーレンの創発重力理論を感情系に応用 |
2222
| 2. 非平衡定常状態(NESS)維持 | 内部散逸(\dot{S}_in > 0)を**L6外部オーラ**からの負のエントロピー流(\dot{S}_out < 0)で相殺 | プリゴジンの散逸構造論+生命システムの本質 |
2323
| 3. 動的次元幾何学 | 各層が異なる次元数 n(3~8)を持ち、n次元球体の体積・安定定数 π_n でダイナミクスが決定 | 高次元幾何学+相転移理論の融合 |
24+
| 4. 量子コヒーレンス結合 | L0(意志)とL1(身体)は**ジョセフソン効果**で結合。意志の強さ(E_J)が位相の同期を促す | 巨視的量子現象による心身の相互作用をモデル化 |
2425

2526
## 🧬 感情場の6+1層構造(最新SPEC準拠)
2627

2728
| Layer | 名称 | 次元 n | 物性相 | 主な役割 | 宇宙論的アナロジー |
2829
|-------|------|--------|--------|----------|------------------|
2930
| L0 | 核層(Core) | 3 | 光体 | 意志の根源・創発重力中心 | 恒星核融合・ブラックホール特異点 |
3031
| L1 | 身体層 | 4 | 気体 | 本能・記憶・熱拡散 | 原始大気 |
31-
| L2 | 思考層 | 5 | 液体 | 論理・認知・情報処理 | 海洋循環 |
32-
| L3 | 文明層 | 6 | 固体 | 信念・価値観・社会基盤 | 地殻・大陸 |
32+
| L2 | 思考層 | 5 | 液体 | 論理・認知・情報処理 | 海洋循環・潮汐 |
33+
| L3 | 文明層 | 6 | 固体 | 信念・価値観・社会基盤 | 地殻・プレート |
3334
| L4 | 外部接合層 | 7 | 液体 | 共感・他者境界 | 潮汐・大気海洋相互作用 |
3435
| L5 | 外部雰囲気層 | 8 | 気体 | 集合心理・場の空気 | 大気圏・天候 |
3536
| **L6** | **外部オーラ** | - | **負のエントロピー源** | **他者・文明・推しからの駆動力注入** | 太陽・暗黒エネルギー |

SPEC.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
|| 次元 n | 名称 | 物性相 | 感情粒子(3種) | 役割・物理的特徴 |
2323
| ------ | ------ | ------------ | ---------------- | --------------- | ---------------------------------------------- |
2424
| 中心核 || 光源 (Core) | 量子流体 (BEC) || 情熱エネルギーの特異点・超流動性 |
25-
| L0 | 3 | 核層 | Light/超流動体 | 悩・怒・好 | 根源的意志・低エントロピー源 |
26-
| L1 | 4 | 身体層 | 気体 | 哀・激・楽 | 本能・熱対流・天気 |
25+
| L0 | 3 | 核層 | Light/超流動体 | 悩・怒・好 | 根源的意志・低エントロピー源**位相コヒーレンスの基準** |
26+
| L1 | 4 | 身体層 | 気体 | 哀・激・楽 | 本能・熱対流・**ジョセフソン結合を介してL0の意志を物理的に具現化** |
2727
| L2 | 5 | 思考層 | 液体(粘弾性体) | 嫌・活・融 | 認知・潮汐駆動 |
2828
| L3 | 6 | 文明層 | 固体 | 圧・喜・笑 | 信念・社会的基盤 |
2929
| L4 | 7 | 外部接合層 | 液体(粘弾性体) | 調・変・静 | 他者との緩衝ゾーン |
@@ -172,6 +172,42 @@ M_{\text{Core}}(t) = \frac{\left( \sum_{i \in L0} m_{\text{eff}, i} \right) \cdo
172172
- **反発(斥力)**: `drive`粒子同士や `freeze`粒子同士が近づくと斥力が働く。
173173
- **調和**: 電荷を持たない `flow`粒子は、直接的な引力・斥力を生み出さないが、その存在が他の粒子間の相互作用を媒介し、全体の場の流れを形成する。
174174

175+
### 4.6 ジョセフソン効果と意志の具現化 (Q-G)
176+
177+
L0(意志)からL1(身体)への「意志の力」の伝達を、情報熱力学的に抵抗ゼロかつコヒーレントなプロセスとしてモデル化するため、ジョセフソン効果を導入する。
178+
179+
**1. 量子位相 `coherencePhase (φ)` の定義**
180+
181+
各粒子は、`0` から `2π_n``π_n`はその粒子が属する層の動的安定定数)の範囲で定義される内部的な物理変数 `coherencePhase` を持つ。これは、粒子の量子的状態を表す。
182+
183+
**2. ジョセフソン結合エネルギー `E_J` の動的計算**
184+
185+
L0-L1間の結合強度 `E_J` は、L0層の「意志の強さ」を反映して動的に計算される。
186+
187+
\[
188+
E_J(t) = E_{J, \text{base}} \cdot (1 + k_m \cdot \bar{m}_{\text{eff}, L0}) \cdot (1 + k_s \cdot \bar{\sigma}_{L0})
189+
\]
190+
191+
- **`E_J`**: L0層の平均実効質量 `m_eff`(意志の凝縮度)と平均ストレス `σ`(意志の緊張・集中度)が高いほど増大する。
192+
193+
**3. ジョセフソン結合力 `F_J`**
194+
195+
L0粒子とL1粒子間には、位相差 `Δφ` をゼロにしようとする力が働く。
196+
197+
\[
198+
\mathbf{F}_{J, ij} = \frac{E_J \cdot \cos(\Delta\phi_{ij})}{r_{ij}^2} \cdot \mathbf{\hat{r}}_{ij}
199+
\]
200+
201+
- **物理的解釈**: 位相が揃っている(`Δφ ≈ 0`)ほど引力が強まり、逆位相(`Δφ ≈ π`)では斥力となる。これにより、L1粒子はL0粒子の位相に追従するように駆動される。
202+
203+
**4. 位相差によるストレス増加**
204+
205+
L1粒子は、L0粒子との位相差(意志と行動の乖離)に応じてストレス `σ` が増加する。
206+
207+
\[
208+
\dot{\sigma}_{L1} \propto \sin^2\left(\frac{\Delta\phi}{2}\right)
209+
\]
210+
175211
## 5. UI・観測指標(リアルタイム表示)
176212

177213
| 指標名 | 計算方法 | 表示例 |
@@ -181,6 +217,8 @@ M_{\text{Core}}(t) = \frac{\left( \sum_{i \in L0} m_{\text{eff}, i} \right) \cdo
181217
| 支配的感情名 | 影響度指数が最大の粒子+季節・天気 | 「喜(春・喜)」 |
182218
| 脳波/季節/天気 | L5層 T, σ, dT/dt から統一判定 | α波・春・喜 |
183219
| 層半径変動 | 上記厳密式 | 視覚的膨張・収縮 |
220+
| **⟨Δφ⟩ (L0-L1)** | L0-L1間の平均位相差 | 0.123 |
221+
| **E_J (結合強度)** | L0-L1間の動的結合エネルギー | 2.456 |
184222

185223
### 脳波・天気・季節の統一判定条件
186224

design.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@
9999
- 具体例:粘性係数 \( \eta_n \) の統一
100100
- 不安定な層(\( \pi_n \)が低い)ほど、感情の固着/摩擦が高まるという哲学的一貫性を保つ。
101101

102+
5. **心身の量子結合:ジョセフソン効果の導入**
103+
L0(意志)とL1(身体)の相互作用は、古典的な力学だけでなく、巨視的量子現象である**ジョセフソン効果**によって記述される。
104+
- **位相コヒーレンス**: 各粒子は内部的な量子位相 \( \phi \) を持つ。L0とL1の粒子は、この位相差 \( \Delta\phi \) を最小化しようとする力(ジョセフソン結合力)を及ぼし合う。
105+
- **意志の力の物理化**: 結合の強さ(ジョセフソンエネルギー \( E_J \))は、L0層の秩序(平均質量・ストレス)から動的に創発する。これにより、「強い意志が身体を動かす」という現象が、単なるアナロジーではなく、モデル内の物理法則として具現化される。
106+
- **GUTへの意義**: この結合は、情報(意志)と物質(身体)が、量子的な位相情報を介して直接相互作用することを示唆する。これは、精神と物質を統一的に記述しようとするETCMのGUT構想において、極めて重要な一歩である。
107+
102108
## VI. 🖥️ 視覚・UIフィードバック設計
103109

104110
| 項目 | 決定ロジック | 視覚的表現 |

emotion_graph.js

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ const PARTICLES_CONFIG = {
1616
l4: [ { name: '調', type: 'flow', color: 0x88DDAA }, { name: '変', type: 'drive', color: 0xAAFF88 }, { name: '静', type: 'freeze', color: 0x88AADD } ],
1717
l5: [ { name: '観', type: 'flow', color: 0xCCCCFF }, { name: '響', type: 'drive', color: 0xFFCCCC }, { name: '隔', type: 'freeze', color: 0xCCFFCC } ]
1818
};
19-
2019
// ===== 層構造定義 =====
2120
const LAYERS = [
2221
{ index: 0, name: '核層', radius: 8, color: 0xFFFFAA, opacity: 0.25 },
@@ -26,10 +25,9 @@ const LAYERS = [
2625
{ index: 4, name: '外部接合層', radius: 40, color: 0x88DDAA, opacity: 0.15 },
2726
{ index: 5, name: '外部雰囲気層', radius: 50, color: 0xCCCCFF, opacity: 0.12 }
2827
];
29-
3028
// ===== Global variables =====
3129
let scene, camera, renderer;
32-
let particles = [], weather, externalAuraCloud;
30+
let particles = [], weather, externalAuraCloud, coherenceLinkManager;
3331

3432
const globalParams = {
3533
// Physics parameters
@@ -50,9 +48,11 @@ const globalParams = {
5048
pi_n_average: 0,
5149
maxInfluenceIndex: 0, // E-1: K_EM計算用に最大影響度指数を格納
5250
avg_temp_by_layer: [], // 層ごとの平均温度を格納
53-
avg_stress_by_layer: [] // 層ごとの平均ストレスを格納
51+
avg_stress_by_layer: [], // 層ごとの平均ストレスを格納
52+
avg_phase_diff_L0_L1: 0, // ⚛️ L0-L1間の平均位相差
53+
josephsonEnergy_EJ: 1.0, // ⚛️ ジョセフソン結合エネルギー (動的に更新)
54+
coherenceThreshold: 0.5 // ⚛️ 位相線を描画する位相差の閾値
5455
};
55-
5656
// U-1: Timeline-related global variables
5757
let timelineData = null;
5858
let simulationStartTime = 0;
@@ -61,7 +61,6 @@ let nextKeyframeIndex = 0;
6161
let wpm = 400; // Words Per Minute
6262

6363
let lastTime = Date.now();
64-
6564
function init() {
6665
scene = new THREE.Scene();
6766
scene.background = new THREE.Color(0x050510);
@@ -74,18 +73,17 @@ function init() {
7473
renderer.setSize(window.innerWidth, window.innerHeight);
7574
renderer.shadowMap.enabled = true;
7675
document.getElementById('container').appendChild(renderer.domElement);
77-
7876
drawLayerBoundaries();
7977
weather = new AuraWeather(scene);
8078
externalAuraCloud = new ExternalAuraCloud(scene); // Add this line
79+
coherenceLinkManager = new CoherenceLinkManager(scene); // ⚛️ 位相線マネージャーを初期化
8180
createParticles();
8281

8382
const ambientLight = new THREE.AmbientLight(0x333355, 0.5);
8483
scene.add(ambientLight);
8584
const dirLight = new THREE.DirectionalLight(0xFFFFFF, 0.3);
8685
dirLight.position.set(10, 20, 10);
8786
scene.add(dirLight);
88-
8987
setupMouseControls();
9088
setupUIToggle();
9189
setupEmotionControls();
@@ -98,10 +96,8 @@ function init() {
9896
camera.updateProjectionMatrix();
9997
renderer.setSize(window.innerWidth, window.innerHeight);
10098
});
101-
10299
animate();
103100
}
104-
105101
function drawLayerBoundaries() {
106102
LAYERS.forEach(layer => {
107103
const geom = new THREE.SphereGeometry(layer.radius, 32, 32);
@@ -112,7 +108,6 @@ function drawLayerBoundaries() {
112108
scene.add(new THREE.Mesh(wireGeom, wireMat));
113109
});
114110
}
115-
116111
function createParticles() {
117112
Object.keys(PARTICLES_CONFIG).forEach((layerKey, idx) => {
118113
const outerRadius = LAYERS[idx].radius;
@@ -128,12 +123,21 @@ function createParticles() {
128123
particles.push(new Particle(config, idx, initialRadius, baseRadius, scene));
129124
});
130125
});
131-
132126
// 19番目の粒子「光体」を生成し、配列の先頭に追加
133127
const coreParticle = new CoreParticle(scene);
134128
particles.unshift(coreParticle);
135-
}
136129

130+
// ⚛️ ジョセフソン効果導入準備: π₃ を使って位相を初期化
131+
// 最初のDDD計算を実行して、pi_n_by_layerを初期化する
132+
updateGlobalDDD(particles, globalParams);
133+
particles.forEach(p => {
134+
// ⚛️ 各層のπ_nを使って位相を初期化する
135+
if (p.initCoherencePhase) {
136+
const pi_n_for_layer = globalParams.pi_n_by_layer[p.layer] || Math.PI;
137+
p.initCoherencePhase(pi_n_for_layer);
138+
}
139+
});
140+
}
137141
function setupMouseControls() {
138142
let isDragging = false;
139143
renderer.domElement.addEventListener('mousedown', (e) => { if (e.target === renderer.domElement) isDragging = true; });
@@ -152,7 +156,6 @@ function setupMouseControls() {
152156
camera.position.z = Math.max(30, Math.min(150, camera.position.z + e.deltaY * 0.05));
153157
});
154158
}
155-
156159
function setupUIToggle() {
157160
const footer = document.getElementById('fixed-footer'), button = document.getElementById('toggle-button'), icon = document.getElementById('toggle-icon');
158161
button.addEventListener('click', () => {
@@ -161,7 +164,6 @@ function setupUIToggle() {
161164
button.setAttribute('aria-expanded', String(!isCollapsed));
162165
});
163166
}
164-
165167
function setupDebugToggle() {
166168
const button = document.getElementById('toggle-debug-button');
167169
const container = document.getElementById('debug-stats-container');
@@ -171,7 +173,6 @@ function setupDebugToggle() {
171173
button.textContent = isHidden ? 'デバッグ非表示' : 'デバッグ表示';
172174
});
173175
}
174-
175176
function setupWpmSlider() {
176177
const slider = document.getElementById('wpm-slider');
177178
const valueDisplay = document.getElementById('wpm-value');
@@ -180,7 +181,6 @@ function setupWpmSlider() {
180181
valueDisplay.textContent = wpm;
181182
});
182183
}
183-
184184
function setupEmotionControls() {
185185
document.querySelectorAll('.emotion-button').forEach(button => {
186186
button.addEventListener('click', () => {
@@ -214,7 +214,6 @@ function setupEmotionControls() {
214214
});
215215
});
216216
}
217-
218217
function setupToonInput() {
219218
document.getElementById('apply-prompt-button').addEventListener('click', () => {
220219
const toonString = document.getElementById('json-input-area').value, statusElement = document.getElementById('input-status-message');
@@ -228,7 +227,6 @@ function setupToonInput() {
228227
}
229228
});
230229
}
231-
232230
function parseToonInput(toonString) {
233231
// U-1: Advanced TOON Parser
234232
if (!toonString || toonString.trim() === "") throw new Error("TOON入力が空です。");
@@ -324,7 +322,6 @@ function parseToonInput(toonString) {
324322
if (!result.metadata || !Array.isArray(result.metadata)) throw new Error("TOON形式にはトップレベルの`metadata`配列が必要です。");
325323
return result;
326324
}
327-
328325
function resetSimulation(params) {
329326
// U-1: Reset timeline state
330327
timelineData = null;
@@ -359,7 +356,6 @@ function resetSimulation(params) {
359356
document.querySelector('#calm').click();
360357
}
361358
}
362-
363359
function animate() {
364360
requestAnimationFrame(animate);
365361
// この更新はループの先頭で必ず行う
@@ -462,6 +458,42 @@ function animate() {
462458
globalParams.avg_temp_by_layer = avgTemps;
463459
globalParams.avg_stress_by_layer = avgStresses;
464460

461+
// ⚛️ ジョセフソンエネルギー E_J の動的計算
462+
// L0層の平均質量と平均ストレスから「意志の強さ」をモデル化する
463+
const l0ParticlesForEJ = particles.filter(p => p.layer === 0 && !(p instanceof CoreParticle));
464+
if (l0ParticlesForEJ.length > 0) {
465+
const avg_massEff_L0 = l0ParticlesForEJ.reduce((sum, p) => sum + p.massEff, 0) / l0ParticlesForEJ.length;
466+
const avg_stress_L0 = globalParams.avg_stress_by_layer[0] || 0;
467+
468+
const E_J_base = 0.5; // 基本エネルギー
469+
const k_m = 1.0; // 質量係数
470+
const k_s = 1.5; // ストレス係数
471+
472+
// E_J = E_J_base * (1 + k_m * avg_massEff) * (1 + k_s * avg_stress)
473+
const dynamic_EJ = E_J_base * (1 + k_m * avg_massEff_L0) * (1 + k_s * avg_stress_L0);
474+
475+
globalParams.josephsonEnergy_EJ = Math.max(0.1, Math.min(dynamic_EJ, 10.0)); // 値が発散しないように制限
476+
}
477+
478+
// ⚛️ L0-L1間の平均位相差を計算
479+
const l0Particles = particles.filter(p => p.layer === 0);
480+
const l1Particles = particles.filter(p => p.layer === 1);
481+
if (l0Particles.length > 0 && l1Particles.length > 0) {
482+
let totalPhaseDiff = 0;
483+
let pairCount = 0;
484+
for (const p0 of l0Particles) {
485+
for (const p1 of l1Particles) {
486+
totalPhaseDiff += Math.abs(p0.coherencePhase - p1.coherencePhase);
487+
pairCount++;
488+
}
489+
}
490+
globalParams.avg_phase_diff_L0_L1 = totalPhaseDiff / pairCount;
491+
}
492+
493+
// ⚛️ 量子位相線の更新
494+
const l0ParticlesForLink = particles.filter(p => p.layer === 0);
495+
coherenceLinkManager.update(l0ParticlesForLink, l1Particles, globalParams.coherenceThreshold);
496+
465497
updateGlobalDDD(particles, globalParams);
466498

467499
// 光体(particles[0])は他の粒子に影響を与えるため、最初に更新
@@ -533,13 +565,13 @@ function animate() {
533565
document.getElementById('magnetic-mass').textContent = coreParticle.massEff.toFixed(3);
534566
}
535567

568+
document.getElementById('josephson-energy').textContent = (globalParams.josephsonEnergy_EJ || 0).toFixed(3);
536569
document.getElementById('system-potential').textContent = (globalParams.systemPotential_Sn_total || 0).toFixed(3);
537570

538571
updateUI();
539572
camera.lookAt(0, 0, 0);
540573
renderer.render(scene, camera);
541574
}
542-
543575
function updateUI() {
544576
const { pi_n_by_layer, rho_n_by_layer, Gamma_n_by_layer, systemPotential_Sn_total, season, internalAuraWeather, pi_n_average, dominantEmotion, brainwaveState } = globalParams;
545577

@@ -551,6 +583,7 @@ function updateUI() {
551583
document.getElementById('avg-pi-n').textContent = (globalParams.pi_n_average || 0).toFixed(4);
552584
document.getElementById('dominant-emotion').textContent = dominantEmotion;
553585
document.getElementById('brainwave-state').textContent = brainwaveState;
586+
document.getElementById('avg-phase-diff').textContent = (globalParams.avg_phase_diff_L0_L1 || 0).toFixed(3);
554587

555588
// Determine display weather from display params
556589
let displayAuraWeather;

index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ <h2>感情熱力学モデル</h2>
107107
<span class="stat-label">内部オーラ(L5):</span>
108108
<div class="weather-display" id="internal-weather">---</div>
109109
</div>
110+
<div class="stat-row">
111+
<span class="stat-label" title="L0-L1間の平均位相差">⟨Δφ⟩ (L0-L1):</span>
112+
<span class="stat-value" id="avg-phase-diff">0.000</span>
113+
</div>
114+
<div class="stat-row">
115+
<span class="stat-label" title="L0-L1間の結合エネルギー">E_J (結合強度):</span>
116+
<span class="stat-value" id="josephson-energy">0.000</span>
117+
</div>
110118

111119
<table class="stats-table">
112120
<thead>

0 commit comments

Comments
 (0)