<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>On Correctness of Graph Programs Relative to Recursively Nested Conditions</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Nils Erik Flick⋆</string-name>
          <email>flick@informatik.uni-oldenburg.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Carl von Ossietzky Universität</institution>
          ,
          <addr-line>26111 Oldenburg</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>We propose a new specification language for the proof-based approach to verification of graph programs by introducing µ -conditions as an alternative to existing formalisms which can express path properties. The contributions of this paper are the lifting of constructions from nested conditions to the new, more expressive conditions, and a proof calculus for partial correctness relative to µ -conditions.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        graph program
The correctness proof is done in the style of Dijkstra’s [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] predicate
transformer approach in Pennemann’s thesis [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], while Poskitt’s thesis [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] features
a Hoare [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] logic for partial and total correctness. Both works are based on
nested conditions, which cannot express non-local properties of graphs, such as
connectivity. In this paper, we consider non-local properties, and we present an
extension to the proof calculus from [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
⋆ This work is supported by the German Research Foundation (DFG), grant GRK
1765 (Research Training Group – System Correctness under Adverse Conditions)
Our formalism is an extension of nested conditions by recursive definitions. While
several extensions of nested graph conditions to non-local conditions already
exist (Radke [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], Poskitt and Plump [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]), we argue that as opposed to the
former, ours already offers a weakest precondition calculus that can handle any
condition expressible in it; as compared to the latter, which relies more heavily
on expressing properties directly in (monadic second-order) logic, ours is more
closely related to nested conditions and shares the same basic methodology.
Therefore µ -conditions, albeit still work in progress, offer a new viewpoint that
may be sufficiently different from existing ones to be worth investigating.
The outline of the paper is as follows: Section 2 recalls graph programs and
conditions. Sections 3 and 4 introduce µ-conditions and correctness under µ
conditions, respectively, together with an exemplary application of the method,
Section 5 provides context by listing related work and Section 6 concludes with
an outlook. After the main text, there is an appendix with the proofs.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Graph Conditions and Programs</title>
      <p>
        In this section, we introduce graph conditions and graph programs. We assume
familiarity with graph transformation systems in the sense of Ehrig et al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], and
the basic notions of category theory. For standard definitions and more details,
we refer the reader to Ehrig et al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. For an in-depth introduction to nested
conditions and graph programs and practical approaches to semi-automatic theorem
proving in this context, we refer the reader to Pennemann [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>Notation. The domain and codomain of a morphism f : G → H are denoted
by dom(f ) = G and cod(f ) = H. Injective morphisms (monomorphisms) are
distinguished typographically by a curly arrow f : G ֒→ H while double-tailed
arrows f : G ։ H denote surjective ones (epimorphisms). We use the symbol
M to denote the class of all graph monomorphisms. A partial morphism is a pair
of monomorphisms with the same domain. The empty graph is denoted by ∅.</p>
      <sec id="sec-2-1">
        <title>All graphs in this paper are assumed to be finite.</title>
        <p>A brief review of nested conditions follows. Nested graph conditions were
proposed by Habel and Pennemann. Finite nested conditions were later shown to
be equally expressive as graph-interpreted first-order predicate logic. Graph
conditions can be used as constraints to specify state properties, or as application
conditions to restrict the applicability of a rule.</p>
        <p>Definition 1 (Nested Graph Conditions). Let Cond be the class of nested
conditions, defined inductively as follows (where P, C′, C are graphs):
– If J is a countable set and for all j ∈ J , cj is a condition (over P ), then</p>
        <p>Wj∈J cj is a condition (over P ). This includes the case J = ∅ (for any P ).
– If c is a condition (over P ), then ¬c is also a condition (over P ).
– If a : P ֒→ C′ is a monomorphism, ι : C ֒→ C′ is a monomorphism and c′ is
a condition (over C), then ∃(a, ι, c′) is a condition (over P ).</p>
        <p>We call c′ a direct subcondition of ∃(α, ι, c′), ¬c′ and c′∨c′′ and use subcondition
for the reflexive and transitive closure of this syntactically defined relation.
Notation. If c is a condition over P , then P is its type1 and we write c : P ,
and CondP is the class of all conditions over P . We may write ∃(a, c) instead of
∃(a, idcod(a), c). The usual abbreviations define the other standard operators: V
is ¬ W ¬, ∀ is ¬∃¬. No morphism satisfies the disjunction over the empty index
set. We introduce false as a notation for it, and true for ¬false. We may omit
the subcondition true (together with ι), writing ∃(a) for ∃(a, ι, true).
When all the index sets are finite, one obtains the finite nested conditions. The
morphism ι serves to unselect2 a part of C′, which will become necessary later.
Definition 2 (Satisfaction). A monomorphism f : P ֒→ G satisfies a
condition c : P , denoted f |= c, iff c = true, c = ¬c′ and f 6|= c′, or c = Wj∈J cj and
there is a j ∈ J such that f |= cj , or c = ∃(a, ι, c′) (a : P ֒→ C′, ι : C ֒→ C′,
c′ : C) and there exists a monomorphism q : C′ ֒→ G such that f = q ◦ a and
q ◦ ι |= c′.</p>
        <p>∃(P a
f q
G</p>
        <p>C′</p>
        <p>ι
q ◦ ι</p>
        <p>C,
|=
c′ )
A graph G satisfies a condition c : ∅ iff the unique morphism ∅ ֒→ G satisfies c.
In the diagram of Def. 2, the triangle indicates that C is the type of the
subcondition c′ which appears nested inside ∃(α, ι, c′).</p>
        <p>
          Remark 1 (No Added Expressivity). Our conditions with ι are equally
expressive as the nested conditions defined in [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. The proof, which we omit here,
relies on the transformation A from [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
        </p>
        <p>Definition 3. ≡ denotes logical equivalence, i.e. for conditions c, c′ : P , c ≡ c′
iff for all monomorphisms m with domain P , ⇒ m |= c ⇔ m |= c′.
Notation. As one can see in Fig. 1, the notation for graph conditions
customarily only depicts source or target graphs of morphisms. The tiny blue numbers
1 when we mention “type graphs” in the text, we just mean graphs used as types.
2 We will use the term “unselection” anytime a morphism is used in the inverse
direction: in Def. 1, the morphism ι is used to base subconditions on a smaller subgraph,
in effect reducing the selected subgraph; it will also appear in our definition of graph
programs as the name of an operation that reduces the current selection, i.e. the
subgraph the program is currently working on – similarly for “selection”.
|=
∃
show the morphisms’ node mappings. We also adopt the convention of not
explicitly representing the morphism ι in a situation ∃(a, ι, xi); we prefer to annotate
the variable’s type graph with the images of items under ι in parentheses.
Next, we introduce graph transformations. We follow the double pushout
approach with injective rules and injective matches. For technical reasons, we
define graph transformations in terms of four elementary steps, namely selection,
deletion, addition and unselection. Deletion and addition always apply to a
selected subgraph, and selection and unselection allow the selection to be changed.
skip is a no-op used in the definition of sequential composition. The definition
below allows for somewhat more general combinations of the basic steps, which
cannot be expressed by sets of graph transformation rules.</p>
        <p>
          The semantics of a graph program is a triple of two monomorphisms and one
partial morphism. The two monomorphisms represent the selected subgraphs
before and after the execution of the program respectively, and the partial
morphism records the changes effected by the program. Our programs are a proper
subset of those in Pennemann [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], and use the same semantics.
Definition 4 (Graph Programs).
        </p>
        <p>In the following table, x, l, r, y, min and mout are monomorphisms, with x, l, r
and y arbitrarily chosen to define a program step, while min and mout are called
interfaces and universally quantified in the set comprehensions that appear in
the definitions below.</p>
        <p>Name Program P Semantics JP K
selection Sel(x) {(min, mout, x) | mout ◦ x = min}
deletion Del(l) {(min, mout, l−1) | ∃l′, (mout, l, min, l′) pushout}
addition Add(r) {(min, mout, r) | ∃r′, (min, r, mout, r′) pushout}
unselection U ns(y) {(min, mout, y−1) | mout = min ◦ y}
skip skip {(m, m, iddom(m)) | m ∈ M}
If P and Q are graph programs, then so are their disjunctive {P, Q} and
sequential (P ; Q) composition. The semantics of disjunction is a set union JP K ∪ JQK
and the semantics of sequence is JP ; QK = {(m, m′, p) | ∃(m, m′′, p′) ∈ JP K,
(m′′, m′, p′′) ∈ JQK, p = p′; p′′}, where composition p′; p′′ of partial morphisms
p′ = G1 ←l1֓ D1 ֒→r1 H1, p′′ = H1 ←l2֓ D2′ ֒→r2 H2 is defined as G l1←◦l֓2′ D′′ r2֒→◦r1′ H2
using the pullback (r1′, l2′) of (r1, l2). If P is a graph program, then so is its
iteration P ∗; JP ∗K = Sj∈NJP j K where P j = P ; P j−1 for j ≥ 1 and P 0 = skip.
Remark 2. The definitions generalise the state transitions in plain graph
transl r
formation, a rule ̺ = (L ←֓ K ֒→ R) being precisely simulated by the program
Sel(∅ ֒→ L); Del(l); Add(r); U ns(∅ ֒→ R).</p>
        <p>
          μ-Conditions
In this section, we define µ -conditions on the basis of nested graph conditions.
These are capable of expressing path and connectivity properties, which
frequently arise in the study of the correctness of programs with recursive data
structures, or in the modelling of networks. We then define and prove the
correctness of some basic constructions. An example is provided at the end of this
section to illustrate the constructions step by step.
Nested conditions are a very successful approach to the specification of graph
properties for verification. However, they are unable to express non-local
properties such as connectedness. Our idea is to generalise nested conditions to
capture certain non-local properties by adding recursion. The resulting formalism
will be similar to first order fixed point logics, see e.g. Kreutzer [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. The reader
might want to compare our µ -conditions to a distinct formalism towards
expressing non-local properties, the very powerful grammar-based HR∗ conditions
of Radke [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. We argue that µ -conditions are worth looking into despite the
availability of strong contenders for the extension of nested conditions to
nonlocal properties, such as MSO-conditions [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] because µ -conditions provide a
new and different generalisation of nested conditions, and neither is it
immediately clear how the respective expressivities compare. The related work section,
Sec. 5, contains a summary on different non-local graph condition formalisms.
Specifically, we will show in this section that the weakest liberal precondition
transformation, core of the Dijkstra-style approach, can be adapted.
Notation. Sequences (of graphs, placeholders, morphisms) are written as bold
letters P , x, f , and their components are numbered starting from 1. The length
of a sequence P is denoted by kP k. Indexed typewriter letters x1 stand for
placeholders, i.e. variables. The notation c : P indicating that c has type P is
also extended to sequences: c : P (provided kck= kP k).
        </p>
        <p>
          To define fixed point conditions, we need something to take fixed points of, and
to ascertain that the fixed point exists. Choosing a partial order on CondP , one
can define monotonic operators on CondP . The semantics of satisfaction already
defines a pre-order: c ≤ c′ iff every morphism that satisfies c also satisfies c′,
which is obviously transitive and reflexive. As in every pre-order, ≤ ∩ ≤−1 is
an equivalence relation compatible with ≤ and comparing representants via ≤
partially orders its equivalence classes. We introduce variables as placeholders
where further conditions can be substituted3.
3 Note that in our approach variables stand only for subconditions, not for attributes
or parts of graphs. Wherever confusion with similarly named concepts from the
literature could arise, we will use the word “placeholder” meaning “variable”.
To represent systems of simultaneous equations, we work on tuples of conditions.
If P = P1, . . . , PkP k is a sequence of graphs, then CondP is the set of all kP
ktuples c of conditions, whose i-th element is a condition over the i-th graph of
P . Satisfaction is defined component-wise: f |= c iff ∀k ∈ {1, . . . , kP k} fk |= ck.
By definition, V and W of countable sets of CondP conditions exist for any P ,
and they are easily seen to be least upper and greatest lower bounds of the
sets. This makes Cond≡P a complete lattice. Let CondP be ordered with the
product order by defining f |= c to be true when the conjunction holds. This
again induces a partial order on the set of equivalence classes, Cond≡P . Thus,
Cond≡P is also a complete lattice, and monotonic operators have least fixed
points by the Knaster-Tarski theorem [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ], given by the limit of F n(false ) for
all n ∈ N . This ensures that systems of equations as defined below yield least
fixed point solutions, which is crucial in the definition of a µ -condition. We
extend the inductive definition from Def. 1 as follows:
Definition 5 (Graph Conditions with Placeholders). Given a graph P
and a finite sequence P of graphs or morphisms, a condition with placeholders
from P over P is a (graph) condition with placeholders is either ∃(a, ι, c), or ¬c,
or Wj∈J cj , or xi, 1 ≤ i ≤ kP k where xi is a variable of type Pi.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>A condition can be substituted for a variable of same type:</title>
        <p>Definition 6 (Substitution). If P is a list of graphs and F is a condition
with placeholders x over P , then if c ∈ CondP , then F [x/c] is obtained by
substituting each occurrence of xi by ci for all i ∈ {1, ..., kPk}.</p>
        <p>Satisfaction of conditions with placeholders by a morphism f is defined in the
obvious way relative to a valuation, which is an assignment of true or false to
each monomorphism of the type graph of the variable into cod(f ).
As discussed above, a least fixed point will be sought only up to logical
equivalence. To guarantee existence of the least fixed point, the operator must be
monotonic (c ≤ d ⇒ F (c) ≤ F (d) for any c, d ∈ CondP ). Monotonicity can be
enforced syntactically for substitutions by never placing a variable under an odd
number of negations, which is proved by structural induction as in fixed point
logics or the modal µ calculus.</p>
        <p>Definition 7 (µ -Condition). Given a finite list P , if {Fi}i∈{1,...,kP k} are
conditions with placeholders from P , over the graphs of P respectively, then µ [P ]F
denotes the least fixed point of the operator c 7→ F [x/c].</p>
        <p>A µ -condition is a pair (b, l) consisting of a condition with placeholders b, and a
finite list of pairs l = (xi, Fi(x)) of a variable xi : Pi and a condition Fi(x) : Pi,
with placeholders from x, for some graph Pi, such that F is monotonic.
Notation. we write the list of pairs l = (xi, Fi(x)) as a system of equations
x = F (x). We call b the main body and l the recursive specification of (b, l), and
F (c) is understood as substitution of conditions c for the variables x.
Thus each condition with placeholders typed over P defines a unary operator
on CondP .</p>
        <p>
          Remark 3 (First Example: µ -Conditions are More General than Nested).
1. µ -conditions generalise nested conditions, consequently all examples for
nested conditions are examples for µ -conditions (with no variables or equations).
2. µ -conditions are strictly more general than nested conditions: the following
expresses the existence of a path of unknown length between two given nodes.
3
x1[
          <xref ref-type="bibr" rid="ref12">1 2</xref>
          ] where x1[
          <xref ref-type="bibr" rid="ref12">1 2</xref>
          ] = ∃(
        </p>
        <p>) ∨ ∃(
It is read as follows: the word “where” separates the main body from the
equations. Here, x1 is the only variable, and its type graph is indicated in square
brackets. The second existential quantifier uses a morphism to unselect node 1
and the sole edge: its source is the type graph of x1, which is indeed
syntactically required for using the variable in that place. The unselection morphism ι
is implicit in the notation, and is only expressed by adding small blue numbers
in parentheses to the node numbers in its source graph to specify the mapping.
This compact notation for ι is why the second existential quantifier in the
example has only two fields. To ease reading and writing, we adopt the convention
to always use precisely the same layout for the type graph of a given variable.
The following statement is not needed in the proofs that will follow, but it helps
motivate the use of the “unselection” morphisms. We therefore view it as justified
to leave the proof as an exercise:
Remark 4 (Why ι). A µ -condition where ι is the identity in all subconditions of
the main body and of the components Fi(x) is equivalent to a nested condition.</p>
      </sec>
      <sec id="sec-2-3">
        <title>The following fact is well-known:</title>
        <p>Remark 5. The least fixed point of F is equivalent to Wn∈N F n(false ).
Definition 8 (Satisfaction). The µ -condition b | x = F (x) with x : P is
satisfied by a morphism f iff f |= b[x/µ [P]F ].</p>
        <p>Remark 6 (No Infinite Nesting). By the characterisation of the least fixed point
as an infinite disjunction, every µ -condition is equivalent to an infinite nested
condition. Infinitely deep nesting does not arise, because the characterisation in
Remark 5 yields a countable disjunction of finitely deeply nested conditions.
A morphism satisfies a given µ -condition iff it satisfies the finite nested condition
obtained by unrolling the recursive specification up to some finite depth and
substituting the resulting nested conditions into the main body:
Proposition 1 (Satisfaction at Finite Recursion Depth). f |= b | x =
F (x) iff ∃n ∈ N, f |= b[x/F n(false )].</p>
        <p>Theorem 1 (Deciding Satisfaction of µ -conditions). Given a morphism
f : P ֒→ G and a µ -condition c, it is decidable whether f |= c.</p>
        <p>Weakest Liberal Preconditions of μ-conditions
In this subsection, we present a construction to compute the weakest liberal
precondition of any given µ-condition with respect to any graph program P that
does not use iteration (“liberal” means that termination of P is not implied, and is
redundant in the absence of iteration, as only iteration causes non-termination).
Definition 9 (Weakest Liberal Precondition). The weakest liberal
precondition (wlp) of c with respect to the program P , wlp(P, c), is the least condition
with respect to implication such that f ′ |= c ⇒ f |= wlp(P, c) if (f, f ′, p) ∈ JP K
for some partial morphism p.</p>
        <p>
          We will show that under this assumption there is a µ -condition that expresses
precisely the weakest liberal precondition of a given µ -condition with respect to
a rule, and it can be computed. The result is similar to the situation for nested
conditions. To derive it, we use the shift transformation Am(c) from [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] whose
fundamental property is to transform any nested condition c into another nested
condition such that m′′ |= Am(c) iff m′′ ◦ m |= c for all composable pairs m′′, m
of monomorphisms (Lemma 5.4 from [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]). Since this and similar constructions
play an important role in this section, we recall here the case c = ∃(a, c′): if
(m′, a′) is the pushout of (m, a), let Epi be the set of all epimorphisms e with
domain cod(m′) that compose to monomorphisms b := e ◦ a′ and r := e ◦ m′.
Then Am(∃(a, c′)) = We∈Epi ∃(b, Ar(c′)).
        </p>
        <p>With help of the unselection ι in ∃(a, ι, c), it is at first glance trivial to exhibit
a weakest liberal precondition with respect to U ns(y). However, to handle the
addition and deletion steps, a construction becomes necessary that makes the
affected subgraph explicit again. This information is crucial to obtain the weakest
liberal precondition with respect to Add(r) and Del(l) and must not be forgotten
at any nesting level in order to obtain the correct result. To that aim, we define
a partial shift construction which makes sure that the type graph of the main
body is never unselected in the µ -condition but is instead mapped in a consistent
way as a subgraph of the type graph of each variable. The following serves to
obtain the new type graphs containing the type of the main body:</p>
      </sec>
      <sec id="sec-2-4">
        <title>Construction 1 (New type graphs for partial shift).</title>
        <p>We assume that an arbitrary total order on all graph morphisms is fixed. If
c = b | µ [K]F is a µ -condition, then for a variable xi of K, XR,c(xi) is defined
as the sequence of morphisms f obtained as below, in ascending order.
The morphisms f are obtained from P ′ by collecting all epimorphisms that
compose to monomorphisms with the pushout morphisms in the diagram:
∅
R</p>
        <p>Pi
X
f</p>
        <p>P ′
j
Construction 2 (Partial shift).</p>
        <p>Given monomorphisms x : G ֒→ H and y : R ֒→ H,
Px,y(b | µ [K]F ) := Px,y(b) | µ [K′]F ′, where the new list of variables K′ and
their respective types P ′ are obtained by concatenating all XR,c(xi) of the
variables of K in order. where the new variables and equations are obtained by
applying Pf,y to the variables of the left hand sides with all possible morphisms
f from R, as below, and accordingly to the right hand sides.</p>
        <p>Px,y(xi) = xiy if xi : G, where xi : H is a new variable, H = cod(y).</p>
        <p>y
Px,y(∃(P ֒→ C′ ←ι ֓ C, c′)) is constructed as follows: Let Epi be the set of all
a
epimorphisms e with domain H′ that compose to monomorphisms r = e ◦ x′ and
b = e ◦ h with the pushout morphisms. Px,y(∃(P ֒→ C′ ←֓ C, c′) = WEpi ∃(H ֒→
E ←֓ J, Pi,y′ (c′)): for each member of the disjunction, form the pullback of r ◦ ι
and b ◦ y, then pushout the obtained morphisms to (y′, i) as in the diagram:
B</p>
        <p>P C′ ι C
x x′ ′ i
H h H′ ι J
y e
R
y′</p>
        <p>E
c′
Boolean combinations of conditions are transformed to the corresponding
combinations of the transformed members.</p>
        <p>Remark 7 (Ambiguous Variable Contexts). Note that in a µ -condition it is
not necessarily true that in all contexts where xi is used, it appears with the
same morphism R ֒→ Pi (where R is the type of b). It is however possible to
equivalently transform every µ -condition into a “normal form” that has that
property. Applying PidR,idR will by construction result in a µ -condition with
unambiguous inclusions R ֒→ Pi for all variables (namely the morphisms from
the sequences XR,c), and this property is also preserved by the constructions
introduced later in this section. Unreachable variables created by X and P can
be pruned to obtain an equivalent, but sometimes smaller µ -condition.
Equivalence of conditions with placeholders (unlike µ -conditions) is only defined
for conditions using the same sets of variables, as equivalence in the sense of
nested conditions for each valuation. We extend A to conditions with
placeholders by defining Am(x) to be ∃(idcod(m), m, x) if x : P .</p>
        <p>One can show that Px,y is equivalent to Ax. The reason for introducing Px,y is
that it allows precise control over the types of the variables in the transformed
condition, which should include the type of the main body. Intuitively, as this
corresponds to the currently selected subgraph of a graph program, additions
and deletions are applied to that subgraph and one must make sure that the
changes apply to the whole µ -condition to obtain the correct result.
Lemma 1. The conditions Px,y(c) and Ax(c) are equivalent.</p>
        <p>We introduce the transformations δ′m(c), α′m(c) (based on auxiliary
transformations δm,y(c) and αm,y(c), repsectively), which are used in the computation
of the weakest liberal precondition (with respect to addition and deletion,
respectively4), of a µ -condition that has already undergone partial shift:
Definition 10 (Transformations δ′ and α′ ).</p>
        <p>
          Let c : G be a condition with placeholders. If r : K ֒→ R and y : R ֒→ G (resp.
l : K ֒→ L and y : K ֒→ G) are monomorphisms, then δr,y(c) (αl,y(c)) is defined
as follows: δr,y(¬c) = ¬δr,y(c) and δr,y(Wj∈J cj ) = Wj∈J δr,y(cj ) (respectively:
αl,y(¬c) = ¬αl,y(c) and αl,y(Wj∈J cj ) = Wj∈J αl.y(cj )).
Case of δm,y(c′): If the pushout complement of r and a ◦ y does not exist, then
δm,y(c) = f alse. Otherwise, obtain it as x′ and r′ and pullback (a, r′) to (a′, r′′)
with source W ; this yields a morphism h from K to W to make the diagram
commute and the special PO-PB lemma [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] applicable. Pullback (ι, r′) to (ι′, r′′′),
(x′ = a′ ◦ h) and let δm,y(c) = ∃(a′, ι′, δm,y′′ (c′)) (the pullback property yields
existence and uniqueness of y′′ between K and V to make it commute).
Case of αl,y(c): pushout (y, l) to (l′, h); pushout (l′, a) to (l′′, a′); pullback (a′ ◦
h, l′′ ◦ι) and pushout to (y′′, l′′′) over the pullback (not drawn in the figure except
for the morphism l′′′′). The commuting morphism from the pushout object V to
X fills in to yield ∃(a′, ι′, αl,y(c′)). The commuting morphism from L to V is y′′.
For variables, δm,y(xi) = x′i is a new variable of type K, likewise αm(xi) has type
L (see Rem. 7). Finally, δ′m(c) = δm,id(Pid,id(c)) and α′m(c) = αm,id(Pid,id(c)).
In contrast to P, the transformations α′ and δ′ leave the number of variables
unchanged. Only the types of the variables are modified. We recall that for any
l : K ֒→ L, there is a condition Δ(l) that expresses the possibility of effecting
Del(l), i.e. Δ(l) is satisfied exactly by the first components of tuples in JDel(l)K.
We describe Δ(l) only informally: f |= Δ(l) states the non-existence of edges
that are in im(f ) but incident to a node in im(f ) − im(f ◦ l).
        </p>
        <p>Theorem 2 (Weakest Liberal Precondition for µ -conditions). For each
rule ̺, there is a transformation Wlp̺ that transforms µ -conditions to µ
-conditions and assigns to each condition c such that m′ |= c another condition Wlp̺(c)
4 The letters were chosen so as to indicate the effect of the transformation: to compute
the weakest precondition with respect to addition, δ′ needs to delete portions of the
morphisms in the condition, and vice versa.
l</p>
        <p>K
P a C′ ι C
y</p>
        <p>l′′′
y′
δr,y′′ (c′)
c′
with the property that m |= Wlp̺(c) whenever (m′, m, p) ∈ J̺K and Wlp̺(c) is
the least condition with respect to implication having this property.
In this subsection, we construct a weakest liberal precondition of a µ -condition
step by step. Figure 2 shows a single-rule graph program which matches a node
with exactly one incoming and one outgoing edge and replaces this by a single
edge. The effect of the rule is to contract paths, and it can be applied as long as
no other edges are attached to the middle node.</p>
        <p>3
Sel ∅ ֒→
; Del</p>
        <p>←֓</p>
        <p>
          Figure 3 shows a µ -condition whose weakest liberal precondition we wish to
compute. It is a typical example of a µ -condition, which evaluates to true on
those graphs that contain some node which has a path to every other node.
3
∃( 1 , ∀( 1 2 , x1)) where x1[
          <xref ref-type="bibr" rid="ref12">1 2</xref>
          ] = ∃( 1 2 ) ∨ ∃( 1 2 , x1[ 1(3) 2(2) ])
Fig. 3. A µ-condition c3 = (b, l) expressing the existence of a node from which there
exists a path to every other node.
3
∃(1 2 ←֓ ∅, ∀(1 2 , x1)) where x1[
          <xref ref-type="bibr" rid="ref12">1 2</xref>
          ] = ∃( 1 2 ) ∨ ∃(1 2 , x1[1(3) 2(2)])
Fig. 4. Wlp(U nsc, c3). Note that the nodes under the universal quantifier are not the
same as those of the outer existential quantifier, as these have been unselected: the
type of the subcondition ∀(...) is ∅.
        </p>
        <p>
          In Figures 5 and 6, a partial shift has been applied to the condition of
Figure 4 (Wlp(U nsc, c3)), and the modifications the condition undergoes in the
computation of the weakest precondition with respect to Addc and Delc are
highlighted in various colours (see Figure 7 for a legend). Construction 1 has
yielded a new list of variables5, x1, ..., x7, the corresponding equations are shown
in 6. Note that the representation is somewhat further abbreviated: type graphs
of variables are suppressed in the notation in subconditions ∃(a, ι, xi), when the
mapping ι from the type graph to the target of a is the identity. No other
simplifications were applied. We have highlighted in yellow and red the type of the
main body of Wlp(U nsc, c3) throughout Figure 5; edges that are highlighted in
red are deleted to compute Wlp(Addc, Wlp(U nsc, c3)) as per Def. 10; the edges
and nodes highlighted in red are not present initially, but added to compute
Wlp(Delc, Wlp(Addc, Wlp(U nsc, c3))) as per Def. 10, which is obtained by
conjoining Δ(l) to the main body (which we have not represented, as it is easy
to compute and would only encumber the illustration). In the end, a universal
5 Although the original µ-condition needed only one variable, the partial shift yields
a µ-condition with multiple variables in general.
quantification with morphism ∅ ֒→ L completes the weakest precondition with
respect to the rule, as in the construction for nested conditions [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
The outer existential quantifier in Fig. 5, where the unselection morphism is not
shown in the abbreviated representation, is really as in Fig. 8:
∃ ←֓ , ...
        </p>
        <p>1 5 2 1 5 2</p>
        <p>Fig. 8. Outer nesting level of the conditions in Fig. 5
When following the construction through the nesting levels, please keep in mind
that one may sometimes choose among isomorphic pushout objects and the
numbers of new nodes are arbitrary, but the nodes 1, 2 and (as created by
the transformation α′ ) 5 are never “unselected” and therefore present in every
type graph occurring in the weakest preconditions, similarly for the edges (not
numbered because their mapping is unambiguous in the example).
4</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Correctness Relative to μ-conditions</title>
      <p>
        In the previous section, we have shown how the weakest liberal precondition
construction for nested conditions carries over to µ -conditions. The next task is
to develop methods for deducing correctness relative to µ -conditions and extend
the proof calculus, for which we offer a partial solution in this section.
The soundness of Pennemann’s calculus K has been established in the
publications introducing them, and recently a tableaux based completeness proof of K
was published [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. The proof rules of K are easily seen to be sound for µ
-conditions as well, however the recursive definitions requires an extension.
For our calculus Kµ , we adopt the resolution-style rules of K and add an
induction principle to deal with certain situations involving fixed points. This proved
to be sufficient to handle all the situations encountered in the examples.
We employ a sequent notation: the inference rules manipulate objects Ctx : Γ ⊢
Δ, with the intended meaning that the disjunction of Δ can be deduced from
the conjunction of Γ in the context Ctx. The context Ctx is a pair of a left
hand side of a sequent and an operator on µ -conditions. Γ and Δ are sets of
expressions, which differ from conditions in that identifiers can be used for the
main bodies of µ -conditions and both these and variables can be annotated with
their recursion depth, an implicitly universally quantified natural number. xi(n)
then stands for F (n)(false) and an auxiliary rule permits to unroll it to the i-th
i
component of F applied to x(n−1).
      </p>
      <p>The induction rule announced above is (where Hi,j for each i ∈ {1, ..., kIk},
j ∈ {1, ..., kJ k} is any condition with placeholders):
∀i,j
}|
z (m) ∧ ¬y(jn) ⊢ {
xi
Hi,j(x(1m−1) ∧¬y(1n), ..., x(kmIk−1)∧¬y(knJ)k)</p>
      <p>W xi ∧ ¬yi ⊢ false
⊢
∀i, j Hi,j(false) = false
(IndMuEmpty)
Theorem 3. Kµ := K ∪ {IndMuEmpty} is sound.</p>
      <p>
        There are a number of details hidden in the discussion above: Boolean operations
must be lifted to µ -conditions, which entails variable renaming and union of the
systems of equations; rules for exploiting logical equivalences between different
Boolean combinations are necessary to equivalently transform conditions into a
form suitable for the application of the rules of K; in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], each Boolean
combination appearing inside a nested condition is put into conjunctive normal form
prior to the application of rules. Proof trees in the sequent-style calculus Kµ start
with instances of the axiom (A ⊢ A is derivable by a rule with no antecedents),
and make use of all the classical sequent rules [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] not involving quantifiers.
Our handling of nested contexts relies on substitutions: a context is a pair of a
left hand side of a sequent, and a graph condition with a special variable. The
rule for manipulating the context is usable both ways:
⊢ Ctx(x)
Ctx ⊢ x
(Ctx)
5
      </p>
    </sec>
    <sec id="sec-4">
      <title>Related Work</title>
      <p>
        Recently, Poskitt and Plump [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] have presented a weakest precondition calculus
for a different extension of nested conditions (monadic second-order conditions)
and demonstrated how to use it in a Hoare logic. The method is arguably closer
to reasoning directly in a logic and less graph condition like, but seems successful
at solving some of the same problems in a different way. HR∗ conditions [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] are
another approach towards the same goal; they have already been mentioned in
the main text and recently there has been an effort at extending the weakest
precondition calculus to a subclass including path expressions. Verification of
graph transformation system has also been performed within general-purpose
theorem proving environments by Strecker et al. [
        <xref ref-type="bibr" rid="ref13 ref19">19, 13</xref>
        ], with positive path
conditions. Verification of graph transformation systems via model checking of
abstractions, as opposed to the prover-based approach pursued here, can be
found in Gadducci et al., Baldan et al., König et al., Rensink et al. [
        <xref ref-type="bibr" rid="ref1 ref10 ref18 ref4">4, 1, 10, 18</xref>
        ].
A summary overview of graph conditions for non-local properties is attempted
below (a proof calculus is presented in [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] but completeness of a proof calculus
has only recently been obtained by Lambers and Orejas [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] for nested conditions
and remains to be researched for the other approaches). Note that while HR∗
conditions are known to properly contain the monadic second-order definable
properties [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] and nested conditions are a special case of each of the other
three, we have not yet been able to separate µ -conditions from MSO or HR∗:
reference
conditions
wlp
complete proof calculus
theorem prover
      </p>
      <p>
        [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] (here) [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]
Nested µ - HR∗
yes yes incomplete6
yes future work
yes future work
      </p>
      <p>
        [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]
MSOyes
6 Radke, personal communication.
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusion and Outlook</title>
      <p>We have introduced µ -conditions and achieved several results, mainly a weakest
liberal precondition transformation (Theorem 2), soundness of a proof calculus
(Theorem 3), and discussed correctness relative to µ -conditions, which appears
to be a fruitful ground for further investigations.</p>
      <p>
        In analogy to the equivalence between first-order predicate graph logic and nested
graph conditions, we are investigating whether µ -conditions have the same
expressivity as fixed point extensions to classical first-order logic for finite graphs.
Also, the expressivity of HR∗ conditions [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] or even MSO likely surpasses that
of µ -conditions, but the precise relationship remains to be examined. As the
examples show, the weakest precondition calculus (which is still a research
question for HR∗ conditions [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] but readily available by logical means in the
MSOconditions formalism [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]) produces quite unwieldy expressions due to partial
shift. The blowup is exponential in the size of the interface graphs used in the
rule, and seems unavoidable because of the need to use a fixed set of type graphs
for the finitely many variables (and a blowup is also inherited from the
weakest precondition calculus of [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]). Rule IndMuEmpty also contributes because
it involves a Cartesian product between variable sets. We have devised
heuristics to simplify the expressions, but even if many of the cases can be resolved
automatically, this issue still raises concerns as to the practical applicability.
Future work will also include tool support with special attention to
semi-automated reasoning, based on the reasoning engine Enforce implemented in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
To extend the weakest liberal precondition construction to programs with
iteration, one would have to provide, or have the prover attempt to determine,
an invariant, as in the original work of Pennemann; to obtain termination, one
could proceed as in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and prove a termination variant. We plan a further
generalisation to correctness under adverse conditions, i.e. systems subject to
environmental interference, also modelled as a graph program. Furthermore, it
appears that µ-conditions might readily generalise to temporal properties, even
with the option to nest temporal operators inside quantifiers, which would
allow properties such as the preservation of a specific node to be expressed (but
require further proof rules). This could be achieved by introducing a temporal
next operator parameterised on atomic subprograms (the basic steps of Def. 4)
and since in the semantics of these program steps the relationship between the
interfaces is deterministic, this would again confer an unambiguous type to such
an expression and make it suitable for use as a subcondition. Whether this offers
any new insights remains to be seen. Eventually, we would also like to deal with
algebraic operations on attributes and extend our work to a practical verification
method that separates the graph specific concerns from other aspects and allows
proofs of properties that depend on both, for example involving data structures
whose elements should remain ordered. Finally, the limitations imposed by
undecidability prompt the search for of restricted decidable classes.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgements</title>
      <p>We thank Annegret Habel, many other members of SCARE and the anonymous
reviewers for constructive criticism of the approach and the paper.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Baldan</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>König</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>König</surname>
            ,
            <given-names>B.:</given-names>
          </string-name>
          <article-title>A logic for analyzing abstractions of graph transformation systems</article-title>
          .
          <source>In: Static Analysis</source>
          , pp.
          <fpage>255</fpage>
          -
          <lpage>272</lpage>
          . Springer (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Dijkstra</surname>
            ,
            <given-names>E.W.:</given-names>
          </string-name>
          <article-title>A discipline of programming</article-title>
          .
          <source>Prentice Hall</source>
          (
          <year>1976</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Ehrig</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ehrig</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Prange</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taentzer</surname>
          </string-name>
          , G.:
          <article-title>Fundamentals of Algebraic Graph Transformation</article-title>
          .
          <source>Monographs in Theoretical Computer Science</source>
          , Springer (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Gadducci</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Heckel</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koch</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>A fully abstract model for graph-interpreted temporal logic</article-title>
          .
          <source>In: TAGT'98. LNCS</source>
          , vol.
          <volume>1764</volume>
          , pp.
          <fpage>310</fpage>
          -
          <lpage>322</lpage>
          (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Gentzen</surname>
          </string-name>
          , G.:
          <article-title>Untersuchungen über das logische</article-title>
          <source>Schließen. I. Mathematische Zeitschrift</source>
          <volume>39</volume>
          (
          <issue>1</issue>
          ),
          <fpage>176</fpage>
          -
          <lpage>210</lpage>
          (
          <year>1935</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Habel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pennemann</surname>
            ,
            <given-names>K.H.</given-names>
          </string-name>
          :
          <article-title>Correctness of high-level transformation systems relative to nested conditions</article-title>
          .
          <source>Math. Struct. in Comp. Sci</source>
          .
          <volume>19</volume>
          (
          <issue>2</issue>
          ),
          <fpage>245</fpage>
          -
          <lpage>296</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Habel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pennemann</surname>
            ,
            <given-names>K.H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rensink</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Weakest preconditions for high-level programs</article-title>
          .
          <source>In: ICGT 2006. LNCS</source>
          , vol.
          <volume>4178</volume>
          , pp.
          <fpage>445</fpage>
          -
          <lpage>460</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Hoare</surname>
            ,
            <given-names>C.A.R.:</given-names>
          </string-name>
          <article-title>An axiomatic basis for computer programming</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>26</volume>
          (
          <issue>1</issue>
          ),
          <fpage>53</fpage>
          -
          <lpage>56</lpage>
          (
          <year>1983</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Kreutzer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          : Pure and
          <string-name>
            <given-names>Applied</given-names>
            <surname>Fixed-Point Logics</surname>
          </string-name>
          .
          <source>Ph.D. thesis, Dissertation thesis</source>
          , RWTH Aachen (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>König</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kozioura</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Counterexample-guided abstraction refinement for the analysis of graph transformation systems</article-title>
          .
          <source>LNCS</source>
          , vol.
          <volume>3920</volume>
          , pp.
          <fpage>197</fpage>
          -
          <lpage>211</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Lambers</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Orejas</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Tableau-based reasoning for graph properties</article-title>
          .
          <source>In: Graph Transformation, LNCS</source>
          , vol.
          <volume>8571</volume>
          , pp.
          <fpage>17</fpage>
          -
          <lpage>32</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Pennemann</surname>
            ,
            <given-names>K.H.</given-names>
          </string-name>
          :
          <article-title>Development of Correct Graph Transformation Systems</article-title>
          .
          <source>Ph.D. thesis</source>
          , Universität
          <string-name>
            <surname>Oldenburg</surname>
          </string-name>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Percebois</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strecker</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tran</surname>
            ,
            <given-names>H.N.</given-names>
          </string-name>
          :
          <article-title>Rule-level verification of graph transformations for invariants based on edges' transitive closure</article-title>
          .
          <source>In: SEFM 2013. LNCS</source>
          , vol.
          <volume>8137</volume>
          , pp.
          <fpage>106</fpage>
          -
          <lpage>121</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Poskitt</surname>
            ,
            <given-names>C.M.:</given-names>
          </string-name>
          <article-title>Verification of Graph Programs</article-title>
          .
          <source>Ph.D. thesis</source>
          , University of York (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Poskitt</surname>
            ,
            <given-names>C.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Plump</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Verifying total correctness of graph programs</article-title>
          .
          <source>Electronic Communications of the EASST</source>
          <volume>61</volume>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Poskitt</surname>
            ,
            <given-names>C.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Plump</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Verifying monadic second-order properties of graph programs</article-title>
          .
          <source>In: Graph Transformation, LNCS</source>
          , vol.
          <volume>8571</volume>
          , pp.
          <fpage>33</fpage>
          -
          <lpage>48</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Radke</surname>
          </string-name>
          , H.:
          <article-title>HR* graph conditions between counting monadic second-order and second-order graph formulas</article-title>
          .
          <source>Electronic Communications of the EASST</source>
          <volume>61</volume>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Rensink</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Distefano</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Abstract graph transformation</article-title>
          .
          <source>ENTCS</source>
          <volume>157</volume>
          (
          <issue>1</issue>
          ),
          <fpage>39</fpage>
          -
          <lpage>59</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Strecker</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Modeling and verifying graph transformations in proof assistants</article-title>
          .
          <source>ENTCS</source>
          <volume>203</volume>
          (
          <issue>1</issue>
          ),
          <fpage>135</fpage>
          -
          <lpage>148</lpage>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Tarski</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>A lattice-theoretical fixpoint theorem and its applications</article-title>
          .
          <source>Pacific J. Math. 5</source>
          (
          <issue>2</issue>
          ),
          <fpage>285</fpage>
          -
          <lpage>309</lpage>
          (
          <year>1955</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>