mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
117 lines
3.5 KiB
Text
117 lines
3.5 KiB
Text
import Semantics.PhysicsScalar
|
|
import Semantics.RegimeCore
|
|
import Semantics.ManifoldPotential
|
|
import Semantics.ManifoldStructures
|
|
import Semantics.Errors
|
|
|
|
namespace Semantics.CausalGeometry
|
|
|
|
open Semantics.PhysicsScalar
|
|
open Semantics.RegimeCore
|
|
open Semantics.ManifoldPotential
|
|
open Semantics.ManifoldStructures
|
|
open Semantics.Errors
|
|
|
|
abbrev CausalId := UInt16
|
|
abbrev NodeId := UInt16
|
|
|
|
inductive CausalCurvature
|
|
| flat
|
|
| convergent
|
|
| divergent
|
|
| singular
|
|
| chaotic
|
|
deriving DecidableEq
|
|
|
|
inductive CausalRegime
|
|
| linear
|
|
| gated
|
|
| entrained
|
|
| reconnected
|
|
| collapsed
|
|
deriving DecidableEq
|
|
|
|
structure CausalCone where
|
|
forwardWeight : PhysicsScalar.Q16_16
|
|
backwardWeight : PhysicsScalar.Q16_16
|
|
lateralWeight : PhysicsScalar.Q16_16
|
|
coherence : PhysicsScalar.Q16_16
|
|
deriving DecidableEq
|
|
|
|
structure CausalNode where
|
|
nodeId : NodeId
|
|
label : String
|
|
regionId : RegionId
|
|
potential : ManifoldPotential
|
|
cone : CausalCone
|
|
|
|
structure CausalLayer where
|
|
layerId : CausalId
|
|
nodes : List CausalNode
|
|
globalCurvature : PhysicsScalar.Q16_16
|
|
|
|
structure CausalSignature where
|
|
nodeCount : UInt16
|
|
avgForwardWeight : PhysicsScalar.Q16_16
|
|
avgCoherence : PhysicsScalar.Q16_16
|
|
maxCurvature : PhysicsScalar.Q16_16
|
|
aliasDetected : Bool
|
|
scaffoldingRole : ErrorScaffoldingRole
|
|
|
|
structure CausalTransitionRequest where
|
|
source : CausalLayer
|
|
target : CausalLayer
|
|
boundary : BoundaryLayer
|
|
errorField? : Option ErrorField
|
|
|
|
structure CausalTransitionResult where
|
|
accepted : Bool
|
|
mergedLayer : CausalLayer
|
|
signature : CausalSignature
|
|
stability : PotentialStability
|
|
requiresAttention : Bool
|
|
|
|
|
|
def nodeCoherenceOf (node : CausalNode) : PhysicsScalar.Q16_16 :=
|
|
let base := node.cone.coherence
|
|
let bias := node.potential.gradient.coherence
|
|
PhysicsScalar.Q16_16.avg base bias
|
|
|
|
|
|
def classifyCausalCurvature (cone : CausalCone) : CausalCurvature :=
|
|
if PhysicsScalar.Q16_16.gt cone.forwardWeight (PhysicsScalar.Q16_16.add PhysicsScalar.Q16_16.one PhysicsScalar.Q16_16.half) then .convergent
|
|
else if PhysicsScalar.Q16_16.gt cone.lateralWeight PhysicsScalar.Q16_16.one then .chaotic
|
|
else if PhysicsScalar.Q16_16.gt cone.backwardWeight PhysicsScalar.Q16_16.one then .divergent
|
|
else .flat
|
|
|
|
|
|
def causalSignatureOf (layer : CausalLayer) : CausalSignature :=
|
|
let count := layer.nodes.length
|
|
let forwardSum := layer.nodes.foldl (fun acc node => PhysicsScalar.Q16_16.addSaturating acc node.cone.forwardWeight) PhysicsScalar.Q16_16.zero
|
|
let coherenceSum := layer.nodes.foldl (fun acc node => PhysicsScalar.Q16_16.addSaturating acc (nodeCoherenceOf node)) PhysicsScalar.Q16_16.zero
|
|
let div := if count = 0 then 1 else count
|
|
{ nodeCount := UInt16.ofNat count
|
|
, avgForwardWeight := PhysicsScalar.Q16_16.divQ16_16 forwardSum (UInt32.ofNat div)
|
|
, avgCoherence := PhysicsScalar.Q16_16.divQ16_16 coherenceSum (UInt32.ofNat div)
|
|
, maxCurvature := layer.globalCurvature
|
|
, aliasDetected := false
|
|
, scaffoldingRole := .none }
|
|
|
|
|
|
def mergeLayers (request : CausalTransitionRequest) : CausalLayer :=
|
|
let mergedNodes := request.source.nodes ++ request.target.nodes
|
|
{ layerId := request.source.layerId
|
|
, nodes := mergedNodes
|
|
, globalCurvature := PhysicsScalar.Q16_16.avg request.source.globalCurvature request.target.globalCurvature }
|
|
|
|
|
|
def processCausalTransition (request : CausalTransitionRequest) : CausalTransitionResult :=
|
|
let merged := mergeLayers request
|
|
let signature := causalSignatureOf merged
|
|
{ accepted := true
|
|
, mergedLayer := merged
|
|
, signature := signature
|
|
, stability := .pStable
|
|
, requiresAttention := false }
|
|
|
|
end Semantics.CausalGeometry
|