Cortex.Pulse.Classify


On this page
  1. Overview
  2. Context
  3. Theorem Split
  4. Classification Surface
  5. Classifier
  6. Branch Equations
  7. Well-Formed Classification
Imports

Overview

Classification is the final pure phase of the fixed-topology Pulse kernel: accumulated facts are closed under failure propagation and then classified into a lifecycle decision. This module models the structural decision surface while keeping runtime diagnostics and payload details abstract.

Context

The Haskell runtime classifies by first applying propagateFailure, then checking for failed nodes, a nonempty executable frontier, completed settlement, suspension, and finally stuck diagnostics. Lean keeps that precedence for topology-valid states and states the theorem-level surface against wellFormedGraphState, where the stuck branch is impossible.

Theorem Split

The page defines classification predicates, the closed-state classifier, the closure-wrapping classifier, branch equations, and the well-formed-state exhaustiveness theorem.

namespace Cortex.Pulsevariable {ν : Type u} {payload : Type v}

Classification Surface

RunOutcome is the structural terminal outcome visible to the proof.

inductive RunOutcome : Type where | completed : RunOutcome | failed : RunOutcome deriving Repr, DecidableEq

StepResult is the pure classification result for a graph state.

The runtime StuckDiagnostic payload is intentionally erased: the Lean classification theorem only needs to prove that the stuck constructor is unreachable for well-formed structural states.

inductive StepResult (ν : Type u) (payload : Type v) : Type (max (u + 1) (v + 1)) where | progressing : GraphState ν payload Finset ν StepResult ν payload | settled : GraphState ν payload RunOutcome StepResult ν payload | suspended : GraphState ν payload StepResult ν payload | stuck : GraphState ν payload StepResult ν payload

pendingNodes G state is the topology-scoped pending-node set.

noncomputable def pendingNodes (G : DAG ν) (state : GraphState ν payload) : Finset ν := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadFinset ν classical All goals completed! 🐙

hasFailedNodes G state checks for a failed node in the topology.

def hasFailedNodes (G : DAG ν) (state : GraphState ν payload) : Prop := node : ν, node G.nodes state.status node = NodeStatus.failed

allSettled G state says every topology node is terminal.

def allSettled (G : DAG ν) (state : GraphState ν payload) : Prop := node : ν, node G.nodes NodeStatus.terminal (state.status node)

hasWaitingNodes G state checks for topology-scoped waiting nodes.

Runtime correspondence for this predicate is intended under GraphState.topologyDomain, where off-topology statuses are normalized to pending.

def hasWaitingNodes (G : DAG ν) (state : GraphState ν payload) : Prop := node : ν, node G.nodes state.status node = NodeStatus.waiting

hasAmbientWaitingNodes state models a raw status-map scan for waiting statuses.

def hasAmbientWaitingNodes (state : GraphState ν payload) : Prop := node : ν, state.status node = NodeStatus.waiting

Topology-domain validity bridges topology-scoped and ambient waiting checks.

theorem hasWaitingNodes_iff_hasAmbientWaitingNodes_of_topologyDomain (G : DAG ν) (state : GraphState ν payload) (hDomain : GraphState.topologyDomain G state) : hasWaitingNodes G state hasAmbientWaitingNodes state := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehasWaitingNodes G state hasAmbientWaitingNodes state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehasWaitingNodes G state hasAmbientWaitingNodes stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehasAmbientWaitingNodes state hasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehasWaitingNodes G state hasAmbientWaitingNodes state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehWaiting:hasWaitingNodes G statehasAmbientWaitingNodes state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:ν_hNode:node G.nodeshStatus:state.status node = NodeStatus.waitinghasAmbientWaitingNodes state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehasAmbientWaitingNodes state hasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehWaiting:hasAmbientWaitingNodes statehasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node G.nodeshasWaitingNodes G stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node G.nodeshasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node G.nodeshasWaitingNodes G state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node G.nodeshasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node G.nodeshPending:state.status node = NodeStatus.pendinghasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:NodeStatus.pending = NodeStatus.waitinghNode:node G.nodeshPending:state.status node = NodeStatus.pendinghasWaitingNodes G state All goals completed! 🐙

Classifier

classifyClosedGraphState G state classifies a topology-valid failure-closed state.

noncomputable def classifyClosedGraphState (G : DAG ν) (state : GraphState ν payload) : StepResult ν payload := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadStepResult ν payload classical All goals completed! 🐙

classifyGraphState G state is the topology-scoped classifier after failure closure.

noncomputable def classifyGraphState (G : DAG ν) (state : GraphState ν payload) : StepResult ν payload := classifyClosedGraphState G (propagateFailure G state)

Branch Equations

Failed nodes take classification precedence over all other branches.

theorem classifyClosedGraphState_failed (G : DAG ν) (state : GraphState ν payload) (hFailed : hasFailedNodes G state) : classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhFailed:hasFailedNodes G stateclassifyClosedGraphState G state = StepResult.settled state RunOutcome.failed classical All goals completed! 🐙

A nonempty frontier progresses when no failed node is present.

theorem classifyClosedGraphState_progressing (G : DAG ν) (state : GraphState ν payload) (hNoFailed : ¬ hasFailedNodes G state) (hFrontier : (directReadyNodes G state).Nonempty) : classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNoFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).NonemptyclassifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) classical All goals completed! 🐙

Settled completion applies after failed and frontier branches are absent.

theorem classifyClosedGraphState_settled_completed (G : DAG ν) (state : GraphState ν payload) (hNoFailed : ¬ hasFailedNodes G state) (hNoFrontier : ¬ (directReadyNodes G state).Nonempty) (hSettled : allSettled G state) : classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNoFailed:¬hasFailedNodes G statehNoFrontier:¬(directReadyNodes G state).NonemptyhSettled:allSettled G stateclassifyClosedGraphState G state = StepResult.settled state RunOutcome.completed classical All goals completed! 🐙

Suspension applies when no earlier branch fires and a topology node is waiting.

theorem classifyClosedGraphState_suspended (G : DAG ν) (state : GraphState ν payload) (hNoFailed : ¬ hasFailedNodes G state) (hNoFrontier : ¬ (directReadyNodes G state).Nonempty) (hNotSettled : ¬ allSettled G state) (hWaiting : hasWaitingNodes G state) : classifyClosedGraphState G state = StepResult.suspended state := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNoFailed:¬hasFailedNodes G statehNoFrontier:¬(directReadyNodes G state).NonemptyhNotSettled:¬allSettled G statehWaiting:hasWaitingNodes G stateclassifyClosedGraphState G state = StepResult.suspended state classical All goals completed! 🐙

The stuck branch records the structural complement of the earlier branches.

theorem classifyClosedGraphState_stuck (G : DAG ν) (state : GraphState ν payload) (hNoFailed : ¬ hasFailedNodes G state) (hNoFrontier : ¬ (directReadyNodes G state).Nonempty) (hNotSettled : ¬ allSettled G state) (hNoWaiting : ¬ hasWaitingNodes G state) : classifyClosedGraphState G state = StepResult.stuck state := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNoFailed:¬hasFailedNodes G statehNoFrontier:¬(directReadyNodes G state).NonemptyhNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateclassifyClosedGraphState G state = StepResult.stuck state classical All goals completed! 🐙

Well-Formed Classification

ClassificationNormalized state is the minimal volatile-state bundle for classification.

The minimal-pending-node argument only needs running and interrupted statuses to be absent; topology, output, closure, and frontier-bridge facts enter later correspondence theorems.

structure ClassificationNormalized (state : GraphState ν payload) : Prop where

No node is still in the active runtime state.

noRunningNodes : GraphState.noRunningNodes state

No node still carries an interrupted runtime marker.

noInterruptedNodes : GraphState.noInterruptedNodes state

Well-formed graph states are classification-normalized.

theorem classificationNormalized_of_wellFormed (G : DAG ν) (state : GraphState ν payload) (hWellFormed : wellFormedGraphState G state) : ClassificationNormalized state := { noRunningNodes := hWellFormed.noRunningNodes noInterruptedNodes := hWellFormed.noInterruptedNodes }

Nonterminal topology nodes are pending under normalized, nonfailed, nonwaiting validity.

theorem status_eq_pending_of_not_terminal (G : DAG ν) (state : GraphState ν payload) (hNormalized : ClassificationNormalized state) (hNoFailed : ¬ hasFailedNodes G state) (hNoWaiting : ¬ hasWaitingNodes G state) {node : ν} (hNode : node G.nodes) (hNotTerminal : ¬ NodeStatus.terminal (state.status node)) : state.status node = NodeStatus.pending := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalstate.status node = NodeStatus.pending ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.pendingNodeStatus.pending = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.runningNodeStatus.running = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.completedNodeStatus.completed = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.failedNodeStatus.failed = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.skippedNodeStatus.skipped = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.interruptedNodeStatus.interrupted = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.waitingNodeStatus.waiting = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.rewrittenNodeStatus.rewritten = NodeStatus.pending ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.pendingNodeStatus.pending = NodeStatus.pending All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.runningNodeStatus.running = NodeStatus.pending All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.completedNodeStatus.completed = NodeStatus.pending exact False.elim (hNotTerminal (ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.completed(state.status node).terminal All goals completed! 🐙)) ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.failedNodeStatus.failed = NodeStatus.pending All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.skippedNodeStatus.skipped = NodeStatus.pending exact False.elim (hNotTerminal (ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.skipped(state.status node).terminal All goals completed! 🐙)) ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.interruptedNodeStatus.interrupted = NodeStatus.pending All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.waitingNodeStatus.waiting = NodeStatus.pending All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.rewrittenNodeStatus.rewritten = NodeStatus.pending exact False.elim (hNotTerminal (ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNoWaiting:¬hasWaitingNodes G statenode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalhStatus:state.status node = NodeStatus.rewritten(state.status node).terminal All goals completed! 🐙))

A normalized nonfailed, nonsettled, nonwaiting state has a proof frontier.

theorem readyNodes_nonempty_of_normalized (G : DAG ν) (state : GraphState ν payload) (hNormalized : ClassificationNormalized state) (hNoFailed : ¬ hasFailedNodes G state) (hNotSettled : ¬ allSettled G state) (hNoWaiting : ¬ hasWaitingNodes G state) : (readyNodes G state).Nonempty := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty classical have hExistsNonterminal : node : ν, node G.nodes ¬ NodeStatus.terminal (state.status node) := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G statehNone:¬ node G.nodes, ¬(state.status node).terminalFalse ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G statehNone:¬ node G.nodes, ¬(state.status node).terminalallSettled G state intro node ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G statehNone:¬ node G.nodes, ¬(state.status node).terminalnode:νhNode:node G.nodes(state.status node).terminal ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G statehNone:¬ node G.nodes, ¬(state.status node).terminalnode:νhNode:node G.nodeshNotTerminal:¬(state.status node).terminalFalse All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminal(readyNodes G state).Nonempty ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pending(readyNodes G state).Nonempty have hPendingNonempty : (pendingNodes G state).Nonempty := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty exact seed, ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendingseed pendingNodes G state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor node(readyNodes G state).Nonempty have hPendingInfo : node G.nodes state.status node = NodeStatus.pending := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty All goals completed! 🐙 have hReady : Ready G state node := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingnode G.nodesν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingstate.status node = NodeStatus.pending (predecessor : ν), G.reaches predecessor node (state.status predecessor).terminal ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingnode G.nodes All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingstate.status node = NodeStatus.pendingν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pending (predecessor : ν), G.reaches predecessor node (state.status predecessor).terminal ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingstate.status node = NodeStatus.pending All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pending (predecessor : ν), G.reaches predecessor node (state.status predecessor).terminal intro predecessor ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingpredecessor:νhReach:G.reaches predecessor node(state.status predecessor).terminal ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingpredecessor:νhReach:G.reaches predecessor nodehPredecessorNotTerminal:¬(state.status predecessor).terminalFalse ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingpredecessor:νhReach:G.reaches predecessor nodehPredecessorNotTerminal:¬(state.status predecessor).terminalhPredecessorMem:predecessor G.nodesFalse ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G stateseed:νhSeedMem:seed G.nodeshSeedNotTerminal:¬(state.status seed).terminalhSeedPending:state.status seed = NodeStatus.pendinghPendingNonempty:(pendingNodes G state).Nonemptynode:νhNodePending:node pendingNodes G statehMinimal: predecessor pendingNodes G state, ¬G.reaches predecessor nodehPendingInfo:node G.nodes state.status node = NodeStatus.pendingpredecessor:νhReach:G.reaches predecessor nodehPredecessorNotTerminal:¬(state.status predecessor).terminalhPredecessorMem:predecessor G.nodeshPredecessorPendingStatus:state.status predecessor = NodeStatus.pendingFalse have hPredecessorPending : predecessor pendingNodes G state := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhNormalized:ClassificationNormalized statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty All goals completed! 🐙 All goals completed! 🐙 All goals completed! 🐙

A well-formed nonfailed, nonsettled, nonwaiting state has a runtime frontier.

theorem directReadyNodes_nonempty_of_wellFormed (G : DAG ν) (state : GraphState ν payload) (hWellFormed : wellFormedGraphState G state) (hNoFailed : ¬ hasFailedNodes G state) (hNotSettled : ¬ allSettled G state) (hNoWaiting : ¬ hasWaitingNodes G state) : (directReadyNodes G state).Nonempty := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(directReadyNodes G state).Nonempty ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehNoFailed:¬hasFailedNodes G statehNotSettled:¬allSettled G statehNoWaiting:¬hasWaitingNodes G state(readyNodes G state).Nonempty All goals completed! 🐙

Well-formed closed states classify into one of the non-stuck branches.

theorem classifyClosedGraphState_exhaustive_of_wellFormed (G : DAG ν) (state : GraphState ν payload) (hWellFormed : wellFormedGraphState G state) : (hasFailedNodes G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed) (¬ hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state)) (¬ hasFailedNodes G state ¬ (directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed) (¬ hasFailedNodes G state ¬ (directReadyNodes G state).Nonempty ¬ allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state) := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehasFailedNodes G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed ¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state classical ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:hasFailedNodes G statehasFailedNodes G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed ¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehasFailedNodes G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed ¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:hasFailedNodes G statehasFailedNodes G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed ¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehasFailedNodes G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.failed ¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G state¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).Nonempty¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).Nonempty¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).Nonempty¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).Nonempty¬hasFailedNodes G state (directReadyNodes G state).Nonempty classifyClosedGraphState G state = StepResult.progressing state (directReadyNodes G state) ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).Nonempty¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:allSettled G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:allSettled G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty allSettled G state classifyClosedGraphState G state = StepResult.settled state RunOutcome.completed ¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:hasWaitingNodes G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:¬hasWaitingNodes G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:hasWaitingNodes G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:¬hasWaitingNodes G state¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:¬hasWaitingNodes G statehFrontierNonempty:(directReadyNodes G state).Nonempty¬hasFailedNodes G state ¬(directReadyNodes G state).Nonempty ¬allSettled G state hasWaitingNodes G state classifyClosedGraphState G state = StepResult.suspended state All goals completed! 🐙

Well-formed closed states cannot classify as stuck.

theorem classifyClosedGraphState_not_stuck_of_wellFormed (G : DAG ν) (state : GraphState ν payload) (hWellFormed : wellFormedGraphState G state) (stuckState : GraphState ν payload) : classifyClosedGraphState G state StepResult.stuck stuckState := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadclassifyClosedGraphState G state StepResult.stuck stuckState classical ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:hasFailedNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckStateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:hasFailedNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:hasFailedNodes G statehClass:classifyClosedGraphState G state = StepResult.stuck stuckStateFalse All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).NonemptyclassifyClosedGraphState G state StepResult.stuck stuckStateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).NonemptyclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).NonemptyhClass:classifyClosedGraphState G state = StepResult.stuck stuckStateFalse All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:allSettled G stateclassifyClosedGraphState G state StepResult.stuck stuckStateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:allSettled G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:allSettled G statehClass:classifyClosedGraphState G state = StepResult.stuck stuckStateFalse All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:hasWaitingNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckStateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:¬hasWaitingNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:hasWaitingNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:hasWaitingNodes G statehClass:classifyClosedGraphState G state = StepResult.stuck stuckStateFalse All goals completed! 🐙 ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:¬hasWaitingNodes G stateclassifyClosedGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).NonemptyhSettled:¬allSettled G statehWaiting:¬hasWaitingNodes G statehFrontierNonempty:(directReadyNodes G state).NonemptyclassifyClosedGraphState G state StepResult.stuck stuckState All goals completed! 🐙

On well-formed states, runtime-style classification is already closed-state classification.

theorem classifyGraphState_eq_closed_of_wellFormed (G : DAG ν) (state : GraphState ν payload) (hWellFormed : wellFormedGraphState G state) : classifyGraphState G state = classifyClosedGraphState G state := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G stateclassifyGraphState G state = classifyClosedGraphState G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G stateclassifyClosedGraphState G (propagateFailure G state) = classifyClosedGraphState G state All goals completed! 🐙

Well-formed graph states cannot classify as stuck after the runtime closure step.

theorem classifyGraphState_not_stuck_of_wellFormed (G : DAG ν) (state : GraphState ν payload) (hWellFormed : wellFormedGraphState G state) (stuckState : GraphState ν payload) : classifyGraphState G state StepResult.stuck stuckState := ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadclassifyGraphState G state StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadclassifyClosedGraphState G state StepResult.stuck stuckState All goals completed! 🐙end Cortex.Pulse