Bunched logic is a variety of substructural logic proposed by Peter O'Hearn and David Pym. Bunched logic provides primitives for reasoning about resource composition, which aid in the compositional analysis of computer and other systems. It has category-theoretic and truth-functional semantics, which can be understood in terms of an abstract concept of resource, and a proof theory in which the contexts Γ in an entailment judgement Γ ⊢ A are tree-like structures (bunches) rather than lists or (multi)sets as in most proof calculi. Bunched logic has an associated type theory, and its first application was in providing a way to control the aliasing and other forms of interference in imperative programs.
The logic has seen further applications in program verification, where it is the basis of the assertion language of separation logic, and in systems modelling, where it provides a way to decompose the resources used by components of a system.
Categorical semantics (doubly closed categories)
The double version of the deduction theorem of bunched logic has a corresponding category-theoretic structure. Proofs in intuitionistic logic can be interpreted in
cartesian closed categories, that is, categories with finite products satisfying the (natural in A and C) adjunction correspondence relating hom sets:
::<math>Hom(A \wedge B, C) \quad \mbox{is isomorphic to} \quad Hom(A, B \Rightarrow C) </math>
Bunched logic can be interpreted in categories possessing two such structures
::a categorical model of bunched logic is a single category possessing two closed structures, one symmetric monoidal closed the other cartesian closed.
A host of categorial models can be given using Day's tensor product construction.
Additionally, the implicational fragment of bunched logic has been given a game semantics.
Algebraic semantics
The algebraic semantics of bunched logic is a special case of its categorical semantics, but is simple to state and can be more approachable.
::An algebraic model of bunched logic is a poset that is a Heyting algebra and that carries an additional commutative residuated lattice structure (for the same lattice as the Heyting algebra): that is, an ordered commutative monoid with an associated implication satisfying <math>A * B \leq C \quad \mbox{iff} \quad A \leq B {-\!\!*} C</math>.
The boolean version of bunched logic has models as follows.
::An algebraic model of boolean bunched logic is a poset that is a Boolean algebra and that carries an additional residuated commutative monoid structure.
Proof theory and type theory (bunches)
The proof calculus of bunched logic
differs from usual sequent calculi in having a tree-like context of hypotheses instead of a flat list-like structure. In its sequent-based proof theories, the
context <math>\Delta </math> in an entailment judgement <math>\Delta \vdash A </math>
is a finite rooted tree whose leaves are propositions and whose internal nodes are labelled with modes of composition corresponding to the two conjunctions.
The two combining operators, comma and semicolon, are used (for instance) in the introduction rules for the two implications.
:<math>\frac{\Gamma,A \vdash B}{\Gamma \vdash A{-\!\!*} B} \qquad \qquad \frac{\Gamma;A \vdash B}{\Gamma \vdash A{\Rightarrow} B} </math>
The difference between the two composition rules comes from additional rules that apply to them.
- Multiplicative composition <math> \Delta , \Gamma </math> denies the structural rules of weakening and contraction.
- Additive composition <math> \Delta ; \Gamma </math> admits weakening and contraction of entire bunches.
The structural rules and other operations on bunches are often applied deep within a tree-context, and not only at the top level: it is thus in a sense a calculus of deep inference.
Corresponding to bunched logic is a type theory having two kinds of function type. Following the Curry–Howard correspondence, introduction rules for implications correspond to introduction rules for function types.
:<math>\frac{\Gamma,x:A \vdash M:B}{\Gamma \vdash \lambda x.M: A{-\!\!*} B} \qquad \qquad \frac{\Gamma;x:A \vdash M: B}{\Gamma \vdash \alpha x.M:A{\Rightarrow} B} </math>
Here, there are two distinct binders, <math>\lambda</math> and <math>\alpha</math>, one for each kind of function type.
The proof theory of bunched logic has an historical debt to the use of bunches in relevance logic. But the bunched structure can in a sense be derived from the categorical and algebraic semantics:
to formulate an introduction rule for <math> {-\!\!*} </math> we should mimick <math> * </math> on the left in sequents, and to introduce <math> \Rightarrow</math> we should mimick <math> \wedge </math>. This consideration leads to the use of two combining operators.
James Brotherston has done further significant work on a unified proof theory for bunched logic and variants, employing Belnap's notion of display logic.
Galmiche, Méry, and Pym have provided a comprehensive treatment of bunched logic, including completeness and other meta-theory, based on labelled tableaux.
Applications
Interference control
In perhaps the first use of substructural type theory to control resources, John C. Reynolds showed how to use an affine type theory to control aliasing and other forms of interference in ALGOL-like programming languages. O'Hearn used bunched type theory to extend Reynolds' system by allowing interference and non-interference to be more flexibly mixed.
Later, the greater generality of the resource semantics was utilized: an abstract version of separation logic works for Hoare triples
where the preconditions and postconditions are formulae interpreted over an arbitrary partial commutative monoid instead of a particular heap model.
By suitable choice of commutative monoid, it was surprisingly found that the proofs rules of abstract versions of concurrent separation logic could be used to reason about interfering concurrent processes, for example by encoding rely-guarantee and trace-based reasoning.
Separation logic is the basis of a number of tools for automatic and semi-automatic reasoning about programs, and is used in the Infer program analyzer currently deployed at Facebook.
Resources and processes
Bunched logic has been used in connection with the (synchronous) resource-process calculus SCRP in order to give a (modal) logic that characterizes, in the sense of Hennessy–Milner, the compositional structure of concurrent systems.
SCRP is notable for interpreting <math> A * B </math> in terms of both parallel composition of systems and composition of their associated resources.
The semantic clause of SCRP's process logic that corresponds to separation logic's rule for concurrency asserts that a formula <math> A * B </math> is true in resource-process state <math> R </math>, <math> E </math> just in case there are decompositions of the resource <math>R = S \bullet T</math> and process
<math>E</math> ~ <math>F \times G</math>, where ~ denotes bisimulation, such that <math>A</math> is true in the resource-process state <math> S </math>, <math> F </math> and <math>B</math> is true in the resource-process state <math> T </math>, <math> G </math>; that is <math> R, E \models A </math> iff <math> S, F \models A </math> and <math> T, G \models B </math>.
The system SCRP
Spatial logics
Cardelli, Caires, Gordon and others have investigated a series of logics of process calculi, where a conjunction is interpreted in terms of parallel composition.
Unlike the work of Pym et al. in SCRP, they do not distinguish between parallel composition of systems and composition of resources accessed by the systems.
Their logics are based on instances of the resource semantics that give rise to models of the boolean variant of bunched logic.
Although these logics give rise to instances of boolean bunched logic, they appear to have been arrived at independently, and in any case have significant additional structure in the way of modalities and binders. Related logics have been proposed as well for modelling XML data.
See also
- Separation logic
- Relevance logic
- Linear logic
