By analogy with imperative programming we call the co lection of shared assertions (or constraints) the “store”. In contrast with imperative program- ming, however, a store might only give partial information of variables. For example rather than saying that a varia 1994, it might merely say that the variable lies between 1729 and 4104. The ask-tell language will be a simple process calculus, based u notions of ask and tell. The tell operation is the mechanism for communi- cation: it takes a constraint @ and adds it to the common data pool. ask construct is the mechanism for synchronization. Given a constraint db ask(@) succeeds or fails depending upon whether the store entails ¢. In the about the values le has the value on the primitive an former case, the process continues, in the latter case the process suspends until (if ever) more data becomes available. The “ask” construct is what gives the programmer the ability to manipulate partial information since one can query the store despite the information being only partially defined. TABLE I: Operational semantics for Ask-and-Tell cc languages A more careful presentation of the operational semantics of hiding follows. We assume that the store contains a list of “private” variables. These are the variables that appear as the result of hiding. Any information pertaining to these variables is available only to the process that created this private variable. In particular the environemnt cannot see any of these private vari- ables. Existential quantification provides the precise notion of “hiding the information”. Thus if @ are the private variables in a store o the globally vis- ible part of the store is dit.o. In most of the discussion we will suppress this explicit mention of the notion of private variables and simply use existential quantification to capture the visible part of the store. “In earlier presentations of the operational semantics we used the following presentation of this rule: Fig. 2: Picture of a hyperdoctrine — II And these three diagrams generate four isomorphisms that must be checked (the first diagram generates two by reflection about the main diagonal, and the others each generate one). In logical notation these are: As pointed out in Seely [1983], for the purposes of constructing a first-order logic from a hyperdoctrine there are just three types of pullback diagrams we need to check for the Beck-Chevalley condition. first consider the logical interpretation of 4;¢. If the theory includes equality, then 4,¢@ can be interpreted as d,(¢(@) = y A (a)), where t:X — Y,@€ P(X). On the other hand, the formula « = y can be interpreted using the generalized quantifier as datruex, where A:X — X x X is the diagonal arrow « + (a, x) and truex is the terminal object (corresponding to the formula “true” ) of P(X). The reader can easily check that what we have just said suggests that Jatruey is to be interpreted by the formula 4,((z, z) = (x, y) A truex) which is clearly equivalent to the formula x = y. This is illustrated in Fig. 2. The conditions imposed on hyperdoctrines imply that this is categorically sound in general. fi RASS OF _ ee 7 oe ey To summarize, one can construct a hyperdoctrine with the same base cat- egory as before and with processes as the objects in the fibres. The arrows in the fibres are instances of the simulation preorder. Parallel composition plays the role of tensor product and “ask” and “tell” are adjoints, show- ing that there is a limited notion of implication between processes. In the determinate language the parallel composition plays the role of Cartesian product whereas in the indeterminate language the choice construct acts as the Cartesian product. 5. Simulation Morphisms