mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
294 lines
8.7 KiB
Text
294 lines
8.7 KiB
Text
import Semantics.PhysicsScalar
|
|
import Semantics.RegimeCore
|
|
import Semantics.ExoticSpacetime
|
|
import Semantics.ManifoldPotential
|
|
|
|
namespace Semantics.CausalGeometry
|
|
|
|
open Semantics.PhysicsScalar
|
|
open Semantics.RegimeCore
|
|
open Semantics.ExoticSpacetime
|
|
open Semantics.ManifoldPotential
|
|
|
|
abbrev CausalNodeId := UInt16
|
|
abbrev CausalLinkId := UInt16
|
|
abbrev CausalLayerId := UInt16
|
|
|
|
inductive CausalOrientation
|
|
| forward
|
|
| backward
|
|
| lateral
|
|
| cyclic
|
|
| folded
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive CausalCurvature
|
|
| flat
|
|
| bent
|
|
| throatBiased
|
|
| saddleBiased
|
|
| folded
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive CausalRegime
|
|
| open
|
|
| directed
|
|
| delayed
|
|
| cyclic
|
|
| branched
|
|
| gated
|
|
| trapped
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive CausalStability
|
|
| stable
|
|
| metastable
|
|
| unstable
|
|
| collapseProne
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive CausalAdmissibility
|
|
| admissible
|
|
| guarded
|
|
| blocked
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalMetric where
|
|
forwardBias : Q16_16
|
|
backwardBias : Q16_16
|
|
lateralBias : Q16_16
|
|
closureBias : Q16_16
|
|
delayWeight : Q16_16
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalNode where
|
|
nodeId : CausalNodeId
|
|
regionId : RegionId
|
|
layerId : CausalLayerId
|
|
potentialId : PotentialId
|
|
temporalRegime : TemporalRegime
|
|
cone : CausalCone
|
|
metric : CausalMetric
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalLink where
|
|
linkId : CausalLinkId
|
|
sourceNodeId : CausalNodeId
|
|
targetNodeId : CausalNodeId
|
|
orientation : CausalOrientation
|
|
strength : Q16_16
|
|
delay : Q16_16
|
|
permeability : Q16_16
|
|
requiresGate : Bool
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalLayer where
|
|
layerId : CausalLayerId
|
|
anchorRegionId : RegionId
|
|
nodes : List CausalNode
|
|
links : List CausalLink
|
|
potential : ManifoldPotential
|
|
regime : CausalRegime
|
|
stability : CausalStability
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalSignature where
|
|
forwardFlux : Q16_16
|
|
backwardFlux : Q16_16
|
|
lateralFlux : Q16_16
|
|
closureFlux : Q16_16
|
|
delayMass : Q16_16
|
|
throatBias : Q16_16
|
|
coherence : Q16_16
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalTransitionRequest where
|
|
source : CausalLayer
|
|
target : CausalLayer
|
|
connector? : Option WormholeConnector
|
|
requireClosedTraversal : Bool
|
|
deriving Repr, DecidableEq
|
|
|
|
structure CausalTransitionResult where
|
|
status : CausalAdmissibility
|
|
resultingLayer : CausalLayer
|
|
signature : CausalSignature
|
|
deriving Repr, DecidableEq
|
|
|
|
|
|
def zeroMetric : CausalMetric :=
|
|
{ forwardBias := PhysicsScalar.one
|
|
, backwardBias := PhysicsScalar.zero
|
|
, lateralBias := PhysicsScalar.zero
|
|
, closureBias := PhysicsScalar.zero
|
|
, delayWeight := PhysicsScalar.zero }
|
|
|
|
|
|
def addLinkMeasure (links : List CausalLink) (project : CausalLink → Q16_16) : Q16_16 :=
|
|
links.foldl (fun acc link => PhysicsScalar.add acc (project link)) PhysicsScalar.zero
|
|
|
|
|
|
def nodeCoherenceOf (nodes : List CausalNode) : Q16_16 :=
|
|
let coherences :=
|
|
nodes.map (fun node =>
|
|
Q16_16.min node.metric.forwardBias node.cone.forwardWeight)
|
|
coherences.foldl PhysicsScalar.add PhysicsScalar.zero
|
|
|
|
|
|
def classifyCausalCurvature (cone : CausalCone) (potential : ManifoldPotential) : CausalCurvature :=
|
|
match potential.basin.morphology with
|
|
| PotentialMorphology.throat => .throatBiased
|
|
| PotentialMorphology.saddle => .saddleBiased
|
|
| PotentialMorphology.spiral | PotentialMorphology.web => .folded
|
|
| _ =>
|
|
if Q16_16.gt cone.lateralWeight cone.forwardWeight then .bent else .flat
|
|
|
|
|
|
def classifyCausalRegime (signature : CausalSignature) (curvature : CausalCurvature) : CausalRegime :=
|
|
match curvature with
|
|
| .folded => CausalRegime.cyclic
|
|
| .throatBiased => CausalRegime.trapped
|
|
| .saddleBiased => CausalRegime.branched
|
|
| .flat | .bent =>
|
|
if PhysicsScalar.gt signature.delayMass PhysicsScalar.one then
|
|
.delayed
|
|
else if PhysicsScalar.gt signature.backwardFlux PhysicsScalar.zero then
|
|
.gated
|
|
else if PhysicsScalar.gt signature.forwardFlux signature.lateralFlux then
|
|
.directed
|
|
else
|
|
.open
|
|
|
|
|
|
def classifyCausalStability (signature : CausalSignature) : CausalStability :=
|
|
if PhysicsScalar.gt signature.closureFlux PhysicsScalar.two then
|
|
.collapseProne
|
|
else if PhysicsScalar.gt signature.backwardFlux signature.forwardFlux then
|
|
.unstable
|
|
else if PhysicsScalar.gt signature.delayMass PhysicsScalar.one then
|
|
.metastable
|
|
else
|
|
.stable
|
|
|
|
|
|
def causalSignatureOf (layer : CausalLayer) : CausalSignature :=
|
|
let forwardFlux := addLinkMeasure layer.links (fun link =>
|
|
match link.orientation with
|
|
| .forward => link.strength
|
|
| _ => PhysicsScalar.zero)
|
|
let backwardFlux := addLinkMeasure layer.links (fun link =>
|
|
match link.orientation with
|
|
| .backward => link.strength
|
|
| _ => PhysicsScalar.zero)
|
|
let lateralFlux := addLinkMeasure layer.links (fun link =>
|
|
match link.orientation with
|
|
| .lateral => link.strength
|
|
| _ => PhysicsScalar.zero)
|
|
let closureFlux := addLinkMeasure layer.links (fun link =>
|
|
match link.orientation with
|
|
| .cyclic | .folded => link.strength
|
|
| _ => PhysicsScalar.zero)
|
|
let delayMass := addLinkMeasure layer.links (fun link => link.delay)
|
|
let throatBias :=
|
|
match layer.potential.basin.morphology with
|
|
| PotentialMorphology.throat => layer.potential.basin.depth
|
|
| _ => PhysicsScalar.zero
|
|
{ forwardFlux := forwardFlux
|
|
, backwardFlux := backwardFlux
|
|
, lateralFlux := lateralFlux
|
|
, closureFlux := closureFlux
|
|
, delayMass := delayMass
|
|
, throatBias := throatBias
|
|
, coherence := nodeCoherenceOf layer.nodes }
|
|
|
|
|
|
def nodeCompatibleWithPotential (node : CausalNode) (potential : ManifoldPotential) : Bool :=
|
|
node.regionId = potential.anchorRegion ||
|
|
potential.threads.any (fun thread => thread.sourceRegion = node.regionId || thread.targetRegion = node.regionId)
|
|
|
|
|
|
def layerCompatible (layer : CausalLayer) : Bool :=
|
|
layer.nodes.all (fun node => nodeCompatibleWithPotential node layer.potential)
|
|
|
|
|
|
def connectorSupportsTransition
|
|
(connector : WormholeConnector)
|
|
(source target : CausalLayer) : Bool :=
|
|
connector.active &&
|
|
((connector.mouthARegionId = source.anchorRegionId && connector.mouthBRegionId = target.anchorRegionId) ||
|
|
(connector.mouthBRegionId = source.anchorRegionId && connector.mouthARegionId = target.anchorRegionId))
|
|
|
|
|
|
def transitionAdmissibility
|
|
(source target : CausalLayer)
|
|
(connector? : Option WormholeConnector)
|
|
(requireClosedTraversal : Bool) : CausalAdmissibility :=
|
|
if !layerCompatible source || !layerCompatible target then
|
|
.blocked
|
|
else
|
|
match connector? with
|
|
| some connector =>
|
|
if connectorSupportsTransition connector source target then
|
|
.admissible
|
|
else
|
|
.guarded
|
|
| none =>
|
|
if requireClosedTraversal then
|
|
.guarded
|
|
else if PhysicsScalar.gt (causalSignatureOf source).closureFlux PhysicsScalar.one then
|
|
.guarded
|
|
else
|
|
.admissible
|
|
|
|
|
|
def mergeLinks (left right : List CausalLink) : List CausalLink :=
|
|
left ++ right
|
|
|
|
|
|
def mergeLayers (source target : CausalLayer) : CausalLayer :=
|
|
let mergedNodes := source.nodes ++ target.nodes
|
|
let mergedLinks := mergeLinks source.links target.links
|
|
let mergedPotential := mergePotentials source.potential target.potential
|
|
{ boundaryId := 0
|
|
, sourceRegionId := source.anchorRegionId
|
|
, targetRegionId := target.anchorRegionId
|
|
, kind := .dimensionalSeam
|
|
, thickness := PhysicsScalar.one
|
|
, permeability := PhysicsScalar.half
|
|
, fluidity := PhysicsScalar.half
|
|
, spectralBias := PhysicsScalar.zero
|
|
, regime := .gated
|
|
, fluidityClass := .adaptive }
|
|
{ nodes := []
|
|
, edges := []
|
|
, manifoldLoad := PhysicsScalar.zero
|
|
, avalancheClass := .none
|
|
, status := .stable }
|
|
let provisional : CausalLayer :=
|
|
{ layerId := source.layerId
|
|
, anchorRegionId := source.anchorRegionId
|
|
, nodes := mergedNodes
|
|
, links := mergedLinks
|
|
, potential := mergedPotential
|
|
, regime := .open
|
|
, stability := .stable }
|
|
let signature := causalSignatureOf provisional
|
|
let curvature := classifyCausalCurvature source.nodes.headD {
|
|
nodeId := 0, regionId := source.anchorRegionId, layerId := source.layerId,
|
|
potentialId := source.potential.potentialId, temporalRegime := .monotonic,
|
|
cone := unitCone, metric := zeroMetric }.cone mergedPotential
|
|
{ provisional with
|
|
regime := classifyCausalRegime signature curvature
|
|
stability := classifyCausalStability signature }
|
|
|
|
|
|
def resolveCausalTransition (request : CausalTransitionRequest) : CausalTransitionResult :=
|
|
let status := transitionAdmissibility request.source request.target request.connector? request.requireClosedTraversal
|
|
let merged := mergeLayers request.source request.target
|
|
let signature := causalSignatureOf merged
|
|
{ status := status
|
|
, resultingLayer := merged
|
|
, signature := signature }
|
|
|
|
|
|
end Semantics.CausalGeometry
|