Block universe v2
import numpy as np
# =========================================================
# GLOBAL CONSTANTS
# =========================================================
c = 1.0
kappa = 1.0
dtau = 0.01
WINDOW = 20
# =========================================================
# 0) HARDWARE LAYER — BLOCK UNIVERSE
# (𝓜, g, Φ)
# =========================================================
# -----------------------------
# Metric (Lorentzian)
# -----------------------------
class Metric:
"""
Minkowski metric (signature -,+)
"""
def interval(self, p, q):
dt = q.t - p.t
dx = q.x - p.x
return -dt**2 + dx**2
def proper_time_step(self, velocity):
return np.sqrt(max(1 - velocity**2, 0)) * dtau
# -----------------------------
# Event Structure
# -----------------------------
class Event:
def __init__(self, t, x):
self.t = t
self.x = x
# -----------------------------
# Spacetime Manifold Patch
# -----------------------------
class Manifold:
def __init__(self, t_range=(0, 20), x_range=(-10, 10), dt=0.01, dx=0.05):
self.dt = dt
self.dx = dx
self.t_vals = np.arange(t_range[0], t_range[1], dt)
self.x_vals = np.arange(x_range[0], x_range[1], dx)
# -----------------------------
# Scalar Field Φ (Environment)
# -----------------------------
class ScalarField:
def __init__(self, manifold):
self.manifold = manifold
self.values = np.zeros(
(len(manifold.t_vals), len(manifold.x_vals))
)
def evolve(self, noise_scale=0.002):
self.values += np.random.normal(
0, noise_scale, self.values.shape
)
def sample(self, t_index, x_index):
return self.values[t_index, x_index]
# -----------------------------
# Timelike Worldline
# -----------------------------
class Worldline:
def __init__(self, t0=0.0, x0=0.0):
self.t = t0
self.x = x0
self.events = []
self.events.append(Event(self.t, self.x))
def step(self, velocity, metric):
dt = dtau
dx = velocity * dt
self.t += dt
self.x += dx
event = Event(self.t, self.x)
self.events.append(event)
d_tau = metric.proper_time_step(velocity)
return event, d_tau
# -----------------------------
# Causal Order
# -----------------------------
def causally_precedes(p, q, metric):
ds2 = metric.interval(p, q)
return (q.t > p.t) and (ds2 <= 0)
# =========================================================
# 2) GUI SENSOR LAYER (Coarse-Graining)
# =========================================================
def sensory_map(state):
noise = np.random.normal(0, 0.05)
return state + noise
# =========================================================
# 3) NOW BUFFER (Integration Kernel)
# =========================================================
def now_window(observations):
if len(observations) < WINDOW:
return np.mean(observations)
return np.mean(observations[-WINDOW:])
# =========================================================
# 5) ENTROPY PRODUCTION PROXY
# =========================================================
def entropy_rate(old_belief, new_belief):
eps = 1e-9
p = np.clip(old_belief, eps, 1)
q = np.clip(new_belief, eps, 1)
return np.sum(p * np.log(p / q))
# =========================================================
# 6) MEMORY SYSTEM
# =========================================================
class Memory:
def __init__(self):
self.past = []
self.belief = np.array([0.5, 0.5])
def update(self, observation):
likelihood = np.array([1 - observation, observation])
new_belief = self.belief * likelihood
new_belief /= np.sum(new_belief)
sigma = entropy_rate(self.belief, new_belief)
self.belief = new_belief
self.past.append(new_belief.copy())
return sigma
# =========================================================
# 8) GUI TIME INTEGRATOR
# =========================================================
class GUITime:
def __init__(self):
self.t_hat = 0.0
def integrate(self, sigma):
self.t_hat += kappa * sigma
return self.t_hat
# =========================================================
# NARRATIVE RENDERER
# =========================================================
class Narrative:
def __init__(self):
self.timeline = []
self.states = []
self.identity = []
def render(self, t_hat, now_state, belief):
self.timeline.append(t_hat)
self.states.append(now_state)
self.identity.append(belief.copy())
# =========================================================
# INITIALIZATION
# =========================================================
metric = Metric()
manifold = Manifold()
field = ScalarField(manifold)
worldline = Worldline()
memory = Memory()
gui_clock = GUITime()
narrative = Narrative()
observations = []
velocity = 0.6
tau = 0.0
# =========================================================
# SIMULATION LOOP
# =========================================================
for step in range(500):
# -------- HARDWARE UPDATE --------
field.evolve()
event, d_tau = worldline.step(
velocity=velocity,
metric=metric
)
tau += d_tau
# Sample environment field at nearest grid point
t_index = min(int(event.t / manifold.dt), len(manifold.t_vals) - 1)
x_index = min(
int((event.x - manifold.x_vals[0]) / manifold.dx),
len(manifold.x_vals) - 1
)
true_world_state = field.sample(t_index, x_index)
# -------- GUI PIPELINE --------
obs = sensory_map(true_world_state)
observations.append(obs)
now_state = now_window(observations)
sigma = memory.update(np.clip(now_state, 0, 1))
t_hat = gui_clock.integrate(sigma)
narrative.render(t_hat, now_state, memory.belief)
# =========================================================
# OUTPUT SUMMARY
# =========================================================
print("Proper time elapsed (τ):", tau)
print("GUI time elapsed (t̂):", gui_clock.t_hat)
print("Worldline length:", len(worldline.events))
print("Memory depth:", len(memory.past))
print("Final belief state:", memory.belief)
Comments
Post a Comment