Block universe v3
import numpy as np
import time
# =========================================================
# RANDOM SEED (DIFFERENT EVERY RUN)
# =========================================================
np.random.seed(int(time.time()))
# =========================================================
# GLOBAL CONSTANTS
# =========================================================
c = 1.0
kappa = 1.0
dtau = 0.01
WINDOW = 20
# =========================================================
# 0) HARDWARE LAYER — BLOCK UNIVERSE
# (𝓜, g, Φ)
# =========================================================
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
class Event:
def __init__(self, t, x):
self.t = t
self.x = x
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)
class ScalarField:
def __init__(self, manifold):
self.manifold = manifold
self.values = np.zeros((len(manifold.t_vals), len(manifold.x_vals)))
def evolve(self):
# Chaotic + time-dependent evolution
drift = np.sin(time.time()) * 0.001
noise = np.random.normal(0, 0.004, self.values.shape)
self.values += drift + noise
def sample(self, t_index, x_index):
return self.values[t_index, x_index]
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
def causally_precedes(p, q, metric):
ds2 = metric.interval(p, q)
return (q.t > p.t) and (ds2 <= 0)
# =========================================================
# 2) GUI SENSOR LAYER
# =========================================================
def sensory_map(state):
noise = np.random.normal(0, 0.05)
return state + noise
# =========================================================
# 3) NOW BUFFER
# =========================================================
def now_window(observations):
if len(observations) < WINDOW:
return np.mean(observations)
return np.mean(observations[-WINDOW:])
# =========================================================
# 5) ENTROPY PRODUCTION
# =========================================================
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 (UPGRADED)
# =========================================================
class Memory:
def __init__(self):
self.past = []
# Randomized initial belief
b = np.random.rand()
self.belief = np.array([b, 1 - b])
def update(self, observation):
likelihood = np.array([1 - observation, observation])
new_belief = self.belief * likelihood
# Cognitive noise (prevents belief lock)
jitter = np.random.normal(0, 0.01, size=2)
new_belief = new_belief + jitter
new_belief = np.clip(new_belief, 1e-6, None)
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 (LIVE OUTPUT ENABLED)
# =========================================================
STEPS = 500
print("\n>>> Booting Block + GUI Time Simulation...\n")
for step in range(STEPS):
# -------- HARDWARE UPDATE --------
field.evolve()
event, d_tau = worldline.step(
velocity=velocity,
metric=metric
)
tau += d_tau
# Sample environment field
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)
# LIVE STEP OUTPUT
print(
f"Step {step:03d} | "
f"τ={tau:.3f} | "
f"t̂={gui_clock.t_hat:.3f} | "
f"Now={now_state:.3f} | "
f"Entropy={sigma:.5f} | "
f"Belief={memory.belief}"
)
# Highlight high entropy events
if sigma > 0.05:
print("🔥 HIGH ENTROPY EVENT")
# =========================================================
# OUTPUT SUMMARY
# =========================================================
print("\n===== SIMULATION COMPLETE =====")
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