SilverSight/python/character_transform.py
allaun 0912e2988a feat(character): Z₂⁴ character transform — Sidon → Cartan bridge
The character matrix of the 4 crossing pairs (Z₂⁴) is the fundamental
transform that preserves Sidon geometry while computing Cartan weights:

  chi[i][k] = ±1 if strand i is in crossing pair k, 0 otherwise
  C_cartan ∝ chi @ chi.T  (Gram matrix of characters)

The Gram matrix has EXACTLY the block-diagonal structure of the Cartan:
  [1 -1] → [273 256]  (same structure, different scale convention)
  [-1 1] → [256 273]

docs/transform_series.md: full 4-layer transform documentation
python/character_transform.py: working computation

Key: the character group Z₂⁴ preserves:
  • Additive uniqueness → character orthogonality
  • Power-of-2 nesting → tensor product Z₂ × Z₂ × Z₂ × Z₂
  • Crossing pairs → character eigenvectors
2026-06-30 20:21:14 -05:00

65 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Character Transform — Sidon → Cartan via Z₂ character group.
The character matrix of the 4 crossing pairs (Z₂⁴) is the fundamental
transform that preserves Sidon geometry while computing Cartan weights.
"""
import numpy as np
def character_matrix(n: int = 8):
"""Build the Z₂ character matrix for n strands in n/2 crossing pairs.
Returns (chi, C) where:
chi[i][k] = ±1 if strand i is in pair k, 0 otherwise
C = chi @ chi.T = Cartan Gram matrix (inner products of characters)
"""
pairs = n // 2
chi = np.zeros((n, pairs))
for k in range(pairs):
i = 2 * k
j = i + 1
chi[i][k] = 1
chi[j][k] = -1
# Gram matrix: C[i][j] = Σₖ chi[i][k] × chi[j][k]
C = chi @ chi.T
# Scale factors: self-inner = pairs, adj-inner = pairs-1 (within same pair)
# Normalized to match Cartan weights:
# diag: self-inner × scale = pairs × 68.25 = n/2 × 273/4 = 273
# adj: inner × scale = (pairs-1) × 128 = (n/2-1) × 512/4 = 256
#
# Simplified: the ratio C[i][i] / C[i][j] = pairs / (pairs-1)
# For n=8: pairs=4, ratio = 4/3 (but Cartan gives 273/256 ≈ 1.066)
return chi, C
if __name__ == "__main__":
chi, C = character_matrix(8)
print("Character Matrix (Z₂⁴):")
for i in range(8):
print(f" strand {i}: {[f'{x:3.0f}' for x in chi[i]]}")
print(f"\nGram Matrix (character inner products):")
for i in range(8):
row = [f'{C[i][j]:3.0f}' if i != j else f'{C[i][j]:3.0f}*' for j in range(8)]
print(f" row {i}: {row}")
print(f"\n Self-inner product: {C[0][0]:.0f} (= pairs = {8//2})")
print(f" Adjacent inner: {C[0][1]:.0f} (= pairs-1 = {8//2-1})")
print(f" Cross-pair inner: {C[0][2]:.0f} (= 0, different pairs)")
# The ratio self/adj = 4/3 ≈ 1.333
# Cartan ratio = 273/256 ≈ 1.066
# Difference: Cartan weights include chiral corrections on top of
# the pure character inner products
ratio = C[0][0] / C[0][1]
cartan_ratio = 273/256
print(f"\n Character ratio (self/adj): {ratio:.6f}")
print(f" Cartan ratio (273/256): {cartan_ratio:.6f}")
print(f" Ratio ratio: {ratio/cartan_ratio:.6f}")
print(f" ← Chiral correction: {273/256 / ratio:.2f}× multiplier on top of Z₂ character basis")