Documentation

Core.NetworkPlusCal.Semantics.Process

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.

Equations
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
          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.

            Equations
            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.
              Instances For