concurrent constraint programming
This paper presents a new and very rich class of (concurrent) programming languages, based on the notion of computing with partial information , and the concomitant notions of consistency and entailment. 1 In this framework, computation emerges from the interaction of concurrently executing agents that communicate by placing, checking and instantiating constraints on shared variables. Such a view of computation is interesting in the context of programming languages because of the ability to represent and manipulate partial information about the domain of discourse, in the context of concurrency because of the use of constraints for communication and control, and in the context of AI because of the availability of simple yet powerful mechanisms for controlling inference, and the promise that very rich representational/programming languages, sharing the same set of abstract properties, may be possible. To reflect this view of computation, [Sar89] develops the cc family of languages. We present here one member of the family, cc(?, ?) (pronounced cc with Ask and Choose) which provides the basic operations of blocking Ask and atomic Tell and an algebra of behaviors closed under prefixing, indeterministic choice, interleaving, and hiding, and provides a mutual recursion operator. cc(?, ?) is (intentionally!) very similar to Milner's CCS, but for the radically different underlying concept of communication, which, in fact, provides a generaland elegantalternative approach to value-passing in CCS. At the same time it adequately captures the framework of committed choice concurrent logic programming languages. We present the rules of behavior for cc agents, motivate a notion of visible action for them, and develop the notion of c-trees and reactive congruence analogous to Milner's synchronization trees and observational congruence. We also present an equational characterization of reactive congruence for Finitary cc(?, ?).
concurrency constraint constraint programming paper class programming language language computation informal consistency interaction agent communication place sharing variability context discourse use control availability inference abstraction operability families atom algebra behavior recursion concept timing logic program rules action trees synchronization characterization  framework  concurrent program general