Submitted to: YR-CONCUR 2010 Concurrent pattern calculus in bondi Thomas Given-Wilson QCIS & School of Software, University of Technology, Sydney, Australia Thomas.Given-Wilson@uts.edu.au In concurrent pattern calculus two processes interact through pattern unification. This atomic interac- tion supports input, output and tests for equality to be performed by both processes simultaneously, as is natural when exchange or trade. The bondi programming language has been augmented to support concurrent pattern calculus. Introduction The concurrent pattern calculus (CPC) [3] drives interaction by pattern unification. This allows input, output and tests for equality for be performed simultaneously as an atomic interaction. Such interaction is natural in trade where both parties exchange information. This paper presents an augmentation of the bondi programming language [1] to support CPC. The concurrent pattern calculus The concurrent pattern calculus generalises the π -calculus [6] by replacing the input and output prefixes by patterns and with interaction driven by pattern unification. The resulting calculus supports exchange while supporting encodings of many popular process calculi such as π -calculus, spi calculus [4] and Linda [2]. The generalisation of prefixes requires the pattern unification support input, output and tests for equality. This is best illustrated through the translation of π -calculus prefixes into CPC cases p P with pattern p and body P: [[n(x).P]] = (n λ x z) [[P]] fresh z [[ny.P]] = (n y λ z) [[P]] fresh z . The channel name n is translated into a protected name n that can only be checked for equality in unification. The input x is translated into a binding name λ x that binds in unification. The output name y is translated to a variable name y that may be bound or tested for equality in unification. The components of patterns are combined into one using the compound . The fresh name z prevents translated outputs matching against other outputs. More formally the patterns p, q and processes P , Q of CPC are given by p, q ::= x | x | λ x | p q P , Q ::= 0 | P|Q | !P | (ν x)P | p P . The unification of two patterns p and q seeks substitutions for the binding names in p and q to unify them. A variable name x can be unified with x or x to generate empty substitutions. Similarly a protected name x can be unified with x or x . A binding name λ x binds any pattern that contains