Network PlusCal's instantiation of the process and algorithm layers. Everything structural —
ProcState, CodeTable, Algebra, the three fixed points — is GuardedPlusCal's and is used
here unchanged; see Core/GuardedPlusCal/Semantics/Process.lean.
The only difference between the two languages at this level is what a process's threads
contribute. A .code thread contributes its blocks' labels and their branches, exactly as in
Guarded PlusCal. A .rx thread contributes no label — it contributes one label-free step,
Thread.rxStep, collected into the code table's relay component and taken by the process step
with no scheduled label consumed.
Every label a process owns, across all of its threads. A .rx thread owns none.
Instances For
The label each .code thread starts at — its first block's. A .rx thread owns no label and
contributes nothing.
Equations
Instances For
The paper's Ξₚ. reducing/aborting/blocking/owned match GuardedPlusCal.Process.codeTable
over the .code threads; relay collects every .rx thread's receiving step and relayBlocking
says every such thread's channel is empty.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A step at a label is a step of some thread's own block, so the label is one the process owns —
codeTable's "absent label is unschedulable" convention, read the other way round. Used at the
algorithm level to derive l ∈ ownedLabels p' straight from the step in hand, rather than carrying
ownership as a separate hypothesis to case on.
A step at a label is a step of some thread's own block, so the label is one the process owns —
codeTable's "absent label is unschedulable" convention, read the other way round. Used at the
algorithm level to derive l ∈ ownedLabels p' straight from the step in hand, rather than carrying
ownership as a separate hypothesis to case on.
Instantiating the algorithm layer #
ι = String × V: an instance is a declared process's name paired with the identity it runs under,
so every lookup below resolves the name against algo.processes and reads this language's
codeTable/ownedLabels/entryLabels off the process it finds.
Assembles a whole Algorithm's Algebra.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The instance identities a declared process contributes, read off its =/∈ form and its id
expression.
Equations
- NetworkPlusCal.Process.identities Ξ Ω p = GuardedPlusCal.identitiesOf Ξ Ω p.«=|∈» p.id
Instances For
Process.identities reads nothing but the two fields, which is what lets a pass preserving them
preserve the instances by rewriting.
A declared process's local initializers, in the shape InitProc takes them.
Instances For
Process.inits reads nothing but the declared locals, which is what lets a pass that only
extends the locals say so.
A valid initial state: the instance map holds exactly one state per declared process and identity, each at that process's entry labels under its declared initializers, and every declared channel starts empty. A characterization of membership, not an existence claim.
Equations
- One or more equations did not get rendered due to their size.