mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
## Lean fixes - RRCLogogramProjection.lean: replace `native_decide` → `decide` in 5 compiler-surface theorem witnesses (semantic_tear_projects_after_repair, semantic_tear_does_not_merge, semantic_tear_uses_quarantine_lane, unrepaired_tear_does_not_project, ordinary_logogram_projects_and_merges). All 5 pass under `decide`; no logic change. - PistSimulation.lean: add `-- expect: <value>` to every `#eval`/`#eval!` block across §6–§11 (~104 annotation lines). Document 8 undocumented `ofRawInt` magic integers in fixtureSpectralWindow (10.0, 20.0, 100.0, 40.0, 20.0, 10.0, 5.0, 5.0 × 65536). - DynamicCanal.lean: add `-- expect:` to all 15 #eval witness blocks in §17 (fixed-point constructors, DIAT encoding, coarse-graining tests). - MISignal.lean: add `-- expect: 131072` to both #eval witnesses. - Functions/BracketedCalculus.lean: add `-- expect: 327680` to #eval. - AVMIsa/Emit.lean, RRC/Emit.lean, RRC/ReceiptDensity.lean, ReceiptCore.lean: previously-staged `-- expect:` additions (from prior session) carried forward in this commit. ## Python shim fixes - Add `# PARTIAL BOUNDARY: contains domain logic; not a provable surface. Port to Lean/RRC before treating as authoritative.` to 9 shim files: pist_trace_classify_mcp.py, genus0_sphere_shell_demo.py, routing_benchmark.py, route_repair_v14a.py, pist_prove_and_classify.py, label_canary_theorems.py, validate_rrc_predictions.py, pist_receipt_density_injector.py, rrc_pist_shape_alignment.py. ## Build baseline lake build Compiler → 3311 jobs, 0 errors lake build → 3567 jobs, 0 errors Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
282 lines
9.6 KiB
Python
282 lines
9.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Genus-0 sphere-shell witness demo.
|
|
|
|
This is the visual/geometry sibling of the Route-Repair v1.4 charted repair
|
|
manifold:
|
|
|
|
16D modifier -> 4D contractible chart axis -> 3D embedded witness
|
|
|
|
The point of this file is deliberately modest and testable:
|
|
|
|
1. The 16D modifier lives in R^16, which is contractible.
|
|
2. The 4D chart axis is a probability simplex Delta^4, which is convex.
|
|
3. The 3D patch embedding lives in R^3_+, which is convex.
|
|
4. The rendered shell is a 2-sphere witness, genus 0, with beta_1 = 0.
|
|
|
|
So this demo is NOT the genus-3 residual model. It is the genus-0 base case:
|
|
the control spaces are hole-free, and higher-genus signatures should be reserved
|
|
for residual/stress graphs or non-contractible topology witnesses.
|
|
|
|
The output JSON is a receipt-style summary that can be consumed by docs, tests,
|
|
or later NUVMAP/PIST routing tools.
|
|
"""
|
|
# PARTIAL BOUNDARY: contains domain logic; not a provable surface. Port to Lean/RRC before treating as authoritative.
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
import math
|
|
from dataclasses import asdict, dataclass
|
|
from pathlib import Path
|
|
from typing import Iterable, List, Sequence, Tuple
|
|
|
|
PHI = (1.0 + math.sqrt(5.0)) / 2.0
|
|
TAU = 2.0 * math.pi
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class GenusCertificate:
|
|
"""Topological certificate for the rendered witness surface."""
|
|
|
|
surface: str
|
|
genus: int
|
|
euler_characteristic: int
|
|
beta_0: int
|
|
beta_1: int
|
|
beta_2: int
|
|
note: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProjectionReceipt:
|
|
"""Receipt for one 16D -> 4D -> 3D projection."""
|
|
|
|
seed: str
|
|
modifier_16d: List[float]
|
|
axis_4d_simplex: List[float]
|
|
patch_embed_3d_positive: List[float]
|
|
genus_certificate: GenusCertificate
|
|
contractible_base_spaces: dict
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ShellSample:
|
|
"""One sampled point on the genus-0 shell witness."""
|
|
|
|
point: Tuple[float, float, float]
|
|
normal: Tuple[float, float, float]
|
|
signed_distance: float
|
|
shell_weight: float
|
|
noise: float
|
|
displacement: float
|
|
displaced_point: Tuple[float, float, float]
|
|
|
|
|
|
def stable_unit(seed: str, index: int) -> float:
|
|
"""Deterministic [0, 1) scalar from a seed and index."""
|
|
h = hashlib.sha256(f"{seed}:{index}".encode("utf-8")).digest()
|
|
n = int.from_bytes(h[:8], "big")
|
|
return n / float(1 << 64)
|
|
|
|
|
|
def build_modifier_16d(seed: str) -> List[float]:
|
|
"""Build a deterministic R^16 modifier vector in [-1, 1]."""
|
|
return [round(2.0 * stable_unit(seed, i) - 1.0, 8) for i in range(16)]
|
|
|
|
|
|
def softmax(xs: Sequence[float]) -> List[float]:
|
|
"""Map R^4 to the interior of the 4-simplex-like chart axis."""
|
|
m = max(xs)
|
|
exps = [math.exp(x - m) for x in xs]
|
|
s = sum(exps)
|
|
return [x / s for x in exps]
|
|
|
|
|
|
def project_16d_to_4d_simplex(z16: Sequence[float]) -> List[float]:
|
|
"""Collapse four 4D blocks into a contractible 4D chart axis.
|
|
|
|
The four coordinates can be read as:
|
|
rewrite/equality, flow/implication, branch/constructor, metric/arithmetic
|
|
for proof repair; or field, phase, shell, residual for sphere fields.
|
|
"""
|
|
if len(z16) != 16:
|
|
raise ValueError("modifier must have exactly 16 coordinates")
|
|
blocks = [z16[i : i + 4] for i in range(0, 16, 4)]
|
|
block_scores = [sum(block) / 4.0 for block in blocks]
|
|
return [round(v, 8) for v in softmax(block_scores)]
|
|
|
|
|
|
def project_4d_to_3d_positive(axis4: Sequence[float]) -> List[float]:
|
|
"""Project Delta^4 into R^3_+ as amplitude/frequency/shell-width controls."""
|
|
if len(axis4) != 4:
|
|
raise ValueError("axis must have exactly 4 coordinates")
|
|
# Positive orthant embedding. The final coordinate acts as residual/phase load.
|
|
amplitude = 0.05 + 0.30 * axis4[0] + 0.10 * axis4[3]
|
|
frequency = 1.0 + 7.0 * axis4[1] + 2.0 * axis4[3]
|
|
shell_width = 0.02 + 0.25 * axis4[2] + 0.08 * axis4[3]
|
|
return [round(amplitude, 8), round(frequency, 8), round(shell_width, 8)]
|
|
|
|
|
|
def genus0_certificate() -> GenusCertificate:
|
|
"""Return the genus-0 certificate for S^2."""
|
|
return GenusCertificate(
|
|
surface="S^2 sphere shell",
|
|
genus=0,
|
|
euler_characteristic=2,
|
|
beta_0=1,
|
|
beta_1=0,
|
|
beta_2=1,
|
|
note="Rendered witness is a genus-0 closed orientable surface; control spaces R^16, Delta^4, and R^3_+ are contractible.",
|
|
)
|
|
|
|
|
|
def make_receipt(seed: str) -> ProjectionReceipt:
|
|
z16 = build_modifier_16d(seed)
|
|
axis4 = project_16d_to_4d_simplex(z16)
|
|
embed3 = project_4d_to_3d_positive(axis4)
|
|
return ProjectionReceipt(
|
|
seed=seed,
|
|
modifier_16d=z16,
|
|
axis_4d_simplex=axis4,
|
|
patch_embed_3d_positive=embed3,
|
|
genus_certificate=genus0_certificate(),
|
|
contractible_base_spaces={
|
|
"modifier_16d": "R^16, contractible",
|
|
"axis_4d": "probability simplex, convex/contractible",
|
|
"patch_embed_3d": "R^3_+, convex/contractible",
|
|
},
|
|
)
|
|
|
|
|
|
def sdf_sphere(p: Sequence[float], radius: float = 1.0) -> float:
|
|
return math.sqrt(sum(x * x for x in p)) - radius
|
|
|
|
|
|
def normalize(p: Sequence[float]) -> Tuple[float, float, float]:
|
|
n = math.sqrt(sum(x * x for x in p))
|
|
if n == 0.0:
|
|
return (0.0, 0.0, 1.0)
|
|
return (p[0] / n, p[1] / n, p[2] / n)
|
|
|
|
|
|
def shell_window(distance: float, width: float) -> float:
|
|
if width <= 0:
|
|
return 0.0
|
|
return max(0.0, 1.0 - abs(distance) / width)
|
|
|
|
|
|
def hash_noise3(p: Sequence[float], frequency: float, octave: int, seed: str) -> float:
|
|
"""Cheap deterministic pseudo-noise in [-1, 1].
|
|
|
|
This is not a production gradient-noise implementation. It is intentionally
|
|
dependency-free and receipt-stable for demos/tests.
|
|
"""
|
|
x, y, z = p
|
|
q = (
|
|
math.sin((x * 12.9898 + y * 78.233 + z * 37.719 + octave * PHI) * frequency),
|
|
math.sin((x * 93.989 + y * 67.345 + z * 11.135 + octave * TAU) * frequency),
|
|
math.sin((x * 45.332 + y * 13.775 + z * 91.121 + octave * 1.4142) * frequency),
|
|
)
|
|
seed_shift = stable_unit(seed, 1000 + octave)
|
|
v = math.sin(43758.5453 * (q[0] + 0.7 * q[1] + 0.3 * q[2] + seed_shift))
|
|
return 2.0 * (v - math.floor(v)) - 1.0
|
|
|
|
|
|
def fbm3(p: Sequence[float], frequency: float, seed: str, octaves: int = 5) -> float:
|
|
total = 0.0
|
|
amp = 0.5
|
|
norm = 0.0
|
|
freq = frequency
|
|
for octave in range(octaves):
|
|
total += amp * hash_noise3(p, freq, octave, seed)
|
|
norm += amp
|
|
amp *= 0.5
|
|
freq *= 2.0
|
|
return total / norm if norm else 0.0
|
|
|
|
|
|
def fibonacci_sphere(samples: int) -> Iterable[Tuple[float, float, float]]:
|
|
if samples <= 0:
|
|
return
|
|
golden_angle = math.pi * (3.0 - math.sqrt(5.0))
|
|
for i in range(samples):
|
|
y = 1.0 - (i / float(samples - 1)) * 2.0 if samples > 1 else 0.0
|
|
radius = math.sqrt(max(0.0, 1.0 - y * y))
|
|
theta = golden_angle * i
|
|
x = math.cos(theta) * radius
|
|
z = math.sin(theta) * radius
|
|
yield (x, y, z)
|
|
|
|
|
|
def sample_shell(receipt: ProjectionReceipt, samples: int) -> List[ShellSample]:
|
|
amplitude, frequency, shell_width = receipt.patch_embed_3d_positive
|
|
out: List[ShellSample] = []
|
|
for p in fibonacci_sphere(samples):
|
|
n = normalize(p)
|
|
d = sdf_sphere(p)
|
|
w = shell_window(d, shell_width)
|
|
# Sample through embedded normal and shell phase.
|
|
probe = tuple(p[i] + n[i] * shell_width for i in range(3))
|
|
noise = fbm3(probe, frequency=frequency, seed=receipt.seed)
|
|
disp = amplitude * w * noise
|
|
displaced = tuple(round(p[i] + n[i] * disp, 8) for i in range(3))
|
|
out.append(
|
|
ShellSample(
|
|
point=tuple(round(x, 8) for x in p),
|
|
normal=tuple(round(x, 8) for x in n),
|
|
signed_distance=round(d, 8),
|
|
shell_weight=round(w, 8),
|
|
noise=round(noise, 8),
|
|
displacement=round(disp, 8),
|
|
displaced_point=displaced,
|
|
)
|
|
)
|
|
return out
|
|
|
|
|
|
def build_demo(seed: str, samples: int) -> dict:
|
|
receipt = make_receipt(seed)
|
|
shell_samples = sample_shell(receipt, samples=samples)
|
|
amplitude, frequency, shell_width = receipt.patch_embed_3d_positive
|
|
return {
|
|
"demo": "genus0_sphere_shell",
|
|
"equation": "F(p; z16) = sdf_sphere(p) - A(z16) * W(d(p)) * fBm3(p + n(p) * shell_width)",
|
|
"projection_chain": "R^16 -> Delta^4 -> R^3_+ -> S^2 shell witness",
|
|
"receipt": {
|
|
**asdict(receipt),
|
|
"field_controls": {
|
|
"amplitude": amplitude,
|
|
"frequency": frequency,
|
|
"shell_width": shell_width,
|
|
},
|
|
},
|
|
"sample_count": len(shell_samples),
|
|
"samples": [asdict(s) for s in shell_samples],
|
|
}
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Emit a genus-0 sphere-shell projection witness JSON.")
|
|
parser.add_argument("--seed", default="pist-nuvmap-genus0", help="deterministic seed")
|
|
parser.add_argument("--samples", type=int, default=32, help="number of shell samples")
|
|
parser.add_argument("--out", default="shared-data/genus0_sphere_shell_witness.json", help="output JSON path")
|
|
args = parser.parse_args()
|
|
|
|
demo = build_demo(seed=args.seed, samples=args.samples)
|
|
out = Path(args.out)
|
|
out.parent.mkdir(parents=True, exist_ok=True)
|
|
out.write_text(json.dumps(demo, indent=2) + "\n", encoding="utf-8")
|
|
print(json.dumps({
|
|
"wrote": str(out),
|
|
"seed": args.seed,
|
|
"samples": args.samples,
|
|
"genus": demo["receipt"]["genus_certificate"]["genus"],
|
|
"axis_4d_simplex": demo["receipt"]["axis_4d_simplex"],
|
|
"patch_embed_3d_positive": demo["receipt"]["patch_embed_3d_positive"],
|
|
}, indent=2))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|