| /* | |
| * JSO — Jordan Spectral Operator | |
| * T(ρ) = φ⁻¹ · U·ρ·Uᴴ + φ⁻² · ρ | |
| * | |
| * Authority: JordanMatrixProof.lean (PAR-011, PAR-013) | |
| * Fixed-point: T(ρ*) = ρ* ⟹ [U, ρ*] = 0 | |
| * Trace-preserve: tr(ρ) = 1 ⟹ tr(T(ρ)) = 1 | |
| * Contraction: φ⁻¹ < 1 ⟹ Banach rate | |
| * | |
| * Hardware lowering (Layer-22 path): | |
| * tmp1 = GEMM(U, ρ) complex n×n | |
| * tmp2 = GEMM(tmp1, Uᴴ) complex n×n | |
| * S = φ⁻¹·tmp2 + φ⁻²·ρ fused saxpy | |
| * | |
| * Compiler contract (PO45–PO47): | |
| * Input U : Unitary(n) — UᴴU = I | |
| * Input ρ : Density(n) — ρᴴ = ρ, tr(ρ) = 1 | |
| * Output S : Density(n) — Sᴴ = S, tr(S) = 1 | |
| * Compiler does NOT verify unitarity at runtime. | |
| * Runtime only checks the fixed-point residual ‖S − ρ‖ when asked. | |
| */ | |
| /* φ⁻¹ = (√5 − 1)/2 ≈ 0.6180339887 (compile-time constant) */ | |
| /* φ⁻² = 1 − φ⁻¹ ≈ 0.3819660113 (trace-preservation identity) */ | |
| /* Maximum static matrix dimension for stack-local scratch. | |
| * Larger matrices must supply external scratch. */ | |
| typedef struct { | |
| float re; | |
| float im; | |
| } cf32_t; | |
| /* | |
| * sov_jso_f32 — Jordan Spectral Operator over complex f32 matrices. | |
| * | |
| * U : [n×n] unitary input (row-major, complex interleaved) | |
| * rho : [n×n] density input (row-major, complex interleaved) | |
| * S_out : [n×n] density output (row-major, complex interleaved) | |
| * scratch: caller-supplied [2×n×n] cf32 workspace (or NULL if n ≤ JSO_MAX_N) | |
| * | |
| * Returns 0 on success, -1 on bad arguments. | |
| */ | |
| int sov_jso_f32(const cf32_t* U, const cf32_t* rho, | |
| cf32_t* S_out, cf32_t* scratch, int n); | |
| /* | |
| * sov_jso_residual_f32 — compute ‖JSO(U,ρ) − ρ‖₂ (Frobenius). | |
| * Used by the runtime fixed-point check (theorem vs runtime boundary). | |
| * Returns residual, or -1.0f on error. | |
| */ | |
| float sov_jso_residual_f32(const cf32_t* U, const cf32_t* rho, | |
| cf32_t* scratch, int n); | |
| /* | |
| * sov_density_project_f32 — X → ρ (A·Aᴴ / tr(A·Aᴴ)) | |
| * X : [n×k] real or complex feature slice | |
| * W : [n×k] learned weight matrix | |
| * rho_out : [n×n] output density | |
| */ | |
| int sov_density_project_f32(const cf32_t* X, const cf32_t* W, | |
| cf32_t* rho_out, cf32_t* scratch, int n, int k); | |
| /* | |
| * sov_unitary_project_f32 — X → U (thin QR of W·X, U = Q) | |
| * Deterministic: modified Gram-Schmidt, fixed column order. | |
| */ | |
| int sov_unitary_project_f32(const cf32_t* X, const cf32_t* W, | |
| cf32_t* U_out, cf32_t* scratch, int n, int k); | |
| /* | |
| * sov_agent_block_f32 — full SelectiveSSM ∘ JSO ∘ FFN block (PO48–PO51) | |
| * | |
| * in : [B×T×D] input tensor (B=batch, T=seq, D=model_dim) | |
| * out : [B×T×D] output tensor (same shape — PO48) | |
| * params : opaque parameter block (W_ρ, W_U, SSM state, FFN weights) | |
| * scratch: caller-supplied workspace | |
| * | |
| * Shape invariant: output shape == input shape (PO48) | |
| * Memory: no aliasing in/out; static scratch bounds (PO49) | |
| * Determinism: same in+params → same out (PO50) | |
| * Invariant: SSM state never violates JSO preconditions (PO51) | |
| */ | |
| typedef struct { | |
| cf32_t* W_rho; /* [n×k] density projection weights */ | |
| cf32_t* W_u; /* [n×k] unitary projection weights */ | |
| cf32_t* ssm_A; /* [D×D] SSM transition matrix */ | |
| cf32_t* ffn_W1; /* [D×4D] FFN first layer */ | |
| cf32_t* ffn_W2; /* [4D×D] FFN second layer */ | |
| int n; /* JSO matrix dimension */ | |
| int k; /* feature slice width */ | |
| int D; /* model dimension */ | |
| } sov_agent_params_t; | |
| int sov_agent_block_f32(const cf32_t* in, cf32_t* out, | |
| const sov_agent_params_t* params, | |
| cf32_t* scratch, int B, int T); | |