Cortex.Pulse.Classify
On this page
Imports
import Cortex.Pulse.ValidityOverview
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 ν payload⊢ Finset ν
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.waitingTopology-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 state⊢ hasWaitingNodes G state ↔ hasAmbientWaitingNodes state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G state⊢ hasWaitingNodes G state → hasAmbientWaitingNodes stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G state⊢ hasAmbientWaitingNodes state → hasWaitingNodes G state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G state⊢ hasWaitingNodes G state → hasAmbientWaitingNodes state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehWaiting:hasWaitingNodes G state⊢ hasAmbientWaitingNodes state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:ν_hNode:node ∈ G.nodeshStatus:state.status node = NodeStatus.waiting⊢ hasAmbientWaitingNodes state
All goals completed! 🐙
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G state⊢ hasAmbientWaitingNodes state → hasWaitingNodes G state ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statehWaiting:hasAmbientWaitingNodes state⊢ hasWaitingNodes G state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waiting⊢ hasWaitingNodes G state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node ∈ G.nodes⊢ hasWaitingNodes G stateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node ∉ G.nodes⊢ hasWaitingNodes G state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhDomain:GraphState.topologyDomain G statenode:νhStatus:state.status node = NodeStatus.waitinghNode:node ∈ G.nodes⊢ hasWaitingNodes 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.nodes⊢ hasWaitingNodes 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.pending⊢ hasWaitingNodes 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.pending⊢ hasWaitingNodes 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 ν payload⊢ StepResult ν 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 state⊢ classifyClosedGraphState 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).Nonempty⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 whereNo node is still in the active runtime state.
noRunningNodes : GraphState.noRunningNodes stateNo node still carries an interrupted runtime marker.
noInterruptedNodes : GraphState.noInterruptedNodes stateWell-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).terminal⊢ 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).terminalhStatus:state.status node = NodeStatus.pending⊢ NodeStatus.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.running⊢ NodeStatus.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.completed⊢ NodeStatus.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.failed⊢ NodeStatus.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.skipped⊢ NodeStatus.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.interrupted⊢ NodeStatus.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.waiting⊢ NodeStatus.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.rewritten⊢ NodeStatus.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.pending⊢ NodeStatus.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.running⊢ NodeStatus.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.completed⊢ NodeStatus.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.failed⊢ NodeStatus.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.skipped⊢ NodeStatus.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.interrupted⊢ NodeStatus.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.waiting⊢ NodeStatus.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.rewritten⊢ NodeStatus.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).terminal⊢ False
ν: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).terminal⊢ allSettled 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).terminal⊢ False
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.pending⊢ seed ∈ 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.pending⊢ node ∈ 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.pending⊢ 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.pending⊢ node ∈ 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.pending⊢ state.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.pending⊢ state.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).terminal⊢ False
ν: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.nodes⊢ False
ν: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.pending⊢ False
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 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
classical
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:hasFailedNodes 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 statehFailed:¬hasFailedNodes 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 statehFailed:hasFailedNodes 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 All goals completed! 🐙
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statehFailed:¬hasFailedNodes 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 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 ν payload⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckState
classical
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:hasFailedNodes G state⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckStateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G state⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckState
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:hasFailedNodes G state⊢ classifyClosedGraphState 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 stuckState⊢ False
All goals completed! 🐙
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G state⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckState ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).Nonempty⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckStateν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).Nonempty⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckState
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:(directReadyNodes G state).Nonempty⊢ classifyClosedGraphState 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 stuckState⊢ False
All goals completed! 🐙
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payloadhFailed:¬hasFailedNodes G statehFrontier:¬(directReadyNodes G state).Nonempty⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 stuckState⊢ False
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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 state⊢ classifyClosedGraphState 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 stuckState⊢ False
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 state⊢ classifyClosedGraphState 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).Nonempty⊢ classifyClosedGraphState 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 state⊢ classifyGraphState G state = classifyClosedGraphState G state
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G state⊢ classifyClosedGraphState 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 ν payload⊢ classifyGraphState G state ≠ StepResult.stuck stuckState
ν:Type upayload:Type vG:DAG νstate:GraphState ν payloadhWellFormed:wellFormedGraphState G statestuckState:GraphState ν payload⊢ classifyClosedGraphState G state ≠ StepResult.stuck stuckState
All goals completed! 🐙end Cortex.Pulse