Research-Stack/0-Core-Formalism/lean/Semantics/Semantics/SubstrateProfile.lean

325 lines
11 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Semantics.PhysicsScalar
import Semantics.ElectromagneticSpectrum
import Semantics.RegimeCore
import Semantics.BoundaryDynamics
import Semantics.CausalGeometry
import Semantics.ManifoldStructures
import Semantics.DomainState
namespace Semantics.SubstrateProfile
open Semantics.PhysicsScalar
open Semantics.ElectromagneticSpectrum
open Semantics.RegimeCore
open Semantics.BoundaryDynamics
open Semantics.CausalGeometry
open Semantics.ManifoldStructures
open Semantics.DomainState
inductive BoundaryKind
| interface
| sheath
| throat
| spectralCurtain
| reconnectionSurface
| dimensionalSeam
deriving Repr, DecidableEq
inductive CausalOrientation
| forward
| backward
| lateral
| cyclic
| folded
deriving Repr, DecidableEq
inductive InteractionClass
| communication
| passiveSensing
| activeSensing
| imaging
| illumination
| heating
| ionizingExposure
| plasmaCoupling
deriving Repr, DecidableEq
structure CausalLink where
orientation : CausalOrientation
delay : PhysicsScalar.Q16_16
requiresGate : Bool
deriving Repr, DecidableEq
abbrev SubstrateId := UInt16
inductive SubstrateKind
| software
| fpga
| asic
| cpu
| gpu
| optical
| memristive
| spintronic
| biologicalLike
| hybrid
deriving Repr, DecidableEq
inductive TimingResolution
| coarse
| tick
| fine
| phaseAware
| eventDriven
deriving Repr, DecidableEq
inductive ExecutionStyle
| deterministic
| gated
| streaming
| eventDriven
| reconfigurable
| hybrid
deriving Repr, DecidableEq
structure SpectralSupport where
supportedBands : List SpectrumBand
lineOfSightPreferred : Bool
supportsActiveProbe : Bool
supportsPassiveSensing : Bool
supportsCommunication : Bool
ionizingTolerance : PhysicsScalar.Q16_16
deriving Repr, DecidableEq
structure BoundarySupport where
supportedKinds : List BoundaryKind
supportsDiffuseBoundaries : Bool
supportsTurbulentBoundaries : Bool
maximumFluidity : PhysicsScalar.Q16_16
minimumCoherence : PhysicsScalar.Q16_16
deriving Repr, DecidableEq
structure CausalSupport where
supportedOrientations : List CausalOrientation
supportsDelayedLinks : Bool
supportsFoldedLinks : Bool
supportsCyclicTraversal : Bool
requiresGuardedTraversal : Bool
maximumDelayMass : PhysicsScalar.Q16_16
deriving Repr, DecidableEq
structure ResourceEnvelope where
maxStateDim : Nat
maxTransportDim : Nat
maxTopologyDim : Nat
maxRenderDim : Nat
channelBudget : UInt16
nodeBudget : UInt16
linkBudget : UInt16
deriving Repr, DecidableEq
structure SubstrateProfile where
substrateId : SubstrateId
label : String
kind : SubstrateKind
timingResolution : TimingResolution
executionStyle : ExecutionStyle
resourceEnvelope : ResourceEnvelope
supportsResolvedOnly : Bool
spectralSupport : SpectralSupport
boundarySupport : BoundarySupport
causalSupport : CausalSupport
deriving Repr, DecidableEq
def supportsBand (profile : SubstrateProfile) (band : SpectrumBand) : Bool :=
band ∈ profile.spectralSupport.supportedBands
def supportsBoundaryKind (profile : SubstrateProfile) (kind : BoundaryKind) : Bool :=
kind ∈ profile.boundarySupport.supportedKinds
def supportsOrientation (profile : SubstrateProfile) (orientation : CausalOrientation) : Bool :=
orientation ∈ profile.causalSupport.supportedOrientations
def supportsDimensions (profile : SubstrateProfile) (stateDim transportDim topologyDim renderDim : Nat) : Bool :=
stateDim <= profile.resourceEnvelope.maxStateDim &&
transportDim <= profile.resourceEnvelope.maxTransportDim &&
topologyDim <= profile.resourceEnvelope.maxTopologyDim &&
renderDim <= profile.resourceEnvelope.maxRenderDim
def supportsFluidity (profile : SubstrateProfile) (fluidity : PhysicsScalar.Q16_16) : Bool :=
PhysicsScalar.Q16_16.le fluidity profile.boundarySupport.maximumFluidity
def supportsDelayMass (profile : SubstrateProfile) (delayMass : PhysicsScalar.Q16_16) : Bool :=
PhysicsScalar.Q16_16.le delayMass profile.causalSupport.maximumDelayMass
def compatibleWithBoundary (profile : SubstrateProfile) (boundary : BoundaryLayer) (kind : BoundaryKind) : Bool :=
supportsBoundaryKind profile kind &&
supportsFluidity profile boundary.fluidity &&
PhysicsScalar.Q16_16.ge boundary.coherence profile.boundarySupport.minimumCoherence &&
(profile.boundarySupport.supportsDiffuseBoundaries || kind != BoundaryKind.sheath) &&
(profile.boundarySupport.supportsTurbulentBoundaries || !PhysicsScalar.Q16_16.gt boundary.fluidity PhysicsScalar.Q16_16.half)
def compatibleWithSample (profile : SubstrateProfile) (sample : ElectromagneticSample) (ic : InteractionClass) : Bool :=
supportsBand profile sample.bandProfile.band &&
match ic with
| .communication => profile.spectralSupport.supportsCommunication
| .passiveSensing => profile.spectralSupport.supportsPassiveSensing
| .activeSensing => profile.spectralSupport.supportsActiveProbe
| .imaging => profile.spectralSupport.supportsPassiveSensing || profile.spectralSupport.supportsActiveProbe
| .illumination => true
| .heating => true
| .ionizingExposure => PhysicsScalar.Q16_16.gt profile.spectralSupport.ionizingTolerance PhysicsScalar.Q16_16.quarter
| .plasmaCoupling => true
def compatibleWithLink (profile : SubstrateProfile) (link : CausalLink) : Bool :=
supportsOrientation profile link.orientation &&
supportsDelayMass profile link.delay &&
(profile.causalSupport.supportsDelayedLinks || !PhysicsScalar.Q16_16.gt link.delay PhysicsScalar.Q16_16.zero) &&
(profile.causalSupport.supportsFoldedLinks || link.orientation != CausalOrientation.folded) &&
(profile.causalSupport.supportsCyclicTraversal || link.orientation != CausalOrientation.cyclic) &&
(!profile.causalSupport.requiresGuardedTraversal || link.requiresGate)
def compatibleWithRegionAssignment (profile : SubstrateProfile) (assignment : RegionAssignment) : Bool :=
!profile.supportsResolvedOnly || assignment.state.resolutionStatus = .resolved
def substrateAdmitsTransition
(profile : SubstrateProfile)
(assignment : RegionAssignment)
(sample? : Option (ElectromagneticSample × InteractionClass))
(boundary? : Option (BoundaryLayer × BoundaryKind))
(link? : Option CausalLink)
(stateDim transportDim topologyDim renderDim : Nat)
: Bool :=
compatibleWithRegionAssignment profile assignment &&
supportsDimensions profile stateDim transportDim topologyDim renderDim &&
match sample?, boundary?, link? with
| some (sample, ic), some (boundary, bk), some link =>
compatibleWithSample profile sample ic &&
compatibleWithBoundary profile boundary bk &&
compatibleWithLink profile link
| some (sample, ic), some (boundary, bk), none =>
compatibleWithSample profile sample ic &&
compatibleWithBoundary profile boundary bk
| some (sample, ic), none, some link =>
compatibleWithSample profile sample ic &&
compatibleWithLink profile link
| none, some (boundary, bk), some link =>
compatibleWithBoundary profile boundary bk &&
compatibleWithLink profile link
| some (sample, ic), none, none => compatibleWithSample profile sample ic
| none, some (boundary, bk), none => compatibleWithBoundary profile boundary bk
| none, none, some link => compatibleWithLink profile link
| none, none, none => true
def fpgaSpectralSupport : SpectralSupport :=
{ supportedBands := [SpectrumBand.radio, SpectrumBand.microwave, SpectrumBand.infrared, SpectrumBand.optical]
, lineOfSightPreferred := false
, supportsActiveProbe := true
, supportsPassiveSensing := true
, supportsCommunication := true
, ionizingTolerance := PhysicsScalar.Q16_16.quarter }
def fpgaBoundarySupport : BoundarySupport :=
{ supportedKinds :=
[ BoundaryKind.interface
, BoundaryKind.sheath
, BoundaryKind.throat
, BoundaryKind.spectralCurtain
, BoundaryKind.reconnectionSurface
, BoundaryKind.dimensionalSeam ]
, supportsDiffuseBoundaries := true
, supportsTurbulentBoundaries := false
, maximumFluidity := PhysicsScalar.Q16_16.three
, minimumCoherence := PhysicsScalar.Q16_16.quarter }
def fpgaCausalSupport : CausalSupport :=
{ supportedOrientations := [CausalOrientation.forward, CausalOrientation.lateral, CausalOrientation.folded]
, supportsDelayedLinks := true
, supportsFoldedLinks := true
, supportsCyclicTraversal := false
, requiresGuardedTraversal := true
, maximumDelayMass := PhysicsScalar.Q16_16.four }
def fpgaSubstrateProfile : SubstrateProfile :=
{ substrateId := UInt16.ofNat 1
, label := "fpga-default"
, kind := SubstrateKind.fpga
, timingResolution := TimingResolution.tick
, executionStyle := ExecutionStyle.reconfigurable
, resourceEnvelope :=
{ maxStateDim := 8
, maxTransportDim := 8
, maxTopologyDim := 8
, maxRenderDim := 4
, channelBudget := UInt16.ofNat 4096
, nodeBudget := UInt16.ofNat 4096
, linkBudget := UInt16.ofNat 8192 }
, supportsResolvedOnly := true
, spectralSupport := fpgaSpectralSupport
, boundarySupport := fpgaBoundarySupport
, causalSupport := fpgaCausalSupport }
def softwareResearchSubstrateProfile : SubstrateProfile :=
{ substrateId := UInt16.ofNat 2
, label := "software-research"
, kind := SubstrateKind.software
, timingResolution := TimingResolution.phaseAware
, executionStyle := ExecutionStyle.hybrid
, resourceEnvelope :=
{ maxStateDim := 32
, maxTransportDim := 32
, maxTopologyDim := 32
, maxRenderDim := 8
, channelBudget := UInt16.ofNat 65535
, nodeBudget := UInt16.ofNat 65535
, linkBudget := UInt16.ofNat 65535 }
, supportsResolvedOnly := false
, spectralSupport :=
{ supportedBands := [SpectrumBand.radio, SpectrumBand.microwave, SpectrumBand.infrared, SpectrumBand.optical, SpectrumBand.ultraviolet, SpectrumBand.xray, SpectrumBand.gamma]
, lineOfSightPreferred := false
, supportsActiveProbe := true
, supportsPassiveSensing := true
, supportsCommunication := true
, ionizingTolerance := PhysicsScalar.Q16_16.four }
, boundarySupport :=
{ supportedKinds :=
[ BoundaryKind.interface
, BoundaryKind.sheath
, BoundaryKind.throat
, BoundaryKind.spectralCurtain
, BoundaryKind.reconnectionSurface
, BoundaryKind.dimensionalSeam ]
, supportsDiffuseBoundaries := true
, supportsTurbulentBoundaries := true
, maximumFluidity := PhysicsScalar.Q16_16.four
, minimumCoherence := PhysicsScalar.Q16_16.zero }
, causalSupport :=
{ supportedOrientations :=
[ CausalOrientation.forward
, CausalOrientation.backward
, CausalOrientation.lateral
, CausalOrientation.cyclic
, CausalOrientation.folded ]
, supportsDelayedLinks := true
, supportsFoldedLinks := true
, supportsCyclicTraversal := true
, requiresGuardedTraversal := false
, maximumDelayMass := PhysicsScalar.Q16_16.maxValue } }
end Semantics.SubstrateProfile