mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
373 lines
13 KiB
Text
373 lines
13 KiB
Text
import Semantics.PhysicsScalar
|
|
import Semantics.PhysicsEuclidean
|
|
import Semantics.PhysicsLagrangian
|
|
import Semantics.LocalDerivative
|
|
import Semantics.HyperFlow
|
|
import Semantics.RegimeCore
|
|
import Semantics.ElectromagneticSpectrum
|
|
|
|
namespace Semantics.MagnetoPlasma
|
|
|
|
open Semantics.PhysicsScalar
|
|
open Semantics.PhysicsEuclidean
|
|
open Semantics.PhysicsLagrangian
|
|
open Semantics.LocalDerivative
|
|
open Semantics.HyperFlow
|
|
open Semantics.RegimeCore
|
|
open Semantics.ElectromagneticSpectrum
|
|
|
|
abbrev MagnetoBodyId := UInt16
|
|
abbrev MagnetoCoreId := UInt16
|
|
|
|
inductive MagnetoCoreKind
|
|
| inert
|
|
| dipole
|
|
| toroidal
|
|
| filamentary
|
|
| lattice
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive ConfinementRegime
|
|
| unconfined
|
|
| weaklyConfined
|
|
| loopConfined
|
|
| sheathConfined
|
|
| coreLocked
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive ReconnectionTendency
|
|
| suppressed
|
|
| latent
|
|
| active
|
|
| cascading
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive MagnetoPlasmaRegime
|
|
| diffuse
|
|
| aligned
|
|
| loopDominant
|
|
| sheathDominant
|
|
| reconnectionDominant
|
|
| coreDominant
|
|
| collapsed
|
|
deriving Repr, DecidableEq
|
|
|
|
inductive BodyCouplingClass
|
|
| isolated
|
|
| weaklyCoupled
|
|
| resonant
|
|
| entrained
|
|
| gated
|
|
deriving Repr, DecidableEq
|
|
|
|
structure MagnetoCore where
|
|
coreId : MagnetoCoreId
|
|
kind : MagnetoCoreKind
|
|
polarity : Q16_16
|
|
coherence : Q16_16
|
|
fieldBias : Q16_16
|
|
tension : Q16_16
|
|
saturation : Q16_16
|
|
deriving Repr, DecidableEq
|
|
|
|
structure MagnetoPlasmaSignature where
|
|
alignment : Q16_16
|
|
confinement : Q16_16
|
|
reconnectionPotential : Q16_16
|
|
loopCoherence : Q16_16
|
|
sheathStrength : Q16_16
|
|
coreInfluence : Q16_16
|
|
couplingDensity : Q16_16
|
|
spectralAffinity : Q16_16
|
|
deriving Repr, DecidableEq
|
|
|
|
structure MagnetoSpectralHook where
|
|
admittedBands : List SpectrumBand
|
|
preferredCarrierRoles : List CarrierRole
|
|
minimumIntensity : Q16_16
|
|
minimumCoherence : Q16_16
|
|
supportsPlasmaCoupling : Bool
|
|
deriving Repr, DecidableEq
|
|
|
|
structure MagnetoPlasmaBody (n : Nat) where
|
|
bodyId : MagnetoBodyId
|
|
state : PhysicsLagrangian n
|
|
core : MagnetoCore
|
|
localDerivative : LocalDerivative
|
|
hyperFlowSignature : HyperFlowSignature
|
|
regionId : RegionId
|
|
spectralHook : MagnetoSpectralHook
|
|
regime : MagnetoPlasmaRegime
|
|
deriving Repr
|
|
|
|
structure MagnetoBodyLink where
|
|
sourceBodyId : MagnetoBodyId
|
|
targetBodyId : MagnetoBodyId
|
|
couplingClass : BodyCouplingClass
|
|
couplingStrength : Q16_16
|
|
gateOpenThreshold : Q16_16
|
|
requiresSpectralAffinity : Bool
|
|
deriving Repr, DecidableEq
|
|
|
|
structure MagnetoInteractionRequest (n : Nat) where
|
|
source : MagnetoPlasmaBody n
|
|
target : MagnetoPlasmaBody n
|
|
link : MagnetoBodyLink
|
|
sample? : Option ElectromagneticSample
|
|
sourceRegimeClass : RegimeClass
|
|
targetRegimeClass : RegimeClass
|
|
deriving Repr
|
|
|
|
structure MagnetoInteractionResult (n : Nat) where
|
|
admitted : Bool
|
|
sourceBody : MagnetoPlasmaBody n
|
|
targetBody : MagnetoPlasmaBody n
|
|
resolvedRegime : MagnetoPlasmaRegime
|
|
resultingCoupling : Q16_16
|
|
deriving Repr
|
|
|
|
|
|
def quantizeNonnegative (value : Float) : Q16_16 :=
|
|
if value <= 0.0 then
|
|
Q16_16.zero
|
|
else
|
|
let scaled := Float.toUInt32 (value * Float.ofNat Q16_16.scale)
|
|
Q16_16.fromRawNat scaled.toNat
|
|
|
|
|
|
def defaultMagnetoCore : MagnetoCore :=
|
|
{ coreId := 0
|
|
, kind := .inert
|
|
, polarity := Q16_16.half
|
|
, coherence := Q16_16.half
|
|
, fieldBias := Q16_16.half
|
|
, tension := Q16_16.quarter
|
|
, saturation := Q16_16.one }
|
|
|
|
|
|
def defaultMagnetoSpectralHook : MagnetoSpectralHook :=
|
|
{ admittedBands := [.radio, .microwave, .infrared, .visible]
|
|
, preferredCarrierRoles := [.ambient, .activeProbe, .sensorFeed]
|
|
, minimumIntensity := Q16_16.zero
|
|
, minimumCoherence := Q16_16.quarter
|
|
, supportsPlasmaCoupling := true }
|
|
|
|
|
|
def coreStrength (core : MagnetoCore) : Q16_16 :=
|
|
Q16_16.mean3 core.coherence core.fieldBias core.tension
|
|
|
|
|
|
def sampleSpectrallyCompatible
|
|
(hook : MagnetoSpectralHook)
|
|
(sample : ElectromagneticSample) : Bool :=
|
|
let bandOk := sample.bandProfile.band ∈ hook.admittedBands
|
|
let roleOk := hook.preferredCarrierRoles.isEmpty || sample.role ∈ hook.preferredCarrierRoles
|
|
let intensityOk := Q16_16.ge sample.intensity hook.minimumIntensity
|
|
let coherenceOk := Q16_16.ge sample.coherence hook.minimumCoherence
|
|
let plasmaOk :=
|
|
if hook.supportsPlasmaCoupling then
|
|
sample.interaction = .plasmaCoupling || sample.interaction = .activeSensing || sample.interaction = .communication
|
|
else
|
|
true
|
|
bandOk && roleOk && intensityOk && coherenceOk && plasmaOk
|
|
|
|
|
|
def spectralAffinityOf
|
|
(hook : MagnetoSpectralHook)
|
|
(sample? : Option ElectromagneticSample) : Q16_16 :=
|
|
match sample? with
|
|
| none => Q16_16.zero
|
|
| some sample =>
|
|
if sampleSpectrallyCompatible hook sample then
|
|
Q16_16.mean3 sample.intensity sample.coherence sample.modulation
|
|
else
|
|
Q16_16.zero
|
|
|
|
|
|
def confinementFromCore (core : MagnetoCore) : ConfinementRegime :=
|
|
if Q16_16.ge core.tension Q16_16.one then
|
|
.coreLocked
|
|
else if Q16_16.ge core.tension (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.loopConfined
|
|
else if Q16_16.ge core.tension Q16_16.half then
|
|
.sheathConfined
|
|
else if Q16_16.ge core.tension Q16_16.quarter then
|
|
.weaklyConfined
|
|
else
|
|
.unconfined
|
|
|
|
|
|
def reconnectionFromSignature (signature : MagnetoPlasmaSignature) : ReconnectionTendency :=
|
|
if Q16_16.ge signature.reconnectionPotential Q16_16.one then
|
|
.cascading
|
|
else if Q16_16.ge signature.reconnectionPotential (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.active
|
|
else if Q16_16.ge signature.reconnectionPotential Q16_16.half then
|
|
.latent
|
|
else
|
|
.suppressed
|
|
|
|
|
|
def classifyMagnetoPlasmaRegime
|
|
(signature : MagnetoPlasmaSignature)
|
|
(core : MagnetoCore) : MagnetoPlasmaRegime :=
|
|
if Q16_16.ge signature.reconnectionPotential Q16_16.one && Q16_16.ge signature.couplingDensity (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.collapsed
|
|
else if Q16_16.ge signature.coreInfluence Q16_16.one && Q16_16.ge core.coherence (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.coreDominant
|
|
else if Q16_16.ge signature.reconnectionPotential (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.reconnectionDominant
|
|
else if Q16_16.ge signature.sheathStrength (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.sheathDominant
|
|
else if Q16_16.ge signature.loopCoherence (Q16_16.add Q16_16.half Q16_16.quarter) then
|
|
.loopDominant
|
|
else if Q16_16.ge signature.alignment Q16_16.half then
|
|
.aligned
|
|
else
|
|
.diffuse
|
|
|
|
|
|
def inferMagnetoPlasmaSignature
|
|
(core : MagnetoCore)
|
|
(hyper : HyperFlowSignature)
|
|
(ld : LocalDerivative)
|
|
(sample? : Option ElectromagneticSample)
|
|
(hook : MagnetoSpectralHook) : MagnetoPlasmaSignature :=
|
|
let alignment := Q16_16.mean3 core.fieldBias (quantizeNonnegative (Float.abs (divergence ld))) (quantizeNonnegative (Float.abs hyper.anisotropy))
|
|
let confinement := Q16_16.mean3 core.tension core.coherence (quantizeNonnegative (Float.abs hyper.stressMagnitude))
|
|
let reconnectionPotential := Q16_16.mean3 (quantizeNonnegative (Float.abs hyper.spectralSpread)) (quantizeNonnegative (matrixFrobeniusNorm (torsion ld))) (quantizeNonnegative (Float.abs hyper.shearMagnitude))
|
|
let loopCoherence := Q16_16.mean3 core.coherence (quantizeNonnegative (curvature ld)) (quantizeNonnegative (Float.abs hyper.transportMagnitude))
|
|
let sheathStrength := Q16_16.mean3 core.tension (quantizeNonnegative (Float.abs hyper.divergence)) (quantizeNonnegative (Float.abs hyper.compressibilityIndex))
|
|
let coreInfluence := Q16_16.mean3 (coreStrength core) core.saturation core.fieldBias
|
|
let couplingDensity := Q16_16.mean3 (quantizeNonnegative (Float.abs hyper.couplingDensity)) (quantizeNonnegative (Float.abs hyper.stressMagnitude)) (quantizeNonnegative (Float.abs (divergence ld)))
|
|
let spectralAffinity := spectralAffinityOf hook sample?
|
|
{ alignment := alignment
|
|
, confinement := confinement
|
|
, reconnectionPotential := reconnectionPotential
|
|
, loopCoherence := loopCoherence
|
|
, sheathStrength := sheathStrength
|
|
, coreInfluence := coreInfluence
|
|
, couplingDensity := couplingDensity
|
|
, spectralAffinity := spectralAffinity }
|
|
|
|
|
|
def regimeSupportsLink
|
|
(sourceRegime targetRegime : MagnetoPlasmaRegime)
|
|
(link : MagnetoBodyLink) : Bool :=
|
|
match link.couplingClass with
|
|
| .isolated => false
|
|
| .weaklyCoupled => sourceRegime != .collapsed && targetRegime != .collapsed
|
|
| .resonant => sourceRegime = .aligned || sourceRegime = .loopDominant || targetRegime = .aligned || targetRegime = .loopDominant
|
|
| .entrained => sourceRegime = .coreDominant || targetRegime = .coreDominant
|
|
| .gated => sourceRegime != .diffuse && targetRegime != .diffuse
|
|
|
|
|
|
def regionCompatible
|
|
(sourceRegimeClass targetRegimeClass : RegimeClass) : Bool :=
|
|
sourceRegimeClass = targetRegimeClass || sourceRegimeClass = .spectral || targetRegimeClass = .spectral || targetRegimeClass = .boundary
|
|
|
|
|
|
def bodyCouplingStrength
|
|
(sourceSignature targetSignature : MagnetoPlasmaSignature)
|
|
(link : MagnetoBodyLink) : Q16_16 :=
|
|
let base := Q16_16.mean3 sourceSignature.couplingDensity targetSignature.couplingDensity link.couplingStrength
|
|
let aligned := Q16_16.mean3 sourceSignature.alignment targetSignature.alignment base
|
|
if Q16_16.ge aligned link.gateOpenThreshold then aligned else Q16_16.zero
|
|
|
|
|
|
def applyMagnetoBias (state : PhysicsLagrangian n) (signature : MagnetoPlasmaSignature) : PhysicsLagrangian n :=
|
|
let velocity' := PhysicsEuclidean.scale (Q16_16.max Q16_16.quarter signature.alignment) state.velocity
|
|
let momentum' := PhysicsEuclidean.scale (Q16_16.max Q16_16.quarter signature.coreInfluence) state.momentum
|
|
{ state with velocity := velocity', momentum := momentum' }
|
|
|
|
|
|
def interactBodies
|
|
(request : MagnetoInteractionRequest n) : MagnetoInteractionResult n :=
|
|
let sourceSignature := inferMagnetoPlasmaSignature request.source.core request.source.hyperFlowSignature request.source.localDerivative request.sample? request.source.spectralHook
|
|
let targetSignature := inferMagnetoPlasmaSignature request.target.core request.target.hyperFlowSignature request.target.localDerivative request.sample? request.target.spectralHook
|
|
let sourceRegime := classifyMagnetoPlasmaRegime sourceSignature request.source.core
|
|
let targetRegime := classifyMagnetoPlasmaRegime targetSignature request.target.core
|
|
let spectralOk :=
|
|
match request.sample? with
|
|
| none => !request.link.requiresSpectralAffinity
|
|
| some sample =>
|
|
if request.link.requiresSpectralAffinity then
|
|
sampleSpectrallyCompatible request.source.spectralHook sample && sampleSpectrallyCompatible request.target.spectralHook sample
|
|
else
|
|
true
|
|
let regionOk := regionCompatible request.sourceRegimeClass request.targetRegimeClass
|
|
let regimeOk := regimeSupportsLink sourceRegime targetRegime request.link
|
|
let coupling := bodyCouplingStrength sourceSignature targetSignature request.link
|
|
let admitted := spectralOk && regionOk && regimeOk && Q16_16.nonZero coupling
|
|
let resolvedRegime :=
|
|
if sourceRegime = .collapsed || targetRegime = .collapsed then .collapsed
|
|
else if sourceRegime = .coreDominant || targetRegime = .coreDominant then .coreDominant
|
|
else if sourceRegime = .reconnectionDominant || targetRegime = .reconnectionDominant then .reconnectionDominant
|
|
else if sourceRegime = .loopDominant || targetRegime = .loopDominant then .loopDominant
|
|
else if sourceRegime = .aligned || targetRegime = .aligned then .aligned
|
|
else .diffuse
|
|
let sourceBody' :=
|
|
if admitted then
|
|
{ request.source with state := applyMagnetoBias request.source.state sourceSignature, regime := resolvedRegime }
|
|
else request.source
|
|
let targetBody' :=
|
|
if admitted then
|
|
{ request.target with state := applyMagnetoBias request.target.state targetSignature, regime := resolvedRegime }
|
|
else request.target
|
|
{ admitted := admitted
|
|
, sourceBody := sourceBody'
|
|
, targetBody := targetBody'
|
|
, resolvedRegime := resolvedRegime
|
|
, resultingCoupling := coupling }
|
|
|
|
|
|
def defaultMagnetoLink : MagnetoBodyLink :=
|
|
{ sourceBodyId := 0
|
|
, targetBodyId := 1
|
|
, couplingClass := .weaklyCoupled
|
|
, couplingStrength := Q16_16.half
|
|
, gateOpenThreshold := Q16_16.quarter
|
|
, requiresSpectralAffinity := false }
|
|
|
|
|
|
def defaultHyperFlowSignature : HyperFlowSignature :=
|
|
{ divergence := 0.0
|
|
, shearMagnitude := 0.0
|
|
, stressMagnitude := 0.0
|
|
, transportMagnitude := 0.0
|
|
, anisotropy := 0.0
|
|
, spectralSpread := 0.0
|
|
, couplingDensity := 0.0
|
|
, compressibilityIndex := 0.0
|
|
, curvatureEnergy := 0.0 }
|
|
|
|
|
|
def defaultMagnetoBody2D : MagnetoPlasmaBody 2 :=
|
|
{ bodyId := 0
|
|
, state := PhysicsLagrangian.zero 2
|
|
, core := { defaultMagnetoCore with kind := .dipole }
|
|
, localDerivative := zeroDerivative 2
|
|
, hyperFlowSignature := defaultHyperFlowSignature
|
|
, regionId := 0
|
|
, spectralHook := defaultMagnetoSpectralHook
|
|
, regime := .diffuse }
|
|
|
|
|
|
def magnetoCoreBody2D : MagnetoPlasmaBody 2 :=
|
|
{ bodyId := 1
|
|
, state := { PhysicsLagrangian.zero 2 with massScale := Q16_16.two }
|
|
, core :=
|
|
{ coreId := 1
|
|
, kind := .toroidal
|
|
, polarity := Q16_16.one
|
|
, coherence := Q16_16.add Q16_16.half Q16_16.quarter
|
|
, fieldBias := Q16_16.one
|
|
, tension := Q16_16.add Q16_16.half Q16_16.quarter
|
|
, saturation := Q16_16.one }
|
|
, localDerivative := zeroDerivative 2
|
|
, hyperFlowSignature := defaultHyperFlowSignature
|
|
, regionId := 1
|
|
, spectralHook := defaultMagnetoSpectralHook
|
|
, regime := .coreDominant }
|
|
|
|
end Semantics.MagnetoPlasma
|