mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
55 lines
2.3 KiB
Text
55 lines
2.3 KiB
Text
/-
|
|
FieldSolver.lean - Torsion Field Compression Solver
|
|
Compliant with AGENTS.md Q16_16 bounds and minimal bind topology.
|
|
-/
|
|
import Semantics.Atoms
|
|
import Semantics.Bind
|
|
import Semantics.FixedPoint
|
|
|
|
namespace Semantics.FieldSolver
|
|
|
|
open Semantics.Q16_16
|
|
|
|
structure FieldSolverState where
|
|
w : UInt32
|
|
lambdaE : UInt32
|
|
ell : UInt32
|
|
eta : UInt32
|
|
engramKey : UInt32
|
|
activationHistorySum : UInt32
|
|
historyCount : UInt32
|
|
deriving Repr, Inhabited, DecidableEq
|
|
|
|
def computeLaplacian (w : UInt32) (historyAvg : UInt32) : UInt32 :=
|
|
let baseTorsion := ((w >>> 16) ^^^ (w >>> 8) ^^^ w) &&& 0xFF
|
|
if historyAvg > 0 then (baseTorsion + historyAvg) / 2 else baseTorsion
|
|
|
|
def engramQuery (key : UInt32) (position : UInt32) : UInt32 :=
|
|
(key ^^^ position ^^^ 0xDEADBEEF) >>> 24
|
|
|
|
def stabilityPenalty (w : UInt32) (historyAvg : UInt32) (lambdaStab : Q16_16) : Q16_16 :=
|
|
if historyAvg == 0 then 0
|
|
else
|
|
let drift := if w > historyAvg then w - historyAvg else historyAvg - w
|
|
let driftQ : Q16_16 := Q16_16.ofBits (UInt32.ofNat ((drift.toNat * Q16_16.scale) / 0xFFFFFFFF))
|
|
Q16_16.mul lambdaStab (Q16_16.mul driftQ driftQ)
|
|
|
|
def fieldInvariant (state : FieldSolverState) : String :=
|
|
s!"w:{state.w},lambda:{state.lambdaE}"
|
|
|
|
/-- Informational cost over Torsion Field evaluation step -/
|
|
def informationalCost (left right : FieldSolverState) ( _metric : Metric) : Q16_16 :=
|
|
let avgLeft := if left.historyCount > 0 then left.activationHistorySum / left.historyCount else 0
|
|
let avgRight := if right.historyCount > 0 then right.activationHistorySum / right.historyCount else 0
|
|
let tL := (computeLaplacian left.w avgLeft).toNat
|
|
let tR := (computeLaplacian right.w avgRight).toNat
|
|
let baseTorsionDiff := if tL < tR then tR - tL else tL - tR
|
|
-- Cost is proportional to the gradient change, clamped to Q16.16 max
|
|
Q16_16.satFromNat (baseTorsionDiff * Q16_16.scale)
|
|
|
|
def informationalBindEval (left right : FieldSolverState) ( _metric : Metric) : Bind FieldSolverState FieldSolverState :=
|
|
informationalBind left right _metric informationalCost fieldInvariant fieldInvariant
|
|
|
|
#eval informationalCost { w := 0x12345678, lambdaE := 256, ell := 4, eta := 16, engramKey := 0, activationHistorySum := 0, historyCount := 0 } { w := 0x12345679, lambdaE := 256, ell := 4, eta := 16, engramKey := 0, activationHistorySum := 0, historyCount := 0 } (Metric.euclidean)
|
|
|
|
end Semantics.FieldSolver
|