Re:Encoding pi calculus in Calculus of Structures

Alessio Guglielmi <Alessio.Guglielmi-r/[email protected]>
Newsgroups gmane.science.mathematics.frogs
Message-ID <[email protected]>
Hello,

I have a few comments and questions about Alwen's message. I started 
thinking about the problem he proposes and it looks like I'm arriving 
at his same conclusion. Perhaps it's not bad, for the people 
interested, to have a rather extensive account of this matter, so 
here it is. I hope something good can come out of this stuff, it 
looks like it's possible.

I should perhaps say about my point of view on proof theory and 
concurrency. Very simply: we know that in concurrency there is a 
duality sender/receiver; then, proof theory should help in the design 
of process algebras that fully exploit the duality.

Clearly, theorems like cut elimination and Craig's interpolation are 
sort of ultimate tests about the good design wrt duality. Deductive 
systems enjoying these properties are then amenable to extensive 
manipulation and enjoy combinatorial properties (especially in deep 
inference) that people exploit for practical purposes like 
verification.

So, I think that:

1) It's important to try to capture process algebras, like CCS and 
the pi-calculus, in a proof theoretic setting with cut elimination 
etc.

2) This does not mean that we have fully to respect the process 
algebras we want to capture: on the contrary, I'd expect proof theory 
to provide feedback for making them better.

3) The actual logic used for the capture is rather irrelevant, 
provided we get good combinatorial properties.

Point 3 is important, let me comment a bit about that. I've heard 
several times that `we better stick to very well-know logics', like 
classical logic and perhaps linear logic. I believe that this might 
be wrong, and the reason is that we don't have universally accepted 
and well-studied semantics of proofs for these and other formalisms, 
*with an obvious relevance to concurrency*.

In other words, what matters is understanding the combinatorics of 
proofs that closely correspond to computations, and this has nothing 
to do with the semantics of formulae, which usually is what drives 
the proponents of classical logic. Yes, we can express everything in 
classical logic, but what does this tell us? (This reminds me of the 
mantra of logic programming, where people are proud of `having a 
clear semantics' and then nobody uses it, because in fact it's no use)

Instead, there are now two broad research efforts about semantics of 
proofs (in whatever logics) and semantics of concurrent computation 
that could very well join forces in the near future. I'm thinking 
here, of course, to the use of algebraic topology methods; I think 
this is our future.

Sorry, this message is getting long. Please tell me what you think 
about the previous opinions, am I wrong? Anyway, let's get to the 
point of Alwen's message, which is about capturing scoping mechanisms 
in deductive systems.

Basically, I'd like to understand the problem better; please consider 
that I'm no expert at all. For the notation, I'm going to use that of 
Robin Milner's `Communicating and Mobile Systems: The Pi-calculus' 
(it's a very nice book which I recommend, especially to students).

I will also use some deep inference/CoS notation. Most of the 
background for this can be found in Paola Bruscoli's paper 
<http://iccl.tu-dresden.de/~paola/bvl/bvl.pdf>, where she makes the 
correspondence between a subset of CCS and CoS system BV.

We have to distinguish two scoping mechanisms, and I believe they 
should be dealt with separately, at least initially.


RESTRICTION
-----------

The *restriction*

    new a P

construct, intuitively, simply means that the name a is private in P, 
and so the action a cannot be observed from outside P. Examples:

    new a (a | -a | b) | a | -b   -->   new a b | a | -b   and
           -   --
    new a (a | -a | b) | a | -b   -->   new a (a | -a) | a
                    -        --

are valid transitions, both labeled by tau (se they also are 
reactions), and I underscored the relative redexes. A non-valid 
transition would be going

    from   new a (a | -a | b) | a | -b   to   new a (a | b) | -b ,

because the a external to the leftmost process in the | cannot see 
the -a, which is protected by new a.

This mechanism is common to CCS and the pi-calculus (it can also be 
denoted by the nu operator and by the /_ suffix).

How can we capture its behaviour? In deep inference, the fact that -> 
is a congruence is already taken care of by deep inference itself, so 
we basically just need a rule that states that names are private:

    S{P[a/b]}
    ---------- ,   b not free in S{ } .
    S{new a P}

This rule is not very much in the spirit of CoS, but this is not the 
biggest problem  (actually, if it worked it wouldn't be a problem at 
all).

The problem is answering the question: what is the dual of new? The 
natural thing that comes to mind is to consider new self-dual. After 
all, why not? Scoping should be just a matter of bookkeeping like 
contraction and weakening, and they do are self-dual!

However, if we take R = new a a, then we have that -R = new a -a. 
Clearly, [R,-R] should be provable, but this would mean that there is 
a transition

    from   new a a | new a -a   to   0 ,

which is of course impossible, because R and -R actually cannot 
communicate on any channel.

So, if new is not self-dual, what is the behaviour of its dual? An 
experiment could be the following:
a) consider new a kind of `universal' quantification;
b) introduce its dual, call it `wen';
c) take quantification as is done in Kai Bruennler's thesis 
<http://www.iam.unibe.ch/~kai/Papers/phd.pdf>, and remove every 
equation and every rule for quantifiers from system SKS, except for 
the core rule, which we need.

Then, we only have the rule

          S{new a[R,T]}
    u_ ------------------- ,
       S[new a R, wen a T]

which corresponds to a tau-transition (or, if you like, reaction)

    new a R | wen a T   -->   new a (R | T) .

This would solve the problem mentioned above, because new a a | wen a 
-a should be reducible to 0.

Does it make any sense in concurrency? It looks strange to me, it's 
sort of a way of tapping into private communication channels (by 
simply knowing their names), or, if you prefer, to dynamically update 
a certain network configuration, boh? An interesting property seems 
to be the following. Consider

    R = wen a R' ,
    T = new a T' ,
    U = new a U' ;

two reactions are possible:

    R | T | U   -->   new a (R' | T') | U   and
    R | T | U   -->   T | new a (R' | U') .

So, it looks like the wen construct allows a process (R) to be part 
of the `internal network' of any process whose private channel it 
knows the name, and then, once one of the processes is chosen (T or 
U), then R commits and cannot escape anymore. In this sense of 
choice, wen looks appropriate as an existential-like quantification. 
Maybe it does make some `mobility' sense after all... What do you 
think?

Anyway, one can go on with the experiment by adding u_ to system BV 
and then seeing whether cut elimination can work, presumably by 
building on my splitting proof (you find this stuff in my paper `A 
System of Interaction and Structure' 
<http://iccl.tu-dresden.de/~guglielm/p/SystIntStr.pdf>). It might be 
necessary to introduce new laws (equations, maybe) about new/wen, and 
this would give more information on the nature of the quantifier. It 
might be worthy to have a look at this, I don't know. If you do, 
please let me know, I'm very interested.


INPUT/OUTPUT
------------

This is a place where the pi-calculus seems to need improvement. In 
CCS, communication is perfectly symmetric:

    a | -a   -->   0 ,

and this of course corresponds to a nice rule in CoS:

         S{0}
    ai_ ------- .
        S[a,-a]

This is not the case with the pi-calculus (unless I'm not able to see 
it). Here, you have the constructs

    a(x)    (receive x along a)   and
    -a<x>   (send x along a) ;

in addition, a(x).P binds the name x in P, while this is not the case 
for -a<x>.P.

This is already an asymmetry, and then there's the reaction rule

    a(x).P | -a<y>.Q   -->   P[x/y] | Q .

Clearly, this reaction cannot be taken as a basis for a rule 
(contrary to the CCS case), rather, it should perhaps be the final 
outcome of several derivation steps. For example, something like (I 
guess this is exactly what Alwen was proposing in his last message):

                [P[x/y],Q]
    ai_ ---------------------------
        < [a_y,-a_y] ; [P[x/y],Q] >
     q_ ----------------------------
        [ <a_y;P[x/y]>  , <-a_y;Q> ]
      = ----------------------------
        [ <a_x;P>[x/y]  , <-a_y;Q> ]
     n_ ---------------------------- .
        [ wen x.<a_x;P> , <-a_y;Q> ]

Here, I make a number of hypotheses:

1) We use BV (or BVL, as in Paola's paper).

2) a(x).P is expressed as wen x.<a_x;P>.

3) -a<y>.Q is expressed as <-a_y;Q>.

4) a_x is to be intended as a normal unary predicate a(x), I don't 
use this notation because it conflicts with the rest.

5) Like any good existential quantification, wen is subject to the n_ rule:

       S{P[x/Q]}
    n_ ---------- ,
       S{wen x P}

where Q is any process (we have to be careful here, of course we are 
doing some sort of second order propositional logic).

We have to test negation, so take process a(x); its dual is then new 
x -a<x>. Is

    a(x) | new x -a<x>   -->   0

a valid reaction? YES, it is (unless I'm horribly mistaken)! By the 
way (if I'm not double-horribly mistaken), this should be the so 
called phenomenon of `scope extrusion' in the pi-calculus.

The dual of -a<y> is simply a_y, in BV notation, and it does not have 
a correspondence in the pi-calculus, but it could be naturally 
interpreted as an input prefix which doesn't bind y. We can of course 
use it for a synchronisation that carries no value, as in

    -a<y>.P | a<y>.Q   -->   P | Q ,

where I use a<y> for the non-binding version of a(y).

So, it looks like there is some room for maneuvering here, and I'd 
like to hear your opinions.

One more point. Clearly, after introducing n_, one should ask whether 
what the proof theory can do is still sound wrt the pi-calculus. In 
other words, don't we derive more than just what corresponds to the 
computation we want?

Clearly, n_ poses a problem, in that any process a(x).P can 
spontaneously decay into P[x/Q] for any Q. How should we interpret 
this fact? If we only go for computation that terminate in 0, then 
the answer should be straightforward (albeit perhaps technically 
challenging): Q can only instantiate x if later in the computation 
some communication is actually able to match Q.

This would be nothing really new, it entails coming up with a lazy 
version of BV + {u_,n_} which only applies n_ together with ai_, 
i.e., it ties instantiation with actual communication. One should 
then prove that the lazy system and the normal one are equivalent 
over provability.

By the way, this is exactly what happens between Paola's BVL and BV, 
where BVL is the lazy version of BV (wrt to inferring on sequential 
constructs). Proving the equivalence can be very challenging, and, as 
a matter of fact, it's still open whether BVL and BV are equivalent 
(Paola gets away with it by resorting to a further, harmless 
restriction, for which she can more easily get the correspondence).

So, if what I wrote above is not total crap, there should be actually 
the possibility of some exciting developments. So far, the problem 
with asymmetric communication in the pi-calculus looked very nasty to 
me, but perhaps this is just a matter of breaking it into smaller 
pieces (old story...).

By the way, I've updated the part related to language design in the 
current topics page <http://alessio.guglielmi.name/res/cos/crt.html>. 
Please react.

Ciao,

-Alessio
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.