Research-Stack/0-Core-Formalism/lean/external/OTOM/ProvenanceSource.lean
2026-05-12 05:57:04 -05:00

113 lines
3.3 KiB
Text

import Semantics.Bind
namespace Semantics.ProvenanceSource
/-!
Open provenance-source surface for legacy OTOM staging modules.
This mirrors the active Q16.16 module with raw UInt32 scalars so historical
external modules can delegate to the same source-event shape without importing
the active fixed-point stack.
-/
inductive Backend where
| vcs (kind : String) (host : String)
| objectStore (kind : String)
| ledger (kind : String)
| registry (kind : String)
| stream (kind : String)
| filesystem (kind : String)
| toolbelt (kind : String)
| manual
| other (name : String)
structure Identity where
scheme : String
name : String
structure Reference where
scheme : String
value : String
inductive Visibility where
| publicRecord
| privateRecord
| internalRecord
| unspecifiedRecord
structure SourceEvent where
backend : Backend
source : String
action : String
actor : Identity
ref : Reference
visibility : Visibility
isValid : Bool
structure CostPolicy where
trustedActors : List String
trustedCost : UInt32
untrustedCost : UInt32
publicCost : UInt32
def actorKey (actor : Identity) : String :=
s!"{actor.scheme}:{actor.name}"
def isTrusted (policy : CostPolicy) (actor : Identity) : Bool :=
policy.trustedActors.any (fun key => key == actor.name || key == actorKey actor)
def visibilityToken : Visibility → String
| .publicRecord => "public"
| .privateRecord => "private"
| .internalRecord => "internal"
| .unspecifiedRecord => "unspecified"
def backendToken : Backend → String
| .vcs kind host => s!"vcs:{kind}:{host}"
| .objectStore kind => s!"object-store:{kind}"
| .ledger kind => s!"ledger:{kind}"
| .registry kind => s!"registry:{kind}"
| .stream kind => s!"stream:{kind}"
| .filesystem kind => s!"filesystem:{kind}"
| .toolbelt kind => s!"toolbelt:{kind}"
| .manual => "manual"
| .other name => s!"other:{name}"
def invariant (event : SourceEvent) : String :=
if event.isValid then
s!"lawful_source:{backendToken event.backend}:{event.source}:{event.action}:{event.ref.scheme}:{event.ref.value}"
else
"unlawful_source"
def legacyInvariant (validPrefix invalidToken : String) (event : SourceEvent) : String :=
if event.isValid then s!"{validPrefix}:{event.source}:{event.action}" else invalidToken
def targetInvariant (event : SourceEvent) (_target : String) : String :=
invariant event
def legacyTargetInvariant (validPrefix : String) (event : SourceEvent) (_target : String) : String :=
s!"{validPrefix}:{event.source}:{event.action}"
def cost (policy : CostPolicy) (event : SourceEvent) (_target : String) (_g : Metric) : UInt32 :=
if isTrusted policy event.actor then
policy.trustedCost
else
match event.visibility with
| .publicRecord => policy.publicCost
| _ => policy.untrustedCost
def bind (policy : CostPolicy) (event : SourceEvent) (target : String) (g : Metric) : Bind SourceEvent String :=
controlBind event target g (cost policy) invariant (targetInvariant event)
def legacyBind
(policy : CostPolicy)
(validPrefix invalidToken : String)
(event : SourceEvent)
(target : String)
(g : Metric) : Bind SourceEvent String :=
controlBind event target g
(cost policy)
(legacyInvariant validPrefix invalidToken)
(legacyTargetInvariant validPrefix event)
end Semantics.ProvenanceSource