<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Compositional Proofs with Symbolic Execution</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Simon</forename><surname>Bäumler</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Institut für Informatik</orgName>
								<orgName type="institution">University of Augsburg</orgName>
								<address>
									<settlement>Augsburg</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Florian</forename><surname>Nafz</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Institut für Informatik</orgName>
								<orgName type="institution">University of Augsburg</orgName>
								<address>
									<settlement>Augsburg</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Michael</forename><surname>Balser</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Institut für Informatik</orgName>
								<orgName type="institution">University of Augsburg</orgName>
								<address>
									<settlement>Augsburg</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Wolfgang</forename><surname>Reif</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Institut für Informatik</orgName>
								<orgName type="institution">University of Augsburg</orgName>
								<address>
									<settlement>Augsburg</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Compositional Proofs with Symbolic Execution</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">A1989068D1B114BBF3C0A9F8DACEBCFB</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T19:49+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>A proof method is described which combines compositional proofs of interleaved parallel programs with the intuitive and highly automatic strategy of symbolic execution. As logic we use an extended variant of Interval Temporal Logic that allows to formulate programs directly in the Simple Programming Language (SPL). The notation includes a complex interleaving operator. The interactive proof method we use for temporal properties is symbolic execution with induction. Here, we show how to combine this proof method with an assumption-guarantee approach to decompose proofs for safety properties. We demonstrate the application of this technique with a producer-channel-consumer case study. 1</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>Verification of concurrent systems is an important topic, as, in comparison to sequential programs, the system execution is much more complex. Validation of concurrent systems by testing is very difficult and often not feasible, as there are many more test cases and it is hard to reproduce tests. But also formal verification of concurrent systems is complicated, because reasoning over all possible execution traces tends to result in a huge state space which makes automatic and interactive verification very difficult.</p><p>To avoid reasoning over the complete concurrent system, a common technique is compositional reasoning. The basic idea of this technique is, to split the system into several subcomponents. Then, the overall property is proved only with corresponding properties of the subcomponents. This idea was first formulated by Dijkstra <ref type="bibr" target="#b0">[1]</ref>. In compositional reasoning the proof is often done with a compositional theorem. Such a theorem provides a number of proof obligations, which have to be fulfilled, so that the overall property is valid. Ideally, these proof obligations contain only single subcomponents and properties of these subcomponents, but not the complete system itself. This results in several proofs of feasible size.</p><p>A common compositional proof technique is the assumption-guarantee paradigm, which was introduced by Jones <ref type="bibr" target="#b1">[2]</ref> and by Misra &amp; Chandy <ref type="bibr" target="#b2">[3]</ref>. The basic idea of this paradigm is, that each component can make specific assumptions to its environment in order to guarantee a specific behavior. An overview of recent works on compositionality in general can be found e.g. in de Roever et. al. <ref type="bibr" target="#b3">[4]</ref> or Furia <ref type="bibr" target="#b4">[5]</ref>.</p><p>Symbolic execution, on the other hand, is a successful technique for interactive verification of sequential programs (e.g. Dynamic Logic <ref type="bibr" target="#b5">[6,</ref><ref type="bibr" target="#b6">7]</ref>). It is a very intuitive strategy for programs as the proof advances step by step similar as most humans do it when trying to understand a program <ref type="bibr" target="#b7">[8,</ref><ref type="bibr" target="#b8">9]</ref>. Furthermore, it can be automated to a large extend. Balser <ref type="bibr" target="#b9">[10]</ref> presented an ITL<ref type="foot" target="#foot_1">2</ref> -based logic with calculus that allows the symbolic execution of concurrent systems. This calculus was integrated into the interactive theorem prover KIV <ref type="bibr" target="#b11">[12]</ref>. Arbitrary specification languages can be nested into this logic and thus making it unnecessary to translate a system specification into a special specification language for formal verification. Even more important is that the interleaving in this logic is compositional. That means, it is possible to replace a subcomponent with an abstraction of the component in a concurrent proof. While this feature simplifies concurrent proofs, it is still necessary to use symbolic execution on the whole parallel system in order to prove a property. A compositional theorem for this method would make it possible to prove properties of concurrent systems by reasoning only over single subcomponents at a time.</p><p>The goal of this paper is to present an assumption-guarantee rule for the logic presented in <ref type="bibr" target="#b9">[10]</ref>. This would enable us to fully use the advantages of both techniques, compositional reasoning and symbolic execution, as well as the tool support, which is available for this logic.</p><p>We assume that the reader has at least basic knowledge in temporal logic and sequent calculus. The remainder of the paper is structured as follows: A short overview of our logic is given in Section 2. The compositional theorem we use is presented in Section 3, its application is shown in Section 4 on a producerchannel-consumer case study. Section 5 concludes the paper with related work and an outlook.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Temporal Logic Framework</head><p>In the following an informal overview over the used temporal logic calculus is given. The formal semantic is described in <ref type="bibr" target="#b12">[13]</ref> and <ref type="bibr" target="#b9">[10]</ref>. The calculus is integrated into the interactive theorem prover KIV. The temporal logic framework is a variant of ITL <ref type="bibr" target="#b10">[11,</ref><ref type="bibr" target="#b13">14]</ref> that is extended by explicitly including the behavior of the environment into each step. The basis for ITL are finite or infinite sequences π of valuations, which are called intervals. Valuations in π are called states. Each state is described by a first-order predicate logic formula over dynamic variables v, which also can be primed v ′ or double primed v ′′ . The relation between v and v ′ is called system transition, whereas the relation between v ′ and v ′′ environment transition. The value of v ′′ in a state must be equal to the value of v in the next successive state. Thereby the system and the environment transition alternate. A selection of the supported temporal operators are: Semantically, a program describes a set of traces. Therefore, it is possible to embed programs into temporal formulas. This can be used for the parallel composition of programs with the tl-interleaving operator.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1">Symbolic Execution</head><p>A typical sequent in proofs about interleaved programs has the form P, Γ ⊢ ∆. Here, P is the interleaved program, Γ contains a temporal formula that describes the environment behavior and a first order formula for the current variable assignment, while ∆ contains the temporal property which has to be shown.</p><p>Symbolic execution on the following example sequent is done in two steps:</p><formula xml:id="formula_0">m := m + 1; &lt; prog &gt;, m ′ = m ′′ , m = 2 ⊢ ∆</formula><p>First, all temporal and program formulas are rewritten to a so called firstnext form, which encodes the transition to the next state in a predicate logic formula. For this, the following rule<ref type="foot" target="#foot_2">3</ref> is used:</p><formula xml:id="formula_1">m ′ = m + 1, • &lt; prog &gt;, m ′ = m ′′ , • m ′ = m ′′ , m = 2 ⊢ ∆ m := m + 1; &lt; prog &gt;, m ′ = m ′′ , m = 2 ⊢ ∆ (prenex)</formula><p>This rule separates propositons about the current state from propositions about all following states. So after application of prenex each formula is either a first-order formula, describing the first state in the trace or a temporal formula with a leading next-Operator, that describes the remaining trace.</p><p>Now it is possible to advance one step in the trace. In all first-order formulas, unprimed and primed variables are replaced by new static variables, while the double primed variables are replaced by their unprimed version. Further, all next-operators of temporal formulas are eliminated. In the example, this is done by the following rule-application:</p><formula xml:id="formula_2">M 1 = M 0 + 1, &lt; prog &gt;, M 1 = m ′ , m ′ = m ′′ , M 0 = 2 ⊢ ∆ m ′ = m + 1, • &lt; prog &gt;, m ′ = m ′′ , • m ′ = m ′′ , m = 2 ⊢ ∆ (tl-step)</formula><p>This results in the following sequent after simplification:</p><formula xml:id="formula_3">&lt; prog &gt;, m ′ = m ′′ , m = 3 ⊢ ∆</formula><p>The rules for symbolic execution of formulas in the succedent are very similar. In KIV these rules, prenex, tl-step and simplification, are combined to a single complex rule called step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2">Executing Interleaved Programs</head><p>To execute two interleaved formulas a first transition from one or the other formula is executed. After this, execution continues with interleaving the remaining formulas. For example, if there are two interleaved programs in the antecedent m := 1; . . . n := 2; . . . , Γ ⊢ ∆ this formula is executed by symbolically executing either program first. For this, the following rule is used: m := 1; (. . . n := 2; . . .), Γ ⊢ ∆ n := 2; (m := 1; . . . . . .), Γ ⊢ ∆ m := 1; . . . n := 2; . . . , Γ ⊢ ∆ (interleaved left)</p><p>Furthermore the following equation holds for the interleaving operator last φ ↔ φ which can be used to eliminate terminated programs. In the case that one of the programs is blocked, only the other program is executed. One important feature of our interleaving operator is that it is compositional. This means, that the following rule can be applied:</p><formula xml:id="formula_4">⊢ ϕ 1 → ϕ 2 ϕ 2 ψ, Γ ⊢ ∆ ϕ 1 ψ, Γ ⊢ ∆ (comp)</formula><p>This feature is very important for the proofs of the theorems in chapter 3 and for abstraction in general. Note, that our interleaving operator also supports features like fairness and blocking. These features and the general case, where the interleaving operator contains arbitrary temporal formulas, are also described in detail in <ref type="bibr" target="#b15">[16]</ref> or <ref type="bibr" target="#b9">[10]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3">Induction and Sequencing</head><p>The basic idea to proof safety properties is to advance in the interval until a valuation is reached that was considered earlier in the interval, so that a loop was executed. If it can be proven that the property is true before and during the loop so it is invariant, then the proof can be finished with an inductive argument. A special rule start induction is used to generate a suitable induction hypothesis.</p><p>Symbolic execution can lead to many paths, that have to be explored. Often two different paths lead to same configurations (two sequent have the same configuration if all temporal logic formulas are the same). To minimize the proof effort a rule called sequencing is used, that allows to close a open premise when there exists another premise with the same configuration, but with more general predicate logic formulas.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Compositional Theorem</head><p>Most assumption/guarantee based compositional proof techniques use a special operator similar to the "while-plus" operator + presented in <ref type="bibr" target="#b16">[17]</ref>. Informally, the term A + G means, that if A holds up to step i, then G must hold up to step i + 1. This operator enables the formulation that a component violates its guarantee G only after its assumption A is violated. It is needed to break the circularity of the used compositional rule.</p><p>Assumptions and guarantees can be formulated with propositional predicates over unprimed and primed variables (e.g. Cau and Collette <ref type="bibr" target="#b17">[18]</ref>). We use the same approach, but for the assumptions we use predicates over primed and doubly primed variables. In this way it can be formalized which steps are allowed for the components and which steps are allowed for the environment. This also allows to use a standard TL operator unless as + operator, i.e.:</p><formula xml:id="formula_5">A + G := G unless (G ∧ ¬A)</formula><p>With these preliminaries we are able to construct a compositional theorem: Premise i is a temporal logic sequent while premise ii -iv contain only predicate logic formulas. These four proof obligations have the following informal meaning:</p><formula xml:id="formula_6">Theorem 1. If: i. for all i = 1, . . . , n: M i ⊢ A i (v ′ , v ′′ ) + G i (v, v ′ ) ii. for all i = 1, . . . , n: G i (v 1 , v 2 ) ⊢ G(v 1 , v 2 ) ∧ j∈{1..n}∧j =i A j (v 1 , v 2 ) iii. for all i = 1, . . . , n: A i (v 1 , v 2 ) ∧ A i (v 2 , v 3 ) ⊢ A i (v 1 , v 3 ) iv. A(v 1 , v 2 ) ⊢ i∈{1..n} A i (v 1 , v 2 ) then: M 1 . . . M n ⊢ A(v ′ , v ′′ ) + G(v, v ′ )</formula><p>i. All components must sustain their guarantee as long as the assumption holds.</p><p>These are the only proof obligations which require a temporal logic proof. ii. The guarantee of each component preserves the global guarantee and does not violate the assumptions of all other components. iii. The assumptions of all components are transitive. With this property, the components assumption is preserved even if other components make several steps. iv. All component assumptions hold if the global assumption holds. Therefore, no component assumption is violated in the environment-step.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Proof (Outline).</head><p>The theorem was formally proven with the theorem prover KIV by using the ITL calculus described in section 2. As first step the proof for two components was done by symbolic execution of two abstract and interleaved components. The simplified proof graph <ref type="foot" target="#foot_3">4</ref> for this first step is depicted in figure <ref type="figure" target="#fig_0">1</ref>. The premises i-iv of theorem 1 are used as lemmas for this proof. Premises ii-iv are applied by the KIV simplifier on predicate logic premises, which are all closed automatically by KIV. These simplifier steps are omitted in figure <ref type="figure" target="#fig_0">1</ref> for the sake of brevity.</p><p>The proof starts with the sequent</p><formula xml:id="formula_7">M 1 M 2 ⊢ A(v ′ , v ′′ ) + G(v, v ′ ) (node 1).</formula><p>M 1 and M 2 are abstract programs that have arbitrary behavior. At first both programs are replaced with their assumption-guarantee formulas of premise i of the theorem via the rule comp, so node 2 has the following sequent:</p><formula xml:id="formula_8">A 1 (v ′ , v ′′ ) + G 1 (v, v ′ ) A 2 (v ′ , v ′′ ) + G 2 (v, v ′ ) ⊢ A(v ′ , v ′′ ) + G(v, v ′ )</formula><p>Here, the step rule is applied for symbolic execution. In the following, only the nodes 3-5 are described, as the other three premises of node 2 are symmetrical to these nodes.</p><p>In node 3 the first parallel component has terminated, so it must be shown that</p><formula xml:id="formula_9">A 2 (v ′ , v ′′ ) + G 2 (v, v ′ ) ⊢ A(v ′ , v ′′ ) + G(v, v ′</formula><p>) holds. This can by done using step and apply induction.</p><p>In node 4 the first component has made a normal step (i.e. it is neither terminated nor blocked). The case distinction discerns if A 1 (v ′ , v ′′ ) holds (node 7) in this step or not (node 6). Node 6 has the sequent</p><formula xml:id="formula_10">¬A 1 (v ′ , v ′′ ) A 2 (v ′ , v ′′ ) + G 2 (v, v ′ ) ⊢ A(v ′ , v ′′ ) + G(v, v ′ ).</formula><p>Here, in the next step there are three possibilities:</p><p>-The left component makes a step (not depicted in the graph, as it can be closed automatically by the simplifier). -The right component makes a step and A 2 (v ′ , v ′′ ) is violated too (node 11).</p><p>This can be closed automatically by another step. -The right component makes a step and A 2 (v ′ , v ′′ ) holds (node 12). This premise can be closed by induction.</p><p>Node 7 contains exactly the same sequence as node 2, therefore induction can be applied. Node 5 treats the case if the left component is blocked. Here, three cases are possible:</p><p>-Both assumptions A 1 (v ′ , v ′′ ) and A 2 (v ′ , v ′′ ) are violated (node 8). This can be closed automatically via step rule. -Only the assumption A 1 (v ′ , v ′′ ) is violated (node 9). This is the same case as in node 6, therefore sequencing can be applied. -A 1 (v ′ , v ′′ ) holds and the right component has made a step (node 10). This case is covered in node 13, therefore sequencing can be applied.</p><p>This proof can be extended to n components by induction over the number of components. The initial induction case for one component can be shown by another temporal induction (similar to node 3 in the proof above). The inductive step can be proved by using the proof for two components as lemma to reduce n components to n−1 components. Then the induction hypotheses can be applied.</p><p>Usually the construction of a modularization rule is very difficult because of mutual dependencies. One interesting thing in our framework is that symbolic execution and tool support can not only be used to prove the modularization theorem, it actually helps to find the correct premises for the rule. To do so, the proof is as above, but without using the premises ii-iv as lemmas (as we want to find them at this point). Then we try to close all open premises that contain temporal logic formulas, which results in a similar proof graph as shown in figure <ref type="figure" target="#fig_0">1</ref>, but with several additional open premises that contain only predicate logic sequents. So to find the correct premises for the modularization theorem are a minimal set of generic predicate logic formulas from which all open sequents can be shown. By this technique a semantic analysis of the parallel operator is not necessary.</p><p>Extended Modularization Rule While this first rule may be useful for very simple systems it must be improved to be usable for more complex cases. First, a variable initialization in the temporal logic proofs (obligations i ) is needed. Second, applications of this first rule show, that the guarantees are often redundant. Especially it is often necessary to have an invariance property. This invariant can be used to express the relation between the initial state and all suceeding states. Similar techniques for these additions are used e.g. in <ref type="bibr" target="#b17">[18]</ref>.</p><p>So, using the additional predicates I(v) for the invariant, Init(v) for the initial values of the global system and a family of predicates Init i (v) for the initial values for every system component leads to an extended version of the compositional rule:</p><formula xml:id="formula_11">Theorem 2. If: i. for all i = 1, . . . , n: M i , I(v), Init i (v) ⊢ A i (v ′ , v ′′ ) + G i (v, v ′ ) ii. for all i = 1, . . . , n: G i (v 1 , v 2 ) ∧ I(v 1 ) ⊢ G(v 1 , v 2 ) ∧ j∈{1..n}∧j =i A j (v 1 , v 2 ) ∧ I(v 2 )</formula><p>iii. for all i = 1, . . . , n:</p><formula xml:id="formula_12">A i (v 1 , v 2 ) ∧ A i (v 2 , v 3 ) ∧ I(v 1 )) ⊢ A i (v 1 , v 3 ) iv. A(v 1 , v 2 ) ∧ I(v 1 ) ⊢ i∈{1..n} A i (v 1 , v 2 ) ∧ I(v 2 ) v. for all i = 1, . . . , n: A i (v 1 , v 2 ) ∧ I(v 1 ) ∧ Init i (v 1 ) ⊢ Init i (v 2 ) vi. Init(v 1 ) ⊢ i∈{1..n} Init i (v 1 ) ∧ I(v 1 ) then: M 1 . . . M n , Init(v) ⊢ A(v ′ , v ′′ ) + G(v, v ′ )</formula><p>The informal meaning of the proof obligation of this theorem are as follows:</p><p>i. These obligations are mostly the same, except that we can now assume the invariant and the initial condition for the respective component in the antecedent. ii. -iv. These obligations are mostly the same as in the previous rule, except that the predicate I can now be assumed in the antecedent. Also, we have to show in obligations ii. and iv., that the invariant is preserved by the guarantee of each component and the global assumption. v. Here it is shown, that the initial condition of a component is preserved by its assumption. vi. This obligation establishes the invariant and the initial conditions of the components.</p><p>Proof (Sketch). This theorem was also formally proven with KIV. The proof for theorem 2 and 1 are very similar. However, it must be shown for theorem 2 that Init 1 (v), Init 2 (v) and I(v) holds in the first state. To do that, a case distinction is used before the first step (node 2 in figure <ref type="figure" target="#fig_0">1</ref>). The cases where one of the formulas Init 1 (v), Init 2 (v) and I(v) does not hold can be proved via step and induction, similar to node 8 in figure <ref type="figure" target="#fig_0">1</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Case Study</head><p>In this section an example for applying the introduced theorem is presented.</p><p>After an introduction of the producer-channel-consumer case study (short "ProChaCon") and its specification the formulation of the assumption-guarantee (short "AG") properties is described. The section closes with a description of the proofs of some of the proof obligations. ProChaCon consists, as the name implies, of three interleaved components, depicted in Figure <ref type="figure" target="#fig_1">2</ref>. Usually the values of the producer component are derived from an application or another component. For our task it is sufficient to generate them randomly. These values are sent using a classical two-way-handshake protocol <ref type="bibr" target="#b18">[19]</ref> to the channel component. The channel is again divided into a receiver and a sender component. Both are connected through a buffer in which the incoming values are stored. The receiver is responsible to store the incoming values into the buffer and the senders job is to forward the buffered values. Thereto, the receiver attaches the incoming value to the buffer-list and the sender transmit the first value of the list as long as the buffer is not empty. The buffered values are transmitted to the consumer component, which processes the received values in an arbitrary way. The history of sent and received values is modeled by inserting history lists on certain points, e.g plist, also depicted in Figure <ref type="figure" target="#fig_1">2</ref>. They First some abbreviatory notations are described that will be used in the following. The sets of all used unprimed, primed and doubleprimed variables are denoted with V , V ′ and V ′′ . As mentioned in the introduction a step consists of a system step and an environment step. In the following it is often necessary to express that a component only change a set of variables L. This is formulated by a frame assumption, which corresponds to the formula ⌈L⌉ :⇔ w∈V \L w ′ = w which states that all program variables except L are unchanged. Here, L is a subset of V. Further, during the environment step some variables are unchanged. This is formulated with the following predicate</p><formula xml:id="formula_13">Unchanged env (L) :⇔ w∈L w ′ = w ′′ .</formula><p>The verified property is "The list of received values is always a prefix of the list of the sent values". In other words, only values that have been sent are received and the order is unchanged. So for the overall guarantee the formula clist ⊑ plist → clist ′ ⊑ plist ′ is used, where ⊑ is the prefix operator. The global assumption states that all variables are unchanged by the environment. This leads to the following proof obligation for the complete system.</p><formula xml:id="formula_14">Unchanged env (V ) + → (clist ⊑ plist → clist ′ ⊑ plist ′ )</formula><p>The system uses, as mentioned, a classical handshake to transmit values. Therefore, the involved components have to guarantee at least that they fulfill their part accurate. Sending components must guarantee that they transmit a value only if it is their turn and that the history-lists are updated in a correct way, formally expressed in Handshake send .</p><p>Handshake send (ch, hlist) :⇔ (ch.sig =ch.ack</p><formula xml:id="formula_15">→ (ch = ch ′ ∧hlist = hlist ′ )) ∧ (ch.sig =ch.ack∧ch ′ .sig =ch ′ .ack) →hlist = hlist ′ ) ∧ (ch.sig =ch.ack∧ch ′ .sig =ch ′ .ack) →hlist + ch.data = hlist ′</formula><p>Analogously Handshake receive express that the receiver has to guarantee that values are only received if the handshake variables are unequal. The history list is updated if the handshake variables signalizing that a value was received successfully and the next value can be transmitted.</p><p>The producer component has to guarantee two things. First, that only internal variables and the handshake channel are changed. Second, that the handshake protocol is implemented correctly. The producers environment assumption A 1 states that the environment does not change the internal variables as long as the producer could transmit a value. This is captured in G 1 and A 1 .</p><formula xml:id="formula_16">G 1 (V, V ′ ) :⇔⌈ a,ch a ,plist⌉∧ Handshake send (ch a ,plist) A 1 (V ′ , V ′′ ) :⇔Unchanged env (a,plist)∧ (ch ′ a .sig =ch ′ a .ack→ch ′ a =ch ′′ a ))</formula><p>The AG of the consumer can be formalized analogously:</p><formula xml:id="formula_17">G 4 (V, V ′ ) :⇔⌈ b, ch b ,clist⌉ ∧ Handshake receive (ch b , clist) A 4 (V ′ , V ′′ ) :⇔Unchanged env (b,clist)∧ (ch ′ b .sig = ch ′ b .ack→ch ′ b =ch ′′ b ))</formula><p>In a similar way the AGs for both channel components (channel rec , channel send ) can be formalized. They need additional guarantees, because they pass the values via a buffer. That this is done correctly is formalized by the two guarantees Buffer in and Buffer out .</p><formula xml:id="formula_18">Buffer in (buffer, hlist in , value in ) :⇔ (hlist in = hlist ′ in ∧ buffer = buffer ′ ) ∨ ( hlist in + value in = hlist ′ in ∧ buffer + value in = buffer ′ ) Buffer out (buffer, hlist out ) :⇔ hlist out + buffer = hlist ′ out + buffer ′</formula><p>The complete guarantee for channel rec consists of the statements that channel rec only changes its internal variables, that the receiver part of the handshake protocol is implemented in a correct way and that the component writes into the buffer correctly. Additionally, the component needs to guarantee that the prefix property also holds between both internal history lists. As assumption it can be presumed that the environment does not change the internal variables and the channel is not changed as long as channel rec can receive a value. That leads to the following AG.</p><formula xml:id="formula_19">G 2 (V, V ′ ) :⇔ ⌈ c, ch a , chbuf, rlist a , rlist b ⌉ ∧ Handshake receive (ch a , rlist a ) ∧ Buffer in (chbuf, rlist b , c) ∧ rlist ′ b ⊑ rlist ′ a A 2 (V ′ , V ′′ ) :⇔ Unchanged env (c, rlist a , rlist b ) ∧ (ch ′ a .sig =ch ′ a .ack → ch ′ a =ch ′′ a ))</formula><p>The AG of the other channel component (channel send ) can be formalized analogously with Buffer out and Handshake send .</p><p>The system always has to be in a correct state. In other words the buffers have to be empty or at least have to be filled in a non-conflicting way. This is expressed as an invariant. Theoretically, it is also possible to put all these into the AGs of the components, but it is more concise to have only local properties there. Therefore statements consisting of variables of more than one component are separated within an invariant, which expresses the connection of the components. First it states that depending on the handshake variables the two neighbor history lists are either equal or they differ in the value that is set in the data field.</p><formula xml:id="formula_20">I 1 (V ) :⇔ ( ch a .sig = ch a .ack → elist a = plist) ∧ (ch a .sig =ch a .ack → elist a + ch a .data = plist) ∧ (ch b .sig = ch b .ack → clist = slist b ) ∧ (ch b .sig =ch b .ack → clist + ch b .data = slist b )</formula><p>For the channel it is stated that all values that were written into the buffer are either still in the buffer or were already send to the consumer component. This is formalised with slist + chbuf = elist b . Additionally, some prefix properties are needed to show the overall property:</p><formula xml:id="formula_21">I 2 (V ) :⇔ clist ⊑ slist b ∧ slist b ⊑ slist a ∧ slist a ⊑ elist b ∧ elist a ⊑ elist a ∧ elist a ⊑ plist</formula><p>The overall invariant I (V ) is I 1 (V ) ∧ I 2 (V ). The only needed initial information is, that the history-lists of both channel components are equal. This is formulated with init 2 ≡ (rlist a = rlist b ) and init 3 ≡(slist a = slist b ).</p><formula xml:id="formula_22">I ST aI ST ST aI</formula><p>All proof obligations were formally proven with KIV. To give an impression of the proof effort for the components, we describe as example proof of the temporal logic proof obligation i for channel rec , which is as follows:</p><formula xml:id="formula_23">M 2 , I(V ), Init 2 (V ) ⊢ A 2 (V ′ , V ′′ ) + → G 2 (V, V ′ )</formula><p>The proof graph for this obligation is shown on the right side. In the beginning we start induction, explained in section 2.3. Initially the program is in position 1 (the numbers refer to the program of page 21). The while-loop could be evaluated, so that the program is in position 2. Executing the first step leads to a case distinction. Either the await-statement could be evaluated to true and the program is on position 3 or to false and the program remains at position 2. In the second branch induction is applied, as the sequent has not changed. In the first branch further steps are executed till the program is again at position 1, which has been encountered before. In this case induction is applied and the proof is finished. The other three temporal logic proof obligations can be verified analogously without additional effort.</p><p>The proofs for the predicate logic proof obligations are straight forward. They start with a case distinction of the conjunctions on the right side of the sequence. All premises can then be closed by the simplifier of KIV automatically.</p><p>All in all the reuse of the AGs is very high, for example every component that uses a handshake protocol has to fulfill the handshake guarantees. Only the invariant depends on the property we want to verify. All proofs are simple and can be automated to a large extend. One reason for this is, that the components are no longer interleaved after modularization and so symbolic execution leads to only few new cases.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Related Work and Summary</head><p>In summary, we have presented a method how to use symbolic execution together with compositional reasoning. As basis for our work we use an ITL variant <ref type="bibr" target="#b9">[10]</ref> that supports symbolic execution. Furthermore it provides a compositional interleaving operator, which allows us to formulate an assumption-guarantee theorem and prove it on syntactic level. The logic is fully integrated into the interactive theorem prover KIV and all proofs where done within this tool. A further advantage of our logic is the possibility to directly include multiple system description languages into the logic formalism, e.g. SPL which is used in this work. Other languages that were also successfully integrated into the logic are Statemate and UML statecharts <ref type="bibr" target="#b19">[20,</ref><ref type="bibr" target="#b20">21]</ref> as well as Asbru, a language used for the verification of medical protocols <ref type="bibr" target="#b21">[22]</ref>. The tool support and the syntactic nature of the theorem simplifies adaption of the theorem to particularities of these languages (e.g. to have better support for events in statecharts). The ability of symbolic execution of programs and statecharts supports intuitive and understandable proofs. To our knowledge this is the first work combining symbolic execution with compositional reasoning.</p><p>Our compositional theorem is inspired by the work of Abadi and Lamport <ref type="bibr" target="#b16">[17]</ref>. They introduced the + operator and a theorem which is suitable for safety and liveness properties. In comparison to our work they use conjunction for the composition of components. While conjunction is a more elementary operator than our interleaved operator, all components must be specified as stutter equivalent components. To achieve this, their components must be specified in a special formula in normal form, while we are able to specify the components directly in various description languages. Due to the inclusion of the double primed variables we have a stuttering mechanism directly in our semantics.</p><p>We use a similar technique for defining assumptions and guarantees as Cau and Collette <ref type="bibr" target="#b17">[18]</ref>. Their theoretical work is more general as the described theorem can be adapted to state based as well as message based systems. Compared to this our focus was to provide a calculus and tool support for our technique.</p><p>Solanki et. al. <ref type="bibr" target="#b22">[23]</ref> use compositional reasoning together with ITL. They use an AG variant that allows guarantees to be formulated in ITL. As tool they use (ana)Tempura <ref type="bibr" target="#b13">[14,</ref><ref type="bibr" target="#b10">11]</ref>. This technique is applied to a semantic web service description.</p><p>In a paper by Zwiers et. al. <ref type="bibr" target="#b23">[24]</ref> invariants and preconditions are integrated in a compositional framework for concurrency. Joseph and Pandya <ref type="bibr" target="#b24">[25]</ref> integrate invariants in a framework for total correctness. They use CSP-like distributed programs. Moszkowski <ref type="bibr" target="#b25">[26]</ref> uses ITL for a compositional specification and proof technique. Further work about compositionality are e.g. Pnueli <ref type="bibr" target="#b26">[27]</ref>, Stirling <ref type="bibr" target="#b27">[28]</ref> or Woodcock and Dickinson <ref type="bibr" target="#b28">[29]</ref>.</p><p>The producer-channel-consumer case study is a standard example for compositional reasoning. Pnueli <ref type="bibr" target="#b29">[30]</ref> described a producer-channel-consumer example already 1986 formally with temporal logic. Abadi and Lamport <ref type="bibr" target="#b16">[17]</ref> also used this example to illustrate how to specify components of concurrent systems. In their example they show that two N-element queues can be composed to an (2N+1)element queue. Jonsson and Tsay <ref type="bibr" target="#b30">[31]</ref> use the same example and property. The producer-channel-consumer example is also verified by Breitling et. al. <ref type="bibr" target="#b31">[32]</ref>, where streams for modelling the communicationare are used and Rock et. al. <ref type="bibr" target="#b32">[33]</ref> in combination with TLA for specification.</p><p>Next steps are to apply our approach on liveness properties. First experiments in this direction were very promising. Another interesting topic would be to integrate an objectlevel + operator similar to <ref type="bibr" target="#b16">[17]</ref>. This would allow us</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 1 .</head><label>1</label><figDesc>Fig. 1. Proof Graph for Theorem 1</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 2 .</head><label>2</label><figDesc>Fig. 2. Producer-Channel-Consumer (ProChaCon)</figDesc><graphic coords="9,134.04,106.84,324.20,92.46" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Fig. 3 .</head><label>3</label><figDesc>Fig. 3. SPL Representation of ProdChaCon</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">This work has been funded by the DFG program INOPSYS II, under contract number Re 828/6-3.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">Interval Temporal Logic, introduced by Moszkowski<ref type="bibr" target="#b10">[11]</ref> </note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">Note that rules in the sequent calculus are read bottom-up, with the conclusion at the bottom and the corresponding proof obligations on the top part.</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_3">The rules apply Induction and Sequencing refer both to another node in the proof tree, as explained in section 2. Therefore we depict proofs as graphs. The nodes that are referred by the rules apply Induction and Sequencing are represented by dashed arrows and pointed arrows respectively.</note>
		</body>
		<back>
			<div type="annex">
<div xmlns="http://www.tei-c.org/ns/1.0"><p>to use more complex assumption guarantee properties without abandoning the advantages of our approach: symbolic execution and tool support with various system description languages.</p></div>			</div>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Solution of a problem in concurrent programming control</title>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">W</forename><surname>Dijkstra</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">8</biblScope>
			<biblScope unit="issue">9</biblScope>
			<biblScope unit="page">569</biblScope>
			<date type="published" when="1965">1965</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Tentative steps toward a development method for interfering programs</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">B</forename><surname>Jones</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Trans. Program. Lang. Syst</title>
		<imprint>
			<biblScope unit="volume">5</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="596" to="619" />
			<date type="published" when="1983">1983</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Proofs of networks of processes</title>
		<author>
			<persName><forename type="first">J</forename><surname>Misra</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Chandi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions of Software Engineering</title>
		<imprint>
			<date type="published" when="1981">1981</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">Concurrency Verification: Introduction to Compositional and Noncompositional Methods</title>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">P</forename><surname>De Roever</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Cambridge University Press</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<title level="m" type="main">A compositional world: a survey of recent works on compositionality in formal methods</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">A</forename><surname>Furia</surname></persName>
		</author>
		<idno>2005.22</idno>
		<imprint>
			<date type="published" when="2005-03">March 2005</date>
		</imprint>
		<respStmt>
			<orgName>Dipartimento di Elettronica e Informazione, Politecnico di Milano</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Dynamic logic</title>
		<author>
			<persName><forename type="first">D</forename><surname>Harel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Handbook of Philosophical Logic</title>
				<editor>
			<persName><forename type="first">D</forename><surname>Gabbay</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">F</forename><surname>Guenther</surname></persName>
		</editor>
		<imprint>
			<publisher>Reidel</publisher>
			<date type="published" when="1984">1984</date>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="496" to="604" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">A Dynamic Logic for Program Verification</title>
		<author>
			<persName><forename type="first">M</forename><surname>Heisel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Reif</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Stephan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Logical Foundations of Computer Science. LNCS</title>
				<editor>
			<persName><forename type="first">A</forename><surname>Meyer</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Taitslin</surname></persName>
		</editor>
		<meeting><address><addrLine>Berlin,; Pereslavl-Zalessky, Russia</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="1989">1989</date>
			<biblScope unit="volume">363</biblScope>
			<biblScope unit="page" from="134" to="145" />
		</imprint>
	</monogr>
	<note>Logic at Botik</note>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Program proving as hand simulation with a little induction</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">M</forename><surname>Burstall</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Information processing</title>
		<imprint>
			<biblScope unit="volume">74</biblScope>
			<biblScope unit="page" from="309" to="312" />
			<date type="published" when="1974">1974</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Symbolic execution and program testing</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">C</forename><surname>King</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">19</biblScope>
			<biblScope unit="issue">7</biblScope>
			<biblScope unit="page" from="385" to="394" />
			<date type="published" when="1976">1976</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<title level="m" type="main">Verifying Concurrent Systems with Symbolic Execution</title>
		<author>
			<persName><forename type="first">M</forename><surname>Balser</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2006">2006</date>
			<publisher>Shaker Verlag</publisher>
			<pubPlace>Germany</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title level="m" type="main">Executing Temporal Logic Programs</title>
		<author>
			<persName><forename type="first">B</forename><surname>Moszkowski</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1986">1986</date>
			<publisher>Cambridge University Press</publisher>
			<pubPlace>Cambridge</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">KIV 3.0 for Provably Correct Systems</title>
		<author>
			<persName><forename type="first">M</forename><surname>Balser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Reif</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Schellhorn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Stenzel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. Int. Wsh. Applied Formal Methods</title>
				<editor>
			<persName><forename type="first">D</forename><surname>Hutter</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">W</forename><surname>Stephan</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">P</forename><surname>Traverso</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Ullmann</surname></persName>
		</editor>
		<meeting>Int. Wsh. Applied Formal Methods</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="1999">1999</date>
			<biblScope unit="volume">1641</biblScope>
			<biblScope unit="page" from="330" to="337" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<title level="m" type="main">Interactive verification of concurrent systems using symbolic execution</title>
		<author>
			<persName><forename type="first">M</forename><surname>Balser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Reif</surname></persName>
		</author>
		<idno>2008-12</idno>
		<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
		<respStmt>
			<orgName>Universität Augsburg</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<title level="m" type="main">ITL -Interval Temporal Logic</title>
		<author>
			<persName><forename type="first">A</forename><surname>Cau</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Moszkowski</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Zedan</surname></persName>
		</author>
		<ptr target="http://www.cse.dmu.ac.uk/STRL/ITL/" />
		<imprint>
			<date type="published" when="2002">2002</date>
			<publisher>The Gateway</publisher>
			<pubPlace>Leicester LE1 9BH, UK</pubPlace>
		</imprint>
		<respStmt>
			<orgName>Software Technology Research Laboratory, SERCentre, De Montfort University</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Temporal verification diagrams</title>
		<author>
			<persName><forename type="first">Z</forename><surname>Manna</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Pnueli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">LNCS</title>
		<imprint>
			<biblScope unit="volume">789</biblScope>
			<biblScope unit="page" from="726" to="765" />
			<date type="published" when="1994">1994</date>
			<publisher>Springer-Verlag</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<title level="m" type="main">An interval temporal logic with compositional interleaving</title>
		<author>
			<persName><forename type="first">M</forename><surname>Balser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Reif</surname></persName>
		</author>
		<idno>2008-11</idno>
		<imprint>
			<date type="published" when="2008">2008</date>
		</imprint>
		<respStmt>
			<orgName>Universität Augsburg</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Conjoining specifications</title>
		<author>
			<persName><forename type="first">M</forename><surname>Abadi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Lamport</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Programming Languages and Systems</title>
		<imprint>
			<date type="published" when="1995">1995</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Parallel composition of assumption-commitment specifications: A unifying approach for shared variable and distributed message passing concurrency</title>
		<author>
			<persName><forename type="first">A</forename><surname>Cau</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Collette</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Acta Inf</title>
		<imprint>
			<biblScope unit="volume">33</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="153" to="176" />
			<date type="published" when="1996">1996</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<title level="m" type="main">Introduction to VLSI systems</title>
		<author>
			<persName><forename type="first">C</forename><surname>Mead</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Conway</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1980">1980</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Interactive verification of uml state machines</title>
		<author>
			<persName><forename type="first">M</forename><surname>Balser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Bäumler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Knapp</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Reif</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Thums</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. 6th Int. Conf. of Formal Engineering Methods</title>
				<editor>
			<persName><forename type="first">J</forename><surname>Davies</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">W</forename><surname>Schulte</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Barnett</surname></persName>
		</editor>
		<meeting>6th Int. Conf. of Formal Engineering Methods</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="volume">3308</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<title level="m" type="main">Formale Fehlerbaumanalyse</title>
		<author>
			<persName><forename type="first">A</forename><surname>Thums</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2004">2004</date>
			<pubPlace>Augsburg, Germany</pubPlace>
		</imprint>
		<respStmt>
			<orgName>Universität Augsburg</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">PhD thesis</note>
	<note>in German</note>
</biblStruct>

<biblStruct xml:id="b21">
	<monogr>
		<title level="m" type="main">Asbru in KIV v2.1 -a tutorial</title>
		<author>
			<persName><forename type="first">J</forename><surname>Schmitt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Balser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Reif</surname></persName>
		</author>
		<idno>2006-03</idno>
		<imprint>
			<date type="published" when="2006">2006</date>
		</imprint>
		<respStmt>
			<orgName>University of Augsburg</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Augmenting semantic web service descriptions with compositional specification</title>
		<author>
			<persName><forename type="first">M</forename><surname>Solanki</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Cau</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Zedan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of 13th int. conference on World Wide Web</title>
				<editor>
			<persName><forename type="first">S</forename><forename type="middle">I</forename><surname>Feldman</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Uretsky</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Najork</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">C</forename><forename type="middle">E</forename><surname>Wills</surname></persName>
		</editor>
		<meeting>of 13th int. conference on World Wide Web</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="page" from="544" to="552" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Compositionality and concurrent networks: Soundness and completeness of a proofsystem</title>
		<author>
			<persName><forename type="first">J</forename><surname>Zwiers</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">P</forename><surname>De Roever</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Van Emde Boas</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. of 12th Colloquium on Automata, Languages and Programming</title>
				<meeting>of 12th Colloquium on Automata, Languages and Programming</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="1985">1985</date>
			<biblScope unit="page" from="509" to="519" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">P-A logic: a compositional proof system for distributed programs</title>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">K</forename><surname>Pandya</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Joseph</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Distributed Computing</title>
		<imprint>
			<biblScope unit="volume">5</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="37" to="54" />
			<date type="published" when="1991">1991</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">Compositional reasoning using interval temporal logic and tempura</title>
		<author>
			<persName><forename type="first">B</forename><surname>Moszkowski</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">LNCS</title>
		<imprint>
			<biblScope unit="volume">1536</biblScope>
			<biblScope unit="page" from="439" to="464" />
			<date type="published" when="1996">1996</date>
			<publisher>Springer-Verlag</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<monogr>
		<title level="m" type="main">In transition from global to modular temporal reasoning about programs</title>
		<author>
			<persName><forename type="first">A</forename><surname>Pnueli</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1985">1985</date>
			<biblScope unit="page" from="123" to="144" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title level="a" type="main">A generalization of Owicki-Gries&apos;s Hoare logic for a concurrent while language</title>
		<author>
			<persName><forename type="first">C</forename><surname>Stirling</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Theor. Comput. Sci</title>
		<imprint>
			<biblScope unit="volume">58</biblScope>
			<biblScope unit="issue">1-3</biblScope>
			<biblScope unit="page" from="347" to="359" />
			<date type="published" when="1988">1988</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">Using VDM with rely and guarantee-conditions. Experiences from real projects</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">C P</forename><surname>Woodcock</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Dickinson</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2nd VDM-Europe Symposium on VDM-The Way Ahead</title>
				<meeting>the 2nd VDM-Europe Symposium on VDM-The Way Ahead<address><addrLine>New York, NY, USA; New York, Inc</addrLine></address></meeting>
		<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="1988">1988</date>
			<biblScope unit="page" from="434" to="458" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">Applications of temporal logic to the specification and verification of concurrent systems: A survey of current trends</title>
		<author>
			<persName><forename type="first">A</forename><surname>Pnueli</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">LNCS</title>
		<imprint>
			<biblScope unit="volume">224</biblScope>
			<date type="published" when="1986">1986</date>
			<publisher>Springer</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<analytic>
		<title level="a" type="main">Assumption/guarantee specifications in linear-time temporal logic</title>
		<author>
			<persName><forename type="first">B</forename><surname>Jonsson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><forename type="middle">K</forename><surname>Tsay</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Theoretical Computer Science</title>
		<imprint>
			<biblScope unit="volume">167</biblScope>
			<date type="published" when="1996">1996</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b31">
	<monogr>
		<title level="m" type="main">Black box views of state machines</title>
		<author>
			<persName><forename type="first">M</forename><surname>Breitling</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Philipps</surname></persName>
		</author>
		<idno>TUM-I9916</idno>
		<imprint>
			<date type="published" when="1999">1999</date>
		</imprint>
		<respStmt>
			<orgName>Technische Univerität München</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical Report</note>
</biblStruct>

<biblStruct xml:id="b32">
	<analytic>
		<title level="a" type="main">Modular reasoning about structured tla specifications</title>
		<author>
			<persName><forename type="first">G</forename><surname>Rock</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Stephan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Wolpers</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Tool Support for System Specification, Development and Verification</title>
				<editor>
			<persName><forename type="first">R</forename><surname>Berghammer</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Y</forename><surname>Lakhnech</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="1999">1999</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
