mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
169 lines
6.5 KiB
Text
169 lines
6.5 KiB
Text
import Semantics.Atoms
|
||
import Semantics.Lemmas
|
||
import Semantics.Projections
|
||
|
||
namespace Semantics.ENE
|
||
|
||
-- Endless Node Edges (ENE) Graph Database
|
||
-- A formalized semantic graph engine with typed nodes and edges.
|
||
-- Nodes represent different levels of semantic abstraction.
|
||
-- Edges represent proof-carrying relationships between semantic objects.
|
||
|
||
/-- Node types in the ENE semantic graph. -/
|
||
inductive NodeType
|
||
| atom -- Irreducible semantic primitive
|
||
| lemma -- canonicalical typed bundle of atoms
|
||
| wordform -- Language-specific realization of a lemma
|
||
| observation -- Raw input signal
|
||
| canonicalState -- Normalized invariant state
|
||
| attractor -- Semantic basin / region
|
||
| signature -- Discrete symbolic code
|
||
| interpretation -- Certified semantic projection
|
||
| loadProfile -- Cognitive load annotation
|
||
| projection -- Evidence-backed collapse surface
|
||
| inhibitor -- Cognitive Landmine (adversarial warding)
|
||
| camouflage -- Social Singularity (status-inverted masking)
|
||
| wardingField -- Active repulsion region
|
||
deriving Repr, BEq
|
||
|
||
/-- A point in the MI-aware geometric space. Mirrors `ene_mi_signal.py`. -/
|
||
structure MIPoint where
|
||
z : List Float -- Feature vector
|
||
mi : Float -- Mutual information
|
||
method : String -- Best method at this point
|
||
baselineBpb : Float -- Cheap baseline BPB
|
||
actualBpb : Float -- Chosen method BPB
|
||
support : Nat := 1
|
||
confidence : Float := 1.0
|
||
timestamp : Float := 0.0
|
||
deriving Repr, BEq
|
||
|
||
/-- A node in the ENE graph. -/
|
||
structure Node where
|
||
id : Nat
|
||
type : NodeType
|
||
label : String
|
||
payload : Option MIPoint := none
|
||
deriving Repr, BEq
|
||
|
||
/-- Edge classes control the semantic ecology of the graph. -/
|
||
inductive EdgeClass
|
||
| definitional -- Constitutive relationship (lemma → atoms)
|
||
| analogical -- Similarity across domains
|
||
| translational -- Cross-language or cross-substrate mapping
|
||
| affective -- Emotional or evaluative coloring
|
||
| inferential -- Logical or causal consequence
|
||
| capabilityBearing -- Grants or transfers capability
|
||
| unstable -- Provisional, subject to revision
|
||
| quarantined -- Suspended pending audit
|
||
| derived -- Computed from other edges
|
||
| realizational -- Surface form instantiation
|
||
| projective -- Mapping from raw to semantic
|
||
| evidentiary -- Supports or contradicts
|
||
| loadAnnotated -- Carries processing cost
|
||
| compositional -- Part-whole or structural
|
||
| temporal -- Sequence or causation in time
|
||
| warding -- Repulsion field / Adversarial hardening
|
||
deriving Repr, BEq
|
||
|
||
/-- Edge types in the ENE graph. -/
|
||
inductive EdgeType
|
||
| has_atom -- Lemma → Atom
|
||
| realizes -- Wordform → Lemma
|
||
| projects_to -- Observation → canonical
|
||
| assigned_to -- canonical → Attractor
|
||
| has_signature -- canonical → Signature
|
||
| supports -- State/Evidence → Lemma
|
||
| contradicts -- Evidence → Lemma (negative support)
|
||
| inherits -- Lemma → Lemma
|
||
| evokes -- Attractor → Lemma
|
||
| has_load -- Node → LoadProfile
|
||
| derived_from -- Interpretation → Projection
|
||
| similar_to -- Node → Node
|
||
| composed_of -- Interpretation → Node
|
||
| precedes -- Temporal ordering
|
||
| causes -- Causal influence
|
||
| path_step -- Atomic path traversal
|
||
| witnesses -- Emergence receipt
|
||
| collapsed_to -- Projection → Scalar
|
||
| evolved_from -- Self-modification trace
|
||
| wards -- Inhibitor → Node
|
||
| camouflages -- Camouflage → Node
|
||
deriving Repr, BEq
|
||
|
||
/-- An edge in the ENE graph.
|
||
Note: `edgeClass` is used instead of `class` because `class` is a reserved keyword. -/
|
||
structure Edge where
|
||
id : Nat
|
||
source : Node
|
||
target : Node
|
||
type : EdgeType
|
||
edgeClass : EdgeClass
|
||
weight : Float := 1.0
|
||
justified : Bool := true
|
||
deriving Repr, BEq
|
||
|
||
/-- A property graph containing nodes and edges. -/
|
||
structure Graph where
|
||
nodes : List Node
|
||
edges : List Edge
|
||
nextId : Nat := 0
|
||
deriving Repr
|
||
|
||
/-- An empty graph. -/
|
||
def Graph.empty : Graph := { nodes := [], edges := [], nextId := 0 }
|
||
|
||
/-- Insert a node into the graph, assigning it an ID. -/
|
||
def Graph.insertNode (g : Graph) (type : NodeType) (label : String) (payload : Option MIPoint := none) : Graph × Node :=
|
||
let node := { id := g.nextId, type := type, label := label, payload := payload }
|
||
({ nodes := node :: g.nodes, edges := g.edges, nextId := g.nextId + 1 }, node)
|
||
|
||
/-- Insert an edge into the graph, assigning it an ID. -/
|
||
def Graph.insertEdge (g : Graph) (source : Node) (target : Node) (type : EdgeType) (edgeClass : EdgeClass) (weight : Float := 1.0) (justified : Bool := true) : Graph × Edge :=
|
||
let edge := { id := g.nextId, source := source, target := target, type := type, edgeClass := edgeClass, weight := weight, justified := justified }
|
||
({ nodes := g.nodes, edges := edge :: g.edges, nextId := g.nextId + 1 }, edge)
|
||
|
||
/-- Find edges originating from a given node. -/
|
||
def Graph.outEdges (g : Graph) (n : Node) : List Edge :=
|
||
g.edges.filter (λ e => e.source == n)
|
||
|
||
/-- Find edges targeting a given node. -/
|
||
def Graph.inEdges (g : Graph) (n : Node) : List Edge :=
|
||
g.edges.filter (λ e => e.target == n)
|
||
|
||
/-- Find neighbors of a node via outgoing edges of a specific type. -/
|
||
def Graph.neighbors (g : Graph) (n : Node) (t : EdgeType) : List Node :=
|
||
g.outEdges n |>.filter (λ e => e.type == t) |>.map (λ e => e.target)
|
||
|
||
/-- Check if a node exists in the graph. -/
|
||
def Graph.hasNode (g : Graph) (n : Node) : Bool :=
|
||
g.nodes.contains n
|
||
|
||
/-- Map an Atom to its string label for graph lookup. -/
|
||
def atomLabel : Atom → String
|
||
| Atom.someone => "someone"
|
||
| Atom.something => "something"
|
||
| Atom.do_ => "do_"
|
||
| Atom.happen => "happen"
|
||
| Atom.move => "move"
|
||
| Atom.cause => "cause"
|
||
| Atom.die => "die"
|
||
| Atom.want => "want"
|
||
| Atom.know => "know"
|
||
| Atom.feel => "feel"
|
||
| Atom.think => "think"
|
||
| Atom.good => "good"
|
||
| Atom.bad => "bad"
|
||
| Atom.because => "because"
|
||
| Atom.not => "not"
|
||
|
||
/-- A typed interface for lemma nodes: they must carry specific semantic atoms. -/
|
||
def Graph.lemmaHasAtom (g : Graph) (l : Node) (a : Atom) : Prop :=
|
||
∃ e ∈ g.edges, e.source == l ∧ e.type == EdgeType.has_atom ∧ ∃ n ∈ g.nodes, n == e.target ∧ n.label = atomLabel a
|
||
|
||
/-- A proposition that the graph contains no quarantined edges with positive weight.
|
||
This is a basic safety invariant: dangerous edges must be neutralized. -/
|
||
def Graph.noActiveQuarantine (g : Graph) : Prop :=
|
||
∀ e ∈ g.edges, e.edgeClass == EdgeClass.quarantined → e.weight ≤ 0.0
|
||
|
||
end Semantics.ENE
|