Resources

Processes are specified based on their input and output resources. Each resource is specified by its type and a π-calculus channel that receives or sends it.

Resource types

Resource types are specified by a proposition in linear logic. In HOL Light these are propositions of type `:LinProp`.

Resource type names need to follow the same naming restrictions as HOL Light variables, i.e. they need to start with a letter and contain only letters and numbers.

Resource types can be composed using the following logical connectives:

ConnectiveHOL Light SyntaxInterpretation
A ⊗ BA ** BTwo resources A and B in parallel.
A ⊕ BA ++ BOptional resource of either type A or B (not both).

Different combinations of these operators can be used to express composite resource types of arbitrary complexity.

Typically, composite resource types involving these 2 operators represent output resources. In contrast, input resources are expressed as the negation of output resources, using the operator NEG.

For example, this means the type `NEG (A ** B)` represents two parallel input resources.

Negated duals of the ⊗ and ⊕ operators do exist and are as follows:

ConnectiveDualHOL Light Syntax
A ⊗ BA ⅋ BA % B
A ⊕ BA & BA & B

For example, this makes the followning expressions equivalent: NEG (A ** B) = NEG A % NEG B

However, the reasoner is developed to work with polarized types, i.e. resource types that only use the ⊗ and ⊕ connectives and the negations of such types.

Mixing up input and output connectives and arbitrary negations may lead to unpredictable results.

This means that, for process specification and composition, you are expected to use atomic resource types or composite ones with the ⊗ and ⊕ operators. If you need to explicitly state that a resource type is an input, then negate the whole term using NEG().

The reasoner often allows you to not even use NEG when a resource type is unambiguously expected to be an input.

All binary operators are right-associative. For example: A ** B ** C = A ** (B ** C).

Channels

Each resource type in a process specification is either received (input) or sent (output) through a π-calculus channel. Generally, the reasoner aims to minimize the user's interaction with π-calculus components. In the case of channels, the reasoner will automatically generate appropriate channel names for each resource. We present the channel syntax here for reference when it appears in various results.

We say that a resource type or proposition is annotated with a π-calculus channel to form a term.

At a high level, annotations simply appear as pairs of resource types and channels.

At the logic level, the corresponding type of a term in HOL Light is `:(num)LinTerm`.

Note the use of numbers (num) in that type. This represents the type of channels, which in principle could be any desired HOL Light type. Numbers make many reasoning tasks easier, though for the most part in practice we work with named variables for channels.

Resource annotation is accomplished in the logic with the HOL Light operator <>.

For example, the term `(A ** B) <> c` represents a channel c carrying an output resource of type A ** B or, more specifically, two output resources of type s A and B respectively in parallel.