Cortex.Wire.AdmissionArtifact.PrimitiveTraceCheck


On this page
  1. Overview
Imports

Overview

Executable primitive-trace replay checks for decoded Wire admission artifacts.

PrimitiveTraceStackValid is currently relational: it says there exists a final primitive replay frame produced by the serialized postorder trace and that the frame matches the artifact summary. This module adds the first Lean-owned executable checker for that relation. The checker is not yet the full artifact validator; it is a sound executable core for one validator field.

namespace Cortex.Wirenamespace AdmissionArtifactopen Cortex.Wire.ElaborationIRnamespace WireAdmissionArtifact

Boolean form of SelectInternalTraceExit.

def selectInternalTraceExitCheck (artifact : WireAdmissionArtifact) (exit : AdmissionBoundaryPort) : Bool := artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit

The boolean hidden-exit classifier is exact for the relational classifier.

theorem selectInternalTraceExitCheck_eq_true_iff {artifact : WireAdmissionArtifact} {exit : AdmissionBoundaryPort} : artifact.selectInternalTraceExitCheck exit = true artifact.SelectInternalTraceExit exit := artifact:WireAdmissionArtifactexit:AdmissionBoundaryPortartifact.selectInternalTraceExitCheck exit = true artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexit:AdmissionBoundaryPort(artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = true artifact:WireAdmissionArtifactexit:AdmissionBoundaryPort(artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = trueartifact:WireAdmissionArtifactexit:AdmissionBoundaryPort(∃ selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = true) (artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true artifact:WireAdmissionArtifactexit:AdmissionBoundaryPort(artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = true artifact:WireAdmissionArtifactexit:AdmissionBoundaryPorthCheck:(artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = true artifact:WireAdmissionArtifactexit:AdmissionBoundaryPorthCheck:(artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = trueselectAdmission:SelectAdmissionArtifacthSelect:selectAdmission artifact.selectshChoice:SelectInternalChoiceExit selectAdmission exit = true selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = true All goals completed! 🐙 artifact:WireAdmissionArtifactexit:AdmissionBoundaryPort(∃ selectAdmission artifact.selects, SelectInternalChoiceExit selectAdmission exit = true) (artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true artifact:WireAdmissionArtifactexit:AdmissionBoundaryPortselectAdmission:SelectAdmissionArtifacthSelect:selectAdmission artifact.selectshChoice:SelectInternalChoiceExit selectAdmission exit = true(artifact.selects.any fun selectAdmission => SelectInternalChoiceExit selectAdmission exit) = true All goals completed! 🐙

Source-visible primitive node exits after erasing select-internal bridge exits.

def visiblePrimitiveExits (artifact : WireAdmissionArtifact) (exits : List AdmissionBoundaryPort) : List AdmissionBoundaryPort := exits.filter fun exit => !(artifact.selectInternalTraceExitCheck exit)

The executable visible-exit filter matches the primitive replay relation.

theorem mem_visiblePrimitiveExits_iff {artifact : WireAdmissionArtifact} {exits : List AdmissionBoundaryPort} {exit : AdmissionBoundaryPort} : exit artifact.visiblePrimitiveExits exits exit exits ¬ artifact.SelectInternalTraceExit exit := artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit artifact.visiblePrimitiveExits exits exit exits ¬artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit List.filter (fun exit => !artifact.selectInternalTraceExitCheck exit) exits exit exits ¬artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit exits (!artifact.selectInternalTraceExitCheck exit) = true exit exits ¬artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit exits (!artifact.selectInternalTraceExitCheck exit) = true exit exits ¬artifact.SelectInternalTraceExit exitartifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit exits ¬artifact.SelectInternalTraceExit exit exit exits (!artifact.selectInternalTraceExitCheck exit) = true artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit exits (!artifact.selectInternalTraceExitCheck exit) = true exit exits ¬artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits (!artifact.selectInternalTraceExitCheck exit) = trueexit exits ¬artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits (!artifact.selectInternalTraceExitCheck exit) = true¬artifact.SelectInternalTraceExit exit artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits (!artifact.selectInternalTraceExitCheck exit) = truehHidden:artifact.SelectInternalTraceExit exitFalse artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits (!artifact.selectInternalTraceExitCheck exit) = truehHidden:artifact.SelectInternalTraceExit exithCheck:artifact.selectInternalTraceExitCheck exit = trueFalse artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits (!true) = truehHidden:artifact.SelectInternalTraceExit exithCheck:artifact.selectInternalTraceExitCheck exit = trueFalse All goals completed! 🐙 artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPortexit exits ¬artifact.SelectInternalTraceExit exit exit exits (!artifact.selectInternalTraceExitCheck exit) = true artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits ¬artifact.SelectInternalTraceExit exitexit exits (!artifact.selectInternalTraceExitCheck exit) = true artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits ¬artifact.SelectInternalTraceExit exit(!artifact.selectInternalTraceExitCheck exit) = true cases hCheck : artifact.selectInternalTraceExitCheck exit with artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits ¬artifact.SelectInternalTraceExit exithCheck:artifact.selectInternalTraceExitCheck exit = false(!false) = true All goals completed! 🐙 artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits ¬artifact.SelectInternalTraceExit exithCheck:artifact.selectInternalTraceExitCheck exit = true(!true) = true artifact:WireAdmissionArtifactexits:List AdmissionBoundaryPortexit:AdmissionBoundaryPorthMem:exit exits ¬artifact.SelectInternalTraceExit exithCheck:artifact.selectInternalTraceExitCheck exit = truehHidden:artifact.SelectInternalTraceExit exit(!true) = true All goals completed! 🐙

Execute one primitive trace replay step, rejecting stack-shape or ledger mismatches.

def primitiveTraceStepCheck (artifact : WireAdmissionArtifact) (stack : List PrimitiveTraceFrame) : PrimitiveGraphStep Option (List PrimitiveTraceFrame) | PrimitiveGraphStep.empty => some (PrimitiveTraceFrame.empty :: stack) | PrimitiveGraphStep.node node entries exits => some (PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits) :: stack) | PrimitiveGraphStep.bindingRef binding => match stack with | frame :: rest => some ({ frame with bindingRefs := binding :: frame.bindingRefs } :: rest) | [] => none | PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings => match stack with | right :: left :: rest => if _hLeftNodes : leftNodes.Perm left.nodes then if _hRightNodes : rightNodes.Perm right.nodes then if _hLeftBindings : leftBindings.Perm left.bindingRefs then if _hRightBindings : rightBindings.Perm right.bindingRefs then some (PrimitiveTraceFrame.overlay left right :: rest) else none else none else none else none | [] => none | _only :: [] => none | PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries => match stack with | right :: left :: rest => if _hLeftExits : leftExits.Perm left.exits then if _hRightEntries : rightEntries.Perm right.entries then if _hUnmatchedLeft : ((matchedPairs.map (fun pair => pair.fromPort)) ++ unmatchedLeftExits).Perm left.exits then if _hUnmatchedRight : ((matchedPairs.map (fun pair => pair.toPort)) ++ unmatchedRightEntries).Perm right.entries then some (PrimitiveTraceFrame.connect left right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) else none else none else none else none | [] => none | _only :: [] => none

Successful executable primitive-step replay is accepted by the relational replay step.

theorem primitiveTraceStepCheck_sound {artifact : WireAdmissionArtifact} {stack next : List PrimitiveTraceFrame} {step : PrimitiveGraphStep} (hCheck : artifact.primitiveTraceStepCheck stack step = some next) : PrimitiveTraceStep artifact.SelectInternalTraceExit stack step next := artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramestep:PrimitiveGraphStephCheck:artifact.primitiveTraceStepCheck stack step = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack step next cases step with artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck stack PrimitiveGraphStep.empty = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack PrimitiveGraphStep.empty next artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramehCheck:(match PrimitiveGraphStep.empty with | PrimitiveGraphStep.empty => some (PrimitiveTraceFrame.empty :: stack) | PrimitiveGraphStep.node node entries exits => some (PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits) :: stack) | PrimitiveGraphStep.bindingRef binding => match stack with | frame :: rest => some ({ nodes := frame.nodes, bindingRefs := binding :: frame.bindingRefs, entries := frame.entries, exits := frame.exits, connections := frame.connections } :: rest) | [] => none | PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings => match stack with | right :: left :: rest => if _hLeftNodes : leftNodes.Perm left.nodes then if _hRightNodes : rightNodes.Perm right.nodes then if _hLeftBindings : leftBindings.Perm left.bindingRefs then if _hRightBindings : rightBindings.Perm right.bindingRefs then some (left.overlay right :: rest) else none else none else none else none | [] => none | [_only] => none | PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries => match stack with | right :: left :: rest => if _hLeftExits : leftExits.Perm left.exits then if _hRightEntries : rightEntries.Perm right.entries then if _hUnmatchedLeft : (List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exits then if _hUnmatchedRight : (List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entries then some (left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) else none else none else none else none | [] => none | [_only] => none) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack PrimitiveGraphStep.empty next artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramePrimitiveTraceStep artifact.SelectInternalTraceExit stack PrimitiveGraphStep.empty (PrimitiveTraceFrame.empty :: stack) All goals completed! 🐙 artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramenode:NodeIdentries:List AdmissionBoundaryPortexits:List AdmissionBoundaryPorthCheck:artifact.primitiveTraceStepCheck stack (PrimitiveGraphStep.node node entries exits) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.node node entries exits) next artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramenode:NodeIdentries:List AdmissionBoundaryPortexits:List AdmissionBoundaryPorthCheck:(match PrimitiveGraphStep.node node entries exits with | PrimitiveGraphStep.empty => some (PrimitiveTraceFrame.empty :: stack) | PrimitiveGraphStep.node node entries exits => some (PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits) :: stack) | PrimitiveGraphStep.bindingRef binding => match stack with | frame :: rest => some ({ nodes := frame.nodes, bindingRefs := binding :: frame.bindingRefs, entries := frame.entries, exits := frame.exits, connections := frame.connections } :: rest) | [] => none | PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings => match stack with | right :: left :: rest => if _hLeftNodes : leftNodes.Perm left.nodes then if _hRightNodes : rightNodes.Perm right.nodes then if _hLeftBindings : leftBindings.Perm left.bindingRefs then if _hRightBindings : rightBindings.Perm right.bindingRefs then some (left.overlay right :: rest) else none else none else none else none | [] => none | [_only] => none | PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries => match stack with | right :: left :: rest => if _hLeftExits : leftExits.Perm left.exits then if _hRightEntries : rightEntries.Perm right.entries then if _hUnmatchedLeft : (List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exits then if _hUnmatchedRight : (List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entries then some (left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) else none else none else none else none | [] => none | [_only] => none) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.node node entries exits) next artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenode:NodeIdentries:List AdmissionBoundaryPortexits:List AdmissionBoundaryPortPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.node node entries exits) (PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits) :: stack) All goals completed! 🐙 artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramebinding:BindingNamehCheck:artifact.primitiveTraceStepCheck stack (PrimitiveGraphStep.bindingRef binding) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.bindingRef binding) next artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramebinding:BindingNamehCheck:(match PrimitiveGraphStep.bindingRef binding with | PrimitiveGraphStep.empty => some (PrimitiveTraceFrame.empty :: stack) | PrimitiveGraphStep.node node entries exits => some (PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits) :: stack) | PrimitiveGraphStep.bindingRef binding => match stack with | frame :: rest => some ({ nodes := frame.nodes, bindingRefs := binding :: frame.bindingRefs, entries := frame.entries, exits := frame.exits, connections := frame.connections } :: rest) | [] => none | PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings => match stack with | right :: left :: rest => if _hLeftNodes : leftNodes.Perm left.nodes then if _hRightNodes : rightNodes.Perm right.nodes then if _hLeftBindings : leftBindings.Perm left.bindingRefs then if _hRightBindings : rightBindings.Perm right.bindingRefs then some (left.overlay right :: rest) else none else none else none else none | [] => none | [_only] => none | PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries => match stack with | right :: left :: rest => if _hLeftExits : leftExits.Perm left.exits then if _hRightEntries : rightEntries.Perm right.entries then if _hUnmatchedLeft : (List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exits then if _hUnmatchedRight : (List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entries then some (left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) else none else none else none else none | [] => none | [_only] => none) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.bindingRef binding) next cases stack with artifact:WireAdmissionArtifactnext:List PrimitiveTraceFramebinding:BindingNamehCheck:(match PrimitiveGraphStep.bindingRef binding with | PrimitiveGraphStep.empty => some [PrimitiveTraceFrame.empty] | PrimitiveGraphStep.node node entries exits => some [PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits)] | PrimitiveGraphStep.bindingRef binding => match [] with | frame :: rest => some ({ nodes := frame.nodes, bindingRefs := binding :: frame.bindingRefs, entries := frame.entries, exits := frame.exits, connections := frame.connections } :: rest) | [] => none | PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings => match [] with | right :: left :: rest => if _hLeftNodes : leftNodes.Perm left.nodes then if _hRightNodes : rightNodes.Perm right.nodes then if _hLeftBindings : leftBindings.Perm left.bindingRefs then if _hRightBindings : rightBindings.Perm right.bindingRefs then some (left.overlay right :: rest) else none else none else none else none | [] => none | [_only] => none | PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries => match [] with | right :: left :: rest => if _hLeftExits : leftExits.Perm left.exits then if _hRightEntries : rightEntries.Perm right.entries then if _hUnmatchedLeft : (List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exits then if _hUnmatchedRight : (List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entries then some (left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) else none else none else none else none | [] => none | [_only] => none) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit [] (PrimitiveGraphStep.bindingRef binding) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFramebinding:BindingNameframe:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:(match PrimitiveGraphStep.bindingRef binding with | PrimitiveGraphStep.empty => some (PrimitiveTraceFrame.empty :: frame :: rest) | PrimitiveGraphStep.node node entries exits => some (PrimitiveTraceFrame.nodeFrame node entries (artifact.visiblePrimitiveExits exits) :: frame :: rest) | PrimitiveGraphStep.bindingRef binding => match frame :: rest with | frame :: rest => some ({ nodes := frame.nodes, bindingRefs := binding :: frame.bindingRefs, entries := frame.entries, exits := frame.exits, connections := frame.connections } :: rest) | [] => none | PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings => match frame :: rest with | right :: left :: rest => if _hLeftNodes : leftNodes.Perm left.nodes then if _hRightNodes : rightNodes.Perm right.nodes then if _hLeftBindings : leftBindings.Perm left.bindingRefs then if _hRightBindings : rightBindings.Perm right.bindingRefs then some (left.overlay right :: rest) else none else none else none else none | [] => none | [_only] => none | PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries => match frame :: rest with | right :: left :: rest => if _hLeftExits : leftExits.Perm left.exits then if _hRightEntries : rightEntries.Perm right.entries then if _hUnmatchedLeft : (List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exits then if _hUnmatchedRight : (List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entries then some (left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) else none else none else none else none | [] => none | [_only] => none) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit (frame :: rest) (PrimitiveGraphStep.bindingRef binding) next artifact:WireAdmissionArtifactbinding:BindingNameframe:PrimitiveTraceFramerest:List PrimitiveTraceFramePrimitiveTraceStep artifact.SelectInternalTraceExit (frame :: rest) (PrimitiveGraphStep.bindingRef binding) ({ nodes := frame.nodes, bindingRefs := binding :: frame.bindingRefs, entries := frame.entries, exits := frame.exits, connections := frame.connections } :: rest) All goals completed! 🐙 artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNamehCheck:artifact.primitiveTraceStepCheck stack (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next cases stack with artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNamehCheck:artifact.primitiveTraceStepCheck [] (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit [] (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrametail:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: tail) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: tail) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next cases tail with artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck [right] (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit [right] (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:¬leftNodes.Perm left.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:¬rightNodes.Perm right.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:¬leftBindings.Perm left.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefshRightBindings:rightBindings.Perm right.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefshRightBindings:¬rightBindings.Perm right.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefshRightBindings:rightBindings.Perm right.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefshRightBindings:rightBindings.Perm right.bindingRefshCheck:left.overlay right :: rest = nextPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next artifact:WireAdmissionArtifactleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefshRightBindings:rightBindings.Perm right.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) (left.overlay right :: rest) All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:leftBindings.Perm left.bindingRefshRightBindings:¬rightBindings.Perm right.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:rightNodes.Perm right.nodeshLeftBindings:¬leftBindings.Perm left.bindingRefsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:leftNodes.Perm left.nodeshRightNodes:¬rightNodes.Perm right.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftNodes:List NodeIdrightNodes:List NodeIdleftBindings:List BindingNamerightBindings:List BindingNameright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) = some nexthLeftNodes:¬leftNodes.Perm left.nodesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.overlay leftNodes rightNodes leftBindings rightBindings) next All goals completed! 🐙 artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramenext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPorthCheck:artifact.primitiveTraceStepCheck stack (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit stack (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next cases stack with artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPorthCheck:artifact.primitiveTraceStepCheck [] (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit [] (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrametail:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: tail) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: tail) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next cases tail with artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck [right] (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit [right] (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nextPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:¬leftExits.Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:¬rightEntries.Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:¬(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitshUnmatchedRight:(List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) nextartifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitshUnmatchedRight:¬(List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitshUnmatchedRight:(List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitshUnmatchedRight:(List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entrieshCheck:left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest = nextPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next artifact:WireAdmissionArtifactleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitshUnmatchedRight:(List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) (left.connect right matchedPairs unmatchedLeftExits unmatchedRightEntries :: rest) All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitshUnmatchedRight:¬(List.map (fun pair => pair.toPort) matchedPairs ++ unmatchedRightEntries).Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:rightEntries.Perm right.entrieshUnmatchedLeft:¬(List.map (fun pair => pair.fromPort) matchedPairs ++ unmatchedLeftExits).Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:leftExits.Perm left.exitshRightEntries:¬rightEntries.Perm right.entriesPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next All goals completed! 🐙 artifact:WireAdmissionArtifactnext:List PrimitiveTraceFrameleftExits:List AdmissionBoundaryPortrightEntries:List AdmissionBoundaryPortmatchedPairs:List AdmissionConnectionunmatchedLeftExits:List AdmissionBoundaryPortunmatchedRightEntries:List AdmissionBoundaryPortright:PrimitiveTraceFrameleft:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:artifact.primitiveTraceStepCheck (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) = some nexthLeftExits:¬leftExits.Perm left.exitsPrimitiveTraceStep artifact.SelectInternalTraceExit (right :: left :: rest) (PrimitiveGraphStep.connect leftExits rightEntries matchedPairs unmatchedLeftExits unmatchedRightEntries) next All goals completed! 🐙

Execute the primitive trace stack from a starting stack.

def primitiveTraceReplayCheck (artifact : WireAdmissionArtifact) : List PrimitiveGraphStep List PrimitiveTraceFrame Option (List PrimitiveTraceFrame) | [], stack => some stack | step :: rest, stack => match artifact.primitiveTraceStepCheck stack step with | none => none | some next => artifact.primitiveTraceReplayCheck rest next

Successful executable primitive-trace replay is accepted by the relational replay.

theorem primitiveTraceReplayCheck_sound {artifact : WireAdmissionArtifact} {steps : List PrimitiveGraphStep} {stack finalStack : List PrimitiveTraceFrame} (hCheck : artifact.primitiveTraceReplayCheck steps stack = some finalStack) : PrimitiveTraceReplays artifact.SelectInternalTraceExit steps stack finalStack := artifact:WireAdmissionArtifactsteps:List PrimitiveGraphStepstack:List PrimitiveTraceFramefinalStack:List PrimitiveTraceFramehCheck:artifact.primitiveTraceReplayCheck steps stack = some finalStackPrimitiveTraceReplays artifact.SelectInternalTraceExit steps stack finalStack induction steps generalizing stack with artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestack:List PrimitiveTraceFramehCheck:artifact.primitiveTraceReplayCheck [] stack = some finalStackPrimitiveTraceReplays artifact.SelectInternalTraceExit [] stack finalStack artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestack:List PrimitiveTraceFramehCheck:some stack = some finalStackPrimitiveTraceReplays artifact.SelectInternalTraceExit [] stack finalStack artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramePrimitiveTraceReplays artifact.SelectInternalTraceExit [] finalStack finalStack All goals completed! 🐙 artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestep:PrimitiveGraphSteprest:List PrimitiveGraphStepih: {stack : List PrimitiveTraceFrame}, artifact.primitiveTraceReplayCheck rest stack = some finalStack PrimitiveTraceReplays artifact.SelectInternalTraceExit rest stack finalStackstack:List PrimitiveTraceFramehCheck:artifact.primitiveTraceReplayCheck (step :: rest) stack = some finalStackPrimitiveTraceReplays artifact.SelectInternalTraceExit (step :: rest) stack finalStack artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestep:PrimitiveGraphSteprest:List PrimitiveGraphStepih: {stack : List PrimitiveTraceFrame}, artifact.primitiveTraceReplayCheck rest stack = some finalStack PrimitiveTraceReplays artifact.SelectInternalTraceExit rest stack finalStackstack:List PrimitiveTraceFramehCheck:(match artifact.primitiveTraceStepCheck stack step with | none => none | some next => artifact.primitiveTraceReplayCheck rest next) = some finalStackPrimitiveTraceReplays artifact.SelectInternalTraceExit (step :: rest) stack finalStack cases hStep : artifact.primitiveTraceStepCheck stack step with artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestep:PrimitiveGraphSteprest:List PrimitiveGraphStepih: {stack : List PrimitiveTraceFrame}, artifact.primitiveTraceReplayCheck rest stack = some finalStack PrimitiveTraceReplays artifact.SelectInternalTraceExit rest stack finalStackstack:List PrimitiveTraceFramehCheck:(match artifact.primitiveTraceStepCheck stack step with | none => none | some next => artifact.primitiveTraceReplayCheck rest next) = some finalStackhStep:artifact.primitiveTraceStepCheck stack step = nonePrimitiveTraceReplays artifact.SelectInternalTraceExit (step :: rest) stack finalStack artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestep:PrimitiveGraphSteprest:List PrimitiveGraphStepih: {stack : List PrimitiveTraceFrame}, artifact.primitiveTraceReplayCheck rest stack = some finalStack PrimitiveTraceReplays artifact.SelectInternalTraceExit rest stack finalStackstack:List PrimitiveTraceFramehCheck:(match none with | none => none | some next => artifact.primitiveTraceReplayCheck rest next) = some finalStackhStep:artifact.primitiveTraceStepCheck stack step = nonePrimitiveTraceReplays artifact.SelectInternalTraceExit (step :: rest) stack finalStack All goals completed! 🐙 artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestep:PrimitiveGraphSteprest:List PrimitiveGraphStepih: {stack : List PrimitiveTraceFrame}, artifact.primitiveTraceReplayCheck rest stack = some finalStack PrimitiveTraceReplays artifact.SelectInternalTraceExit rest stack finalStackstack:List PrimitiveTraceFramehCheck:(match artifact.primitiveTraceStepCheck stack step with | none => none | some next => artifact.primitiveTraceReplayCheck rest next) = some finalStacknext:List PrimitiveTraceFramehStep:artifact.primitiveTraceStepCheck stack step = some nextPrimitiveTraceReplays artifact.SelectInternalTraceExit (step :: rest) stack finalStack artifact:WireAdmissionArtifactfinalStack:List PrimitiveTraceFramestep:PrimitiveGraphSteprest:List PrimitiveGraphStepih: {stack : List PrimitiveTraceFrame}, artifact.primitiveTraceReplayCheck rest stack = some finalStack PrimitiveTraceReplays artifact.SelectInternalTraceExit rest stack finalStackstack:List PrimitiveTraceFramenext:List PrimitiveTraceFramehCheck:(match some next with | none => none | some next => artifact.primitiveTraceReplayCheck rest next) = some finalStackhStep:artifact.primitiveTraceStepCheck stack step = some nextPrimitiveTraceReplays artifact.SelectInternalTraceExit (step :: rest) stack finalStack All goals completed! 🐙instance primitiveTraceFrameMatchesSummaryDecidable (frame : PrimitiveTraceFrame) (artifact : WireAdmissionArtifact) : Decidable (frame.MatchesSummary artifact) := frame:PrimitiveTraceFrameartifact:WireAdmissionArtifactDecidable (frame.MatchesSummary artifact) frame:PrimitiveTraceFrameartifact:WireAdmissionArtifactDecidable (frame.nodes.Perm artifact.nodes frame.bindingRefs.Perm artifact.bindingRefs frame.entries.Perm artifact.entries frame.exits.Perm artifact.exits frame.connections.Perm artifact.connections) All goals completed! 🐙

Execute primitive replay and require exactly one final frame matching the artifact summary.

def primitiveTraceStackValidCheck (artifact : WireAdmissionArtifact) : Bool := match artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false

The executable primitive-stack checker is sound for PrimitiveTraceStackValid.

theorem primitiveTraceStackValidCheck_sound {artifact : WireAdmissionArtifact} (hCheck : artifact.primitiveTraceStackValidCheck = true) : artifact.PrimitiveTraceStackValid := artifact:WireAdmissionArtifacthCheck:artifact.primitiveTraceStackValidCheck = trueartifact.PrimitiveTraceStackValid artifact:WireAdmissionArtifacthCheck:(match artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = trueartifact.PrimitiveTraceStackValid cases hReplay : artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] with artifact:WireAdmissionArtifacthCheck:(match artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = noneartifact.PrimitiveTraceStackValid artifact:WireAdmissionArtifacthCheck:(match none with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = noneartifact.PrimitiveTraceStackValid All goals completed! 🐙 artifact:WireAdmissionArtifacthCheck:(match artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truestack:List PrimitiveTraceFramehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some stackartifact.PrimitiveTraceStackValid artifact:WireAdmissionArtifactstack:List PrimitiveTraceFramehCheck:(match some stack with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some stackartifact.PrimitiveTraceStackValid cases stack with artifact:WireAdmissionArtifacthCheck:(match some [] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some []artifact.PrimitiveTraceStackValid All goals completed! 🐙 artifact:WireAdmissionArtifactfinalFrame:PrimitiveTraceFramerest:List PrimitiveTraceFramehCheck:(match some (finalFrame :: rest) with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some (finalFrame :: rest)artifact.PrimitiveTraceStackValid cases rest with artifact:WireAdmissionArtifactfinalFrame:PrimitiveTraceFramehCheck:(match some [finalFrame] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some [finalFrame]artifact.PrimitiveTraceStackValid artifact:WireAdmissionArtifactfinalFrame:PrimitiveTraceFramehCheck:(match some [finalFrame] with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some [finalFrame]hMatch:finalFrame.MatchesSummary artifactartifact.PrimitiveTraceStackValid All goals completed! 🐙 artifact:WireAdmissionArtifactfinalFrame:PrimitiveTraceFramenext:PrimitiveTraceFrametail:List PrimitiveTraceFramehCheck:(match some (finalFrame :: next :: tail) with | some [finalFrame] => decide (finalFrame.MatchesSummary artifact) | some [] => false | some (_first :: _second :: _rest) => false | none => false) = truehReplay:artifact.primitiveTraceReplayCheck artifact.primitiveSteps [] = some (finalFrame :: next :: tail)artifact.PrimitiveTraceStackValid All goals completed! 🐙end WireAdmissionArtifactend AdmissionArtifactend Cortex.Wire