<!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>Second Order Quantifier Elimination: Towards Verification Applications</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Universita` degli Studi di Milano</institution>
          ,
          <addr-line>Milano</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <fpage>0000</fpage>
      <lpage>0001</lpage>
      <abstract>
        <p>We develop quantifier elimination procedures for a fragment of higher order logic arising from the formalization of distributed systems (especially of fault-tolerant ones). Such procedures can be used in symbolic manipulations like the computation of Pre/Post images and of projections. We show in particular that our procedures are quite effective in producing counter abstractions that can be model-checked using standard SMT technology.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Building accurate declarative models of distributed systems requires some
complex logic, because integer and boolean variables are not sufficient: since
such systems are parameterized (i.e. they are composed by a finite but unspecified
number of processes), one needs to use arrays [
        <xref ref-type="bibr" rid="ref1 ref17">1, 17</xref>
        ] and, in the fault-tolerant
case, also cardinality constraints for arrays [
        <xref ref-type="bibr" rid="ref12 ref3 ref4 ref6">3, 4, 6, 12</xref>
        ]. Since arrays are modeled
by function symbols, when symbolic manipulations require to eliminate them,
some form of higher-order quantifier elimination or of higher order abstraction is
needed. Although in many situations existentially quantified array variables can
be eliminated via explicit definitions (see the implementations in [
        <xref ref-type="bibr" rid="ref18 ref9">9, 18</xref>
        ]), this is
no longer the case for concurrent and reactive systems exhibiting a large degree
of non determinism.
      </p>
      <p>
        Quantifier elimination is a rare phenomenon in second order logic, but not
completely unexpected, witness the large literature on correspondence theory in
modal logic. For our intended applications, some quantifier elimination results
were already mentioned in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] (Section 7.1, Thm 4) and a preliminary
implementation is already available [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. In this paper, we extend the results from our
previous paper [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] by obtaining quantifier elimination for formulae containing
matrices (i.e. binary arrays) and, more important, by covering formulae having
an extra universal quantifier (Theorems 2 and 3 below). Such expansions allow
us to produce arithmetic projections of more systems and to analyze
benchmarks already covered in [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] in a more fine-grained way, so as to better match
the pseudo-code specifications of the original papers from the distributed
algorithms literature.
      </p>
      <p>Copyright c 2017 by the paper's authors</p>
      <p>
        The paper is organized as follows: in Section 2 we introduce preliminary
notation for higher order logic, in Section 3 we describe our quantifier
elimination results and in Section 4 we show how to apply the results to verification
problems. This paper is focused on algorithmic procedures; the reader can find
the detailed analysis of a benchmark in an Appendix of the extended (online
available) version [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] (more examples, analyzed with the same methods but
requiring much weaker quantifier elimination results,1 can be found in [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], where
also some experiments are reported).
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Higher Order Logic and Flat Constraints</title>
      <p>
        In order to have enough expressive power, we use higher order logic, more
specifically Church’s type theory (see e.g. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] for an introduction to the subject).2 It
should be noticed, however, that our primary aim is to supply a framework for
model-checking and not to build a deductive system. Thus we shall introduce
below only suitable languages (via higher order signatures) and a semantics for
such languages - such semantics can be specified e.g. inside any classical
foundational system for set theory. In addition, as typical for model-checking, we want
to constrain our semantics so that certain sorts have a fixed meaning: the
primitive sort Z has to be interpreted as the (standard) set of integers, the sort Ω has
to be interpreted as the set of truth values {tt, ff}; moreover, some primitive
sorted operations like +, 0, S (addition, zero, successor for natural numbers) and
∧, ∨, →, ¬ (Boolean operations for truth values) must have their natural
interpretation. Some sorts might be enumerated, i.e. they must be interpreted as a
specific finite ‘set of values’ {a0, . . . , ak}, where the ai’s are mentioned among the
constants of the language and are assumed to be distinct. Finally, we may ask for
a primitive sort to be interpreted as a finite set (by abuse, we shall call such sorts
finite): for instance, we shall constrain in this way the sort Proc modeling the
set of processes in a distributed system. In addition, if a sort is interpreted into
a finite set, we may constrain some numerical parameter (usually, the parameter
we choose for this is named N) to indicate the cardinality of such finite set. The
notion of constrained signature below incorporates all the above requirements in
a general framework.
      </p>
      <p>
        A constrained signature Σ consists of a set of (primitive) sorts and of a set of
(primitive) sorted function symbols,3 together with a class CΣ of Σ-structures,
called the models of Σ.4 Using primitive sorts, types can be built up using
ex1Quantifier elimination required in the benchmarls analyzed in [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] is in fact
essentially confined to the BAPA-fragment known since [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
      </p>
      <p>
        2 Some notation we use might look slightly non-standard; it is similar to the notation
of [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ].
      </p>
      <p>3These include 0-ary function symbols, called constants; constants of sort Z will be
called (arithmetic) parameters.</p>
      <p>4 In the standard model-checking literature, CΣ is a singleton; here we must allow
many structures in CΣ, because our model-checking problems are parametric: the sort
modeling the set of processes of our system specifications must be interpreted onto
ponentiation (= functions type); terms can be built up using variables, function
symbols, as well as λ-abstraction and functional application.</p>
      <p>
        Our constrained signatures always include the sort Ω of truth-values; terms
of type Ω are called formulae (we use greek letters α, β, . . . , φ, ψ, . . . for them).
For a type S, the type S → Ω is indicated as ℘(S) and called the power set of S;
if S is constrained to be interpreted as a finite set, Σ might contain a cardinality
operator ] : ℘(S) −→ Z, whose interpretation is assumed to be the intended
one (]s is the number of the elements of s - as such it is always a nonnegative
number). If φ is a formula and S a type, we use {xS | φ} or just {x | φ} for
λxS φ. We assume to have binary equality predicates for each type; universal
and existential quantifiers for formulae can be introduced by standard
abbreviations (see e.g. [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]). We shall use the roman letters x, y, . . . , i, j, . . . , v, w, . . . for
variables (of course, each variable is suitably typed, but types are left implicit
if confusion does not arise). Bold letters like v (or underlined letters like x) are
used for tuples of free variables; below, we indicate with t(v) the fact that the
term t has free variables included in the list v (whenever this happens, we say
that t is a v-term, or a v-formula if it has type Ω). The result of a simultaneous
substitution of the tuple of variables v by the tuple of (type matching) terms u
in t is denoted by t(u/v) or directly as t(u).
      </p>
      <p>Given a tuple of variables v, a Σ-interpretation of v in a model M ∈ CΣ is a
function I mapping each variable onto an element of the correponding type (as
interpreted in M). The evaluation of a term t(v) according to I is recursively
defined in the standard way and is written as tM,I . A Σ-formula φ(v) is true
under M, I iff it evaluates to tt (in this case, we may also say that vM,I satisfies
φ); φ is valid iff it is true for all models M ∈ CΣ and all interpretations I of v
over M. We write |=Σ φ (or just |= φ) to mean that φ is valid and φ |=Σ ψ (or
just φ |= ψ) to mean that φ → ψ is valid; we say that φ and ψ are Σ-equivalent
(or just equivalent) iff φ ↔ ψ is valid.
2.1</p>
      <p>
        Flat Cardinality Constraints
Let us fix a constrained signature Σ for the remaining part of the paper. Such Σ
should be adequate for modeling parameterized systems, hence we assume that
Σ consists of:
(i) the integer sort Z, together with some parameters (i.e. free individual
constants) as well as all operations and predicates of linear arithmetic (namely,
0, 1, +, −, =, &lt;, ≡n);
(ii) the enumerated truth value sort Ω, with the constants tt, ff and the Boolean
operations on them;
a finite set whose cardinality is not a priori fixed. Our definition of a ‘constrained
signature’ is analogous to the definition of a ‘theory’ in SMT literature; in fact, in
SMT literature, a ‘theory’ is just a pair given by a signature and a class of structures.
When transferred to a higher order context, such definition coincides with that of a
‘constrained signature’ above (thus our formal preliminary definitions are very similar
to e.g. that of [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ]).
(iii) a finite sort Proc, whose cardinality is constrained to be equal to the
arithmetic parameter N (in the applications, this sort is used to represent the
processes acting in our distributed systems);
(iv) a further sort Data, with appropriate operations, modeling local data; we
assume that (a) first-order quantifier elimination holds for Data, meaning
that all first-order formulae built up from Data-atoms (i.e. from variables
of type Data using operations and predicates relative to the sort Data) are
equivalent to quantifier-free ones; (b) ground (i.e. variable-free) Data-atoms
are equivalent to ⊥ or to &gt;.
      </p>
      <p>In principle, we could consider having finitely many signatures for data instead
of just one, but this generalization is only apparent because one can use product
sorts and recover component sorts via suitable pairing and projection operations.</p>
      <p>If Data is an enumerated sort, we call Σ finitary ; the subsignature Σ0 of Σ
obtained by restricting to sorts and operations in (i)-(ii) is called the arithmetic
subsignature of Σ.</p>
      <p>
        In the syntactic definitions below, we freely take inspiration from [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], however
the present framework is greatly simplified because we do not view Proc as a
subsort of Z, like in [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]; in addition, notice that Σ does not contain operations or
relation symbols specific to the sort Proc (apart from equality) - this restriction
reduces terms of sort Proc to just variables.
      </p>
      <p>Below, besides integer variables (namely variables of sort Z), data variables
(namely variables of sort Data) and index variables (namely variables of sort
Proc), we use two other kinds of variables, that we call array-ids and matrix-ids.
An array-id is a variable of type Proc → Data or of type Proc → Z and a
matrixid is a variable of type Proc → (Proc → Data) or of type Proc → (Proc → Z).
Array-ids and matrix-ids of codomain sort Z are called arithmetical array-ids
or matrix-ids; if Data is enumerated, array-ids and matrix-ids of codomain sort
Data are called finitary. If M is a matrix-id and i, y are index variables, we may
write Mi(y) or M (i, y) instead of M (i)(y).</p>
      <p>Let us now introduce some useful classes of formulae.
- Open formulae: these are built up from atomic formulae containing arithmetic
parameters and the above mentioned variables, using Boolean connectives
only (no binders, i.e. no λ-abstractors and no quantifiers).
- 1-Flat formulae: these are formulae of the kind φ(] {x | ψ1} / z1, . . . , ] {x |
ψn} / zn), where φ(z1, . . . , zn), ψ1, . . . , ψn are open and x is a variable of
type Proc.
- Given an index variable i, a formula φ is said to be i-uniform with respect to
a matrix-id M (resp. an array-id a) iff i is not used as a bounded variable in
φ and the only terms occurring in φ containing an occurrence of M (resp. of
a) are of the kind Mi(y) (resp. a(i)) for a variable y.</p>
      <p>
        Notice that, some quantified formulae can be rewritten as 1-flat formulae: for
instance ∀i (a(i) = c → b(i) = d) is the same as ]{i | a(i) = c → b(i) = d} = N,5
and similarly ∃i (a(i) = c) can be re-written as ]{i | a(i) = c} &gt; 0.
Remark 1. 1-Flat formulae of this paper are slightly different from the flat
formulae of [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ] (they roughly correspond to the flat formulae of degree 1 of [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]);
the definition here is not recursive and is simplified by the fact that we do not
have nonvariable terms of type Proc; on the other hand, we allow matrix-ids to
occur in our formulae, whereas the syntax of [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ] is restricted to array-ids.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Quantifier Elimination</title>
      <p>In this technical section we state and prove the quantifier elimination results
we need. Let us fix a constrained signature Σ like in Subsection 2.1. We first
investigate in a closer way our open formulae. Notice first that if an open formula
is pure (i.e. it does not contain array-ids or matrix-ids), then it is a Boolean
combination of arithmetic, index or data atoms, where:
- arithmetic atoms are built up from variables of sort Z, parameters (i.e free
constants of sort Z), by using =, &lt;, ≡n as predicates and +, −, 0, 1 as function
symbols;
- index atoms are of the kind i = j, where i, j are variables of sort Proc (we
do not consider further operations and predicates for this sort - apart from
equality - in this paper);
- data atoms are built up from variables of sort Data by applying some specific
set of predicates and operations (predicates include equality, all arguments
of such predicates and operations are of type Data).</p>
      <p>By assumption (see Subsection 2.1), quantifier elimination holds for first-order
Data-formulae, but this result extends very easily to all pure first-order formulae.
We state this formally as a Lemma:
Lemma 1. Any pure first-order formula is equivalent to an open pure first-order
formula.</p>
      <p>
        Proof. Using prenex formula transformations, it is sufficient to show how to
eliminate a quantifier ∃x α, where α is open and pure. Actually, using disjunctive
normal forms, we can assume that α is a conjunction of literals. Pushing the
existential quantifier inside, we can assume that such literals are all arithmetic,
all index or all data literals, depending on the sort of x. The case of arithmetic
literals is covered by Presburger quantifier elimination [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ], whereas the case of
data literals is covered by our assumption. It remains to consider the case of index
literals; excluding trivial cases where the existential quantifier is redundant or
eliminable by substitution, we are left with the case where α is x 6= y1 ∧ · · · ∧ x 6=
5Strictly speaking, this formula is 1-flat only after a bound variable renaming (we
need to rename i to x). We always feel free to apply such α-conversions in the paper.
The latter is equivalent to N &gt; n¯0, where n¯0 is 1 + · · · + 1 (n0-times).
a
      </p>
      <p>In case array-ids and matrix-ids do not occur, 1-flat formulae can also be
trivialized:6
Lemma 2. A 1-flat formula without array-ids and matrix-ids is equivalent to a
pure formula.</p>
      <p>Proof. Let us eliminate subterms t of the kind ]{x | α} (with pure α) inside a
pure formula φ. We can first remove from α arithmetic and data atoms, as well
as index atoms not containing x, by the following equivalence (let A be the atom
to be removed):</p>
      <p>φ ↔ ([A ∧ φ(&gt;/A)] ∨ [¬A ∧ φ(⊥/A)]) .</p>
      <p>By Venn regions decomposition, we can assume that α is a conjunction of literals.
In addition, if t is of the kind ]{x | x = i ∧ α}, we can remove it using the
equivalence:</p>
      <p>φ ↔ ([α(i/x) ∧ φ(1/t)] ∨ [¬α(i/x) ∧ φ(0/t)]) .</p>
      <p>Thus we are left only with the case in which t is ]{x | Vsn=1 x 6= is}; we can also
assume that φ entails Vs6=s0 is 6= is0 (otherwise we can force this by making φ a
disjunction of case distinctions). Then we can remove t using
φ ↔ (N ≥ n¯ ∧ φ(N − n¯/t)) ∨ (N &lt; n¯ ∧ φ(0/t)) .
a
(1)
yn. By introducing a disjunction of cases (and by distributing the existential
quantifier over such disjunction and removing redundant variables), we reduce
to a disjunction of formulae of the kind
Once all t are removed (one by one), the statement is proved.</p>
      <p>It is now convenient to introduce a notation for open (not necessarily pure)
formulae (from now on we shall reserve the letters α, β, . . . to first-order pure
formulae, to evidentiate them). Considering that there are no operation symbols
of sort Proc, the only new terms that might arise in open non pure formulae
(wrt pure formulae) are of the kind a(i) or Mi(j), where a is an array-id, M
is a matrix-id and i, j are variables of sort Proc. Thus we may write an open
formula φ as the formula obtained by replacing in a pure formula some arithmetic
variables with terms of the kind a(i) or Mi(j). If our open φ does not contain
matrix-ids, we can write it as</p>
      <p>
        α(z, k, a(k)/e, d) or simply as α(z, k, a(k), d)
6 If the sort Proc is identified with a definable finite subset of Z, the result still holds
but is much less trivial: to get it, one must apply results from Presburger arithmetic
with counting quantifiers [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ].
where α(z, k, e, d) is pure, z is a tuple of arithmetic variables, k is a tuple of index
variables, d is a tuple of data variables, a is a tuple of array-ids (the e might be
arithmetic or Data-variables depending on the types of the a); if a = a1, . . . , an
and k = k1, . . . , km, then a(k) is the tuple
      </p>
      <p>a1(k1), . . . , a1(km), . . . , an(k1), . . . , an(km)
so that the matching tuple of data variables e must be indexed as e11, . . . , enm.</p>
      <p>A 1-flat formula without matrix-ids is then written as
α(z, k, a(k), d, ]{x | β1(z, x, k, a(x), a(k), d)}, . . . , ]{x | βs(z, x, k, a(x), a(k), d)})
or (with some abuse of notation) shortly as
α(z, k, a(k), d, ]{x | β(z, x, k, a(x), a(k), d)})
(2)
where β is a tuple of formulae (we use the convention that ]{x | β} stands
for the tuple of terms ]{x | β1}, . . . , ]{x | βs}). Displaying 1-flat formulae with
matrix-ids requires an even more complex notation, that we won’t use though.
These notations are apparently cumbersome but have the merit of displaying
the essential information on how our formulae are built up from pure formulae.</p>
      <p>
        We now state a first quantifier elimination result (this is Theorem 4 from [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ],
we nevertheless report the proof in an appendix of the extended version [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] of
the present paper):
Theorem 1. Suppose that φ is a 1-flat formula containing the array ids a, a0
(and not containing matrix-ids); then the formula ∃a0 φ is equivalent to a formula
∃e ψ, where the e are arithmetic and data variables, ψ is 1-flat and contains only
the array-ids a.
      </p>
      <p>The following Corollary follows from Theorem 1 and Lemmas 2,1:
Corollary 1. Suppose that φ is a 1-flat formula containing the array ids a (and
not containing matrix-ids); then the formula ∃a φ is equivalent to an open pure
formula.</p>
      <p>
        Notice that the above result (as it happens with all our quantifier elimination
results) immediately implies that 1-flat formulae not containing matrix-ids are
decidable for satisfiability. If the sort Data is enumerated and all array-ids are
finitary, we can improve Corollary 1 above by including an extra quantified
variable (this is useful for benchmarks, see the Appendix of [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] for an example):
Theorem 2. Let the sort Data be enumerated and let the 1-flat formula φ
contain only the finitary array ids a (and no matrix-ids); then the formula
∃a ∀i ∃y φ
(3)
(where i is an index variable and the y are arithmetic and data variables) is
equivalent to an open pure formula.
      </p>
      <p>Proof. Let Data be enumerated as {a0, . . . , ak}; let z be the arithmetic variables
occurring freely in (3) and let k = k1, . . . , kn be the index variables occurring
freely in (3) (thus i is not among the k and the y are not among the z). We can
assume that the y are arithmetic variables because, since Data is enumerated,
existential data variables can be elimitated via disjunctions. For simplicity, we
assume that (3) contains only one array-id, let it be a.7</p>
      <p>Before working on the formula (3), it is better to make some preprocessing
steps. Our final outcome will be that of producing a disjunction of existentially
quantified pure formulae logically equivalent to (3): in fact, we introduce extra
existentially quantified variables to be eliminated in the very end using Lemma 1.
We need also to introduce extra information to complete (3): this extra
information is achieved by rewriting (3) as a disjunction (each disjunct formalizes a
suitable guess) and by operating on each disjunct separately.</p>
      <p>Concretely, we shall freely assume that ∀i ∃y φ in (3) is of the kind
Diff(k) ∧
^(a(ki) = ali ) ∧ ^(uj = ]{x | a(x) = aj }) ∧
i j
∧ ∀i ∃y φ0(z, y, i, k, a(i), ]{x | β(z, y, x, i, k, a(x), a(i))})
(4)
where
• the formula Diff(k) says that the k are pairwise distinct (i.e. it is Vi6=j ki 6=
kj ): this can be assumed without loss of generality, because one can guess a
partition (introducing a disjunction over all partitions) and make the
appropriate replacements so as to keep only one representative for each equivalence
class of variables;
• since Data is enumerated we can guess (via a disjunction) for each ki the ali
which is the value of a(ki) (then, all occurrences of the term in the remaining
part of the formula can be replaced by this ali );
• the uj are fresh arithmetic variables indicating the cardinality of the set of
indices whose a-value is aj (these uj are the extra existentially quantified
variables to be eliminated in the very end by Lemma 1);
• β are open formulae as displayed and φ0 is a 1-flat formula as displayed (notice
that the terms a(ki) do not occur anymore here, because we can assume that
they have been replaced by the corresponding ali ).</p>
      <p>We now operate further transformations on the subformula ∀i ∃y φ0: we want
to show that this formula is equivalent to a 1-flat formula (hence without the
quantifier ∀i), so that the claim of the Theorem follows from an application
of Corollary 1 and Lemma 1 - by these results in fact all quantified variables
in (3) can be eliminated in favor of a pure open formula in which only the k, z
occur. When manipulating ∀i ∃y φ0 below, we assume all the information we have
from (4), namely that the k are all distinct and that the values of the a(ki) are
known.</p>
      <p>7This is without loss of generality: since Data is enumerated and the a are finitary,
one may take a product of Data and replace the tuple a with a single array with values
in such a product.</p>
      <p>As a first step, we can distinguish the case in which i is equal to some of the
k from the case in which it is different from all of them; in the latter case, we
can also guess the value of a(i). This observation shows that ∀i φ0 is equal to the
conjunction of an open formula (expressing what happens if i is equal to any of
the k) with the conjunctions (varying aj in our enumerated data)
∀i. Diff(i, k) ∧ a(i) = aj → ∃y φ00(z, y, i, k, ]{x | β0(z, y, x, i, k, a(x))})
(5)
where the φ00, β0 are obtained from the φ0, β by replacing a(i) with aj. Again, it
will be sufficient to show that (5) is equivalent to an open formula.</p>
      <p>First observe that φ00 is obtained from a pure formula by replacing arithmetic
variables with the terms ]{x | β0(z, y, x, i, k, a(x))}; since equality is the only
predicate of sort Proc (and there are no function symbols of sort Proc), the
only atoms of sort Proc that might occur in a pure formula are of the kind
i = ks, ks = ks0 for some s 6= s0, but these can all be replaced by ⊥ because we
have Diff(i, k) in the antecedent of the implication of (5). As a consequence φ00
can be displayed as φ00(z, y, ]{x | β0(z, x, i, k, a(x))}).</p>
      <p>A similar observation applies also to the β0, however here we must take into
consideration also atoms of the kind x = i, x = ks. Thus, the β0 are built up
using Boolean conectives from atoms of the kind x = i, x = ks, from arithmetic
atoms A(z, y) and from Data-atoms that might contain the term a(x). We can
disregard arithmetic atoms, because for each such atom A(z, y) we may rewrite
φ00 as
[A(z, y)∧φ00(z, y, ]{x | β0(&gt;/A)})] ∨ [¬A(z, y)∧φ00(z, y, ]{x | β0(⊥/A)})] . (6)
Thus the β0 can be displayed as β0(x, i, k, a(x)).</p>
      <p>When x = i or x = ks (for some s) the β0 can be simplified to &gt; or ⊥
because we know the values of a(i), a(ks) (and as a consequence the numbers
]{x | x = i ∧ β0}, ]{x | x = ks ∧ β0} are 0/1-tuples). In conclusion we have
that, for some tuple of numbers m8 that can be computed, we have that (5) is
equivalent to
∀i. Diff(i, k) ∧ a(i) = aj → ∃y φ00(z, y, m¯ + ]{x | Diff(x, i, k) ∧ β00(a(x))}) (7)
where β00 is obtained from β0 by replacing the atoms x = i, x = ks with ⊥.
Fix now some βs00 from the tuple β00; for every enumerated data ak, each of the
formulae βs00(ak) simplify to either &gt; or ⊥ and, since we know that uk = ]{x |
a(x) = ak} from (4), we can deduce that ]{x | Diff(x, i, k) ∧ a(x) = ak ∧ βs00(ak)}
is equal to either 0 (in case βs00(ak) simplifies to ⊥) or to uk − nk, where nk is
the number of the k, i for which we know that a(k), a(i) is equal to ak. As a
consequence ]{x | Diff(x, i, k) ∧ β00(a(x))} is equal to Pk(uk − nk) (where the
sum extends to all k such that βs00(ak) simplifies to &gt;).</p>
      <p>8This tuple depends on j, i.e. on the aj used in the antecedent of (5) (we do not
indicate this dependency for simplicity).</p>
      <p>All this can be summarized by saying that we can rewrite (7) as
∀i. Diff(i, k) ∧ a(i) = aj → ∃y θj (y, z, u)
where the formulae θj are pure (the tuple u is the tuple of the uj from (4)). By
Presburger quantifier elimination, we can drop the ∃y, thus getting
∀i. Diff(i, k) ∧ a(i) = aj → θj0 (z, u)
Since now θj0 does not contain occurrences of i, we can rewrite this as
(8)
(9)
(10)
(11)
(12)
(13)
and finally as</p>
      <p>∃i (Diff(i, k) ∧ a(i) = aj) → θj0 (z, u)
]{x | Diff(x, k) ∧ a(x) = aj} &gt; 0 → θj0 (z, u)
This is a 1-flat formula. To sum up, our original formula (3) is equivalent to a
formula of the kind ∃a ∃u ϑ, where ϑ is 1-flat. Then (after swapping the
quantifiers ∃a ∃u) we can first use Theorem 1 to remove ∃a and then Lemma 1 to
produce an equivalent pure open formula (involving just the arithmetic variables
z and the index variables k).
a</p>
      <p>
        In case we have uniformity, we can further extend the above result to cover
formulae in which arithmetic array-ids and matrix-ids occur (see again the
Appendix of [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] for an example of the use of this result):
Theorem 3. Let the sort Data be enumerated and let i be an index variable;
suppose that all matrix-ids M occurring in the 1-flat formula φ are i-uniform
and that all array-ids a occurring in φ are either finitary or i-uniform. Then the
formula
      </p>
      <p>∃a ∃M ∀i ∃y φ
(where the y are arithmetic and data variables) is equivalent to an open pure
formula.</p>
      <p>Proof. The first step is to remove ∃M for each M ∈ M, using uniformity. In fact,
by uniformity, M occurs in φ only inside terms of the kind Mi(y) (for some index
variable y); thus, using choice axiom (in the form of an anti-skolemization), we
can rewrite (12) as</p>
      <p>∃a ∀i ∃b ∃y φ(· · · b/Mi · · · )
and then we can swap the existential quantifiers ∃b∃y and apply Theorem 1, thus
obtaining a formula of the kind ∃a ∀i ∃y ∃e ψ where the e are further arithmetic
or data variables, ψ is 1-flat and contains only the array-id a. Let us now split
the a as a0, a00, where the a00 are i-uniform and the a0 are finitary. We can apply
the same anti-skolemization argument to the a00 and rewrite ∃a0 a00 ∀i ∃y ∃e ψ as
∃a0 ∀i ∃z ∃y ∃e ψ(z/a00(i)), where the z are fresh arithmetic variables replacing
the terms a00(i) in ψ. Now Theorem 2 can be used to eliminate the a0.</p>
    </sec>
    <sec id="sec-4">
      <title>System Specifications and Arithmetic Projections</title>
      <p>
        We now go to verification applications. We summarize the essential machinery
for making quantifier elimination to apply (for more information, see [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]).
(14)
(15)
Definition 1. A system specification S is a tuple
      </p>
      <p>S = (Σ, v, Φ, ι, τ )
where (i) Σ is a constrained signature, (ii) v is a tuple of variables, (iii) Φ, ι are
v-formulae, (iv) τ is a (v, v0)-formula (here the v0 are renamed copies of the v)
such that
ι(v) |=Σ Φ(v),</p>
      <p>Φ(v) ∧ τ (v, v0) |=Σ Φ(v0) .</p>
      <p>In the above definition, the v are meant to be the variables specifying the
system status, ι is meant to describe initial states and τ is meant to describe
the transition relation. The v-formula Φ, as it is evident from (15), describes an
invariant of the system (known to the user). Invariants are quite useful - and
often essential - in concrete verification tasks, that’s why we included them in
Definition 1.</p>
      <p>A safety problem for a system specification S like above is a v-formula υ(v);
the system is safe with respect to υ iff there is no n ≥ 0 such that the formula
ι(v0) ∧ τ (v0, v1) ∧ · · · ∧ τ (vn−1, vn) ∧ υ(vn)
is satisfiable.</p>
      <p>Directly attacking safety problems for a system like (14) might be a too
difficult task, that’s why it is useful to replace it with a simpler system: in our
applications, we shall try to replace S by some S0 whose variables are all integer
variables. To this aim, we ‘project’ S onto a subsystem S0, i.e. onto a system
comprising only some of the variables of S. In order to give a precise definition of
what we have in mind, we must first consider subsignatures: here a subsignature
Σ0 of Σ is a signature obtained from Σ by dropping some symbols of Σ and
taking as Σ0-models the class CΣ0 of the restrictions M|Σ0 to the Σ0-symbols
of the structures M ∈ CΣ . The following proposition is immediate:
Proposition 1. Let S0 = (Σ0, v0, Φ0, ι0, τ0) and S = (Σ, v, Φ, ι, τ ) be system
specifications, with respective safety problems υ(v0) and υ(v). Suppose that Σ0
is a subsignature of Σ and let v = v0, v1; suppose also that the following hold:
(i) |=Σ Φ0(v0) ↔ ∃v1Φ(v0, v1);
(ii) |=Σ ι0(v0) ↔ ∃v1ι(v0, v1);
(iii) |=Σ τ0(v0, v00) ↔ ∃v1 ∃v10(Φ(v0, v1) ∧ τ (v0, v1, v00, v10));
(iv) |=Σ υ0(v0) ↔ ∃v1υ(v0, v1).</p>
      <p>
        Then if S0 is safe with respect to υ0, so it is S with respect to υ.9
9Notice that only the right-to-left implications of (i)-(iv) are needed for the
proposition to hold; however, if we have also the left-to-right implications, the system
specification S0 is better, in a sense that can be specified formally [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] (intuitively, the
system specification S0 would be the best approximation of S that we can make using
only the variables v0).
      </p>
      <p>The system specification S0 satisfying the above condition (i)-(iii) with
respect to S is called the (Σ0, v0)-projection of S; if Σ0 is the arithmetical
subsignature of Σ and v0 are all the arithmetic variables of S, S0 is called the
arithmetic projection of S.</p>
      <p>Theorem 4. If Φ, ι, τ do not contain matrix-ids and are of the kind ∃k1 · · · ∃knφ
for a 1-flat formula φ and for index variables k1, . . . , kn, then S = (Σ, v, Φ, ι, τ )
has an (effectively computable) arithmetic projection.</p>
      <p>Proof. Let v be z, a, where the z are arithmetic variables and the a are array
variables; we also abbreviate k1, . . . , kn as k. We need to show that a formula of
the kind
∃a ∃k α(z, k, a(k), ]{x | β(z, x, k, a(x), a(k))})
(16)
is equivalent to a pure arithmetic formula.10 But this is indeed the case: just
swap the existential quantifiers and apply Corollary 1 and Lemma 1. The result
follows because there are no ground index atoms and all ground data atoms are
equivalent to &gt; or to ⊥, according to our assumptions from Subsection 2.1.</p>
      <p>Next result concerns specifications using matrix-ids in a finitary signature.
Theorem 5. Let the sort Data be enumerated and let Φ, ι, τ be disjunctions of
formulae of the kind
∃k ∀i ∃y φ
(17)
where φ is 1-flat, k are index variables, y are arithmetic and data variables and
i is an index variable such that all matrix variables and all non-finitary array
variables from v are i-uniform in φ; then S = (Σ, v, Φ, ι, τ ) has an (effectively
computable) arithmetic projection.</p>
      <p>Proof. Similar to the proof of Theorem 4, using Theorem 3 instead of Corollary 1.</p>
      <p>
        To sum up, given a system specification S = (Σ, v, Φ, ι, τ ) and a safety
problem υ(v), if the formulae Φ, ι, τ, υ satisfy suitable syntactic restrictions so
that our quantifier elimination results apply, we can compute the arithmetic
projection S0 of S and try to show that S0 is safe with respect to υ0(v0) (the
latter is the formula obtained in its turn by eliminating the higher order variables
from υ(v)).11 Thus a model ckecking problem formulated in higher order logic
can be solved via a model checking problem for counter systems (i.e. for system
specifications in a purely arithmetic signature). The literature on distributed
systems confirms that this is a viable approach: since long time it has been
observed that counter systems [
        <xref ref-type="bibr" rid="ref10 ref11 ref13">10,11,13</xref>
        ] can be sufficient to specify problems like
cache coherence or broadcast protocols. Recently, counter abstractions have been
10 In view of condition (iii) of Proposition 1, we need also the observation that
formulae like (16) are closed under conjunctions.
      </p>
      <p>
        11A more sophisticated strategy would preprocess the system specification S by
artificially adding to it some extra integer variables counting certain definable sets (see
the Appendix of [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] for an example on how this works).
effectively used also in the verification of fault-tolerant distributed algorithms [
        <xref ref-type="bibr" rid="ref2 ref22 ref23 ref24">2,
22–24</xref>
        ].
      </p>
      <p>
        It should be noticed that safety problems for counter systems are themselves
undecidable, however the sophisticated machinery (predicate abstraction [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ],
IC3 [
        <xref ref-type="bibr" rid="ref20 ref8">8, 20</xref>
        ], etc.) developed inside the SMT community lead to impressively
performing tools like μZ [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], nuXmv [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], SeaHorn [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], . . . which are nowadays
being successfully used to solve many verification problems regarding counter
systems.
      </p>
      <p>
        Arithmetic projections obtained by our methods are far from trivial: the
reader may realize this by looking at the detailed analysis of a classical
benchmark in the Appendix of [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] (more examples are described in [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]). In all such
cases, the resulting safety model-checking problems for the arithmetic
projections are solved instantaneously by μZ (the SMT-HORN module of z3).
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusions</title>
      <p>
        We have investigated quantifier elimination results for fragments of higher
order logic suggested by verification applications in the distributed algorithms
area. We have shown how to apply such results in order to automatically produce
arithmetic projections that can be effectively handled by state-of-the-art
SMTbased model checkers. Similar applications can be devised for forward/backward
model checking, along the lines sketched in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. We won’t discuss and compare
our approach here with the different approaches from the literature, the reader
is referred to the final section of [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] for some information in this sense. We only
point out that the main merit of the approach we propose is that of being purely
declarative: our starting point is the informal description of the algorithms (e.g.
in some pseudo-code) and our first step is a direct translation into a standard
logical formalism (typically, classical Church type theory), without relying for
instance on ad hoc automata devices or on ad hoc specification formalisms. We
believe that this choice can ensure flexibility and portability of our methods.
      </p>
      <p>A potentially weak point to be taken care is the complexity of the algorithms
we employ: in fact, the procedure for quantifier elimination used in the proof of
Theorems 1, 2, 3 produces super-exponential blow-ups of the size of the formulae
it is applied to. Notice however that, when building a counters simulation of a
concrete algorithm, such a heavy procedure is applied to each instruction (or
to each block of instructions) separately, i.e. not to the whole code. Moreover,
it is not difficult to realize (going through the details for our benchmarks) that
it is hardly the case that the quantifier elimination procedure is applied in its
full generality: in fact, it is always applied to easier fragments, where complexity
reduces (recall for instance the content of footnote 1). The same observation
applies also to the instances of the Presburger quantifier elimination procedure
that are invoked in our manipulations: usually, they are confined to difference
logic formulae or to formulae where quantifiers can be eliminated by simple
instantiations. The identification of such shortcuts and the study of the related
complexities is important for future work and preliminary to any substantial
implementation effort.</p>
      <p>
        Another delicate point is related to the syntactic limitations we require on
the formulae describing system specifications (see the statements of Theorems 4
and 5): such syntactic limitations are needed to ensure higher order quantifier
elimination. Although it seems that a significant amount of benchmarks are
captured despite such limitations, it is essential to develop techniques
applicable in more general cases. To this aim, we observe that just overapproximations
are needed to build simulations and that, even if the best simulation may not
exist, still practically useful simulations might be produced. In fact, quantifier
elimination is just an extreme solution to symbol elimination problems. Symbol
elimination and interpolation are a well-known technique to build invariants,
abstractions and overapproximations, and for this reason their investigation has
deserved considerable attention in the automated reasoning literature [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ];
extensions to higher-order fragments might be useful in our context too.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Alberti</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bruttomesso</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ranise</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sharygina</surname>
          </string-name>
          , N.:
          <article-title>Lazy Abstraction with Interpolants for Arrays</article-title>
          .
          <source>In: LPAR</source>
          . pp.
          <fpage>46</fpage>
          -
          <lpage>61</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Alberti</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Orsini</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pagani</surname>
          </string-name>
          , E.:
          <article-title>Counter Abstractions in Model Checking of Distributed Broadcast Algorithms: Some Case Studies</article-title>
          .
          <source>In: Proc. CILC</source>
          . pp.
          <fpage>102</fpage>
          -
          <lpage>117</lpage>
          . CEUR Proceedings (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Alberti</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pagani</surname>
          </string-name>
          , E.:
          <article-title>Counting Constraints in Flat Array Fragments</article-title>
          .
          <source>In: Proc. IJCAR. Lecture Notes in Computer Science</source>
          , vol.
          <volume>9706</volume>
          , pp.
          <fpage>65</fpage>
          -
          <lpage>81</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Alberti</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pagani</surname>
          </string-name>
          , E.:
          <article-title>Cardinality Constraints for Arrays (decidability results and applications)</article-title>
          .
          <source>Formal Methods in System Design</source>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Andrews</surname>
            ,
            <given-names>P.B.</given-names>
          </string-name>
          :
          <article-title>An introduction to mathematical logic and type theory: to truth through proof</article-title>
          ,
          <source>Applied Logic Series</source>
          , vol.
          <volume>27</volume>
          . Kluwer Academic Publishers, Dordrecht, second edn. (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Bjørner</surname>
          </string-name>
          , N.,
          <string-name>
            <surname>von Gleissenthall</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rybalchenko</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Cardinalities and Universal Quantifiers for Verifying Parameterized Systems</article-title>
          .
          <source>In: Proc. of the 37th ACM SIGPLAN conference on Programming Language Design and Implementation</source>
          (PLDI) (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Cavada</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cimatti</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dorigatti</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Griggio</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mariotti</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Micheli</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mover</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Roveri</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tonetta</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>The nuXmv Symbolic Model Checker</article-title>
          . In: CAV. pp.
          <fpage>334</fpage>
          -
          <lpage>342</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Cimatti</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Griggio</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Software model checking via IC3</article-title>
          . In: CAV. pp.
          <fpage>277</fpage>
          -
          <lpage>293</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Conchon</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Goel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Krstic</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mebsout</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , Za¨ıdi, F.:
          <article-title>Cubicle: A parallel smtbased model checker for parameterized systems - tool paper</article-title>
          .
          <source>In: CAV</source>
          . pp.
          <fpage>718</fpage>
          -
          <lpage>724</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Delzanno</surname>
          </string-name>
          , G.:
          <article-title>Constraint-Based Verification of Parameterized Cache Coherence Protocols</article-title>
          .
          <source>Formal Methods in System Design</source>
          <volume>23</volume>
          (
          <issue>3</issue>
          ),
          <fpage>257</fpage>
          -
          <lpage>301</lpage>
          (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Delzanno</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Esparza</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Podelski</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Constraint-Based Analysis of Broadcast Protocols</article-title>
          .
          <source>In: Proc. of CSL. LNCS</source>
          , vol.
          <volume>1683</volume>
          , pp.
          <fpage>50</fpage>
          -
          <lpage>66</lpage>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Dragoj</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Henzinger</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Veith</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Widder</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zufferey</surname>
            ,
            <given-names>D.:</given-names>
          </string-name>
          <article-title>A Logic-based Framework for Verifying Consensus Algorithms</article-title>
          .
          <source>In: Proc. of VMCAI</source>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Esparza</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Finkel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mayr</surname>
          </string-name>
          , R.:
          <article-title>On the Verification of Broadcast Protocols</article-title>
          .
          <source>In: Proc. of LICS</source>
          . pp.
          <fpage>352</fpage>
          -
          <lpage>359</lpage>
          . IEEE Computer Society (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Flanagan</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Qadeer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Predicate abstraction for software verification</article-title>
          .
          <source>In: POPL</source>
          . pp.
          <fpage>191</fpage>
          -
          <lpage>202</lpage>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pagani</surname>
          </string-name>
          , E.:
          <article-title>Counter Simulations via Higher Order Quantifier Elimination: a preliminary report</article-title>
          .
          <source>In: Proc. of PxTP</source>
          .
          <source>EPTCS</source>
          (
          <year>2017</year>
          ), (preliminary workshop version available from authors' webpages)
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pagani</surname>
          </string-name>
          , E.: Second Order Quantifier Elimination:
          <article-title>Towards Verification Applications</article-title>
          . (
          <year>2017</year>
          ),
          <article-title>(extended version available from authors' webpages)</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ranise</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Backward Reachability of Array-based Systems by SMT solving: Termination</article-title>
          and
          <string-name>
            <given-names>Invariant</given-names>
            <surname>Synthesis</surname>
          </string-name>
          .
          <source>Logical Methods in Computer Science</source>
          <volume>6</volume>
          (
          <issue>4</issue>
          ) (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Ghilardi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ranise</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <string-name>
            <surname>MCMT</surname>
            :
            <given-names>A Model</given-names>
          </string-name>
          <string-name>
            <surname>Checker</surname>
          </string-name>
          <article-title>Modulo Theories</article-title>
          . In: IJCAR. pp.
          <fpage>22</fpage>
          -
          <lpage>29</lpage>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Gurfinkel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kahsai</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Komuravelli</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Navas</surname>
            ,
            <given-names>J.A.</given-names>
          </string-name>
          :
          <article-title>The SeaHorn Verification Framework</article-title>
          . In: CAV. pp.
          <fpage>343</fpage>
          -
          <lpage>361</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Hoder</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bjørner</surname>
          </string-name>
          , N.:
          <article-title>Generalized Property Directed Reachability</article-title>
          . In: SAT. pp.
          <fpage>157</fpage>
          -
          <lpage>171</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Hoder</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bjørner</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>deMoura</surname>
          </string-name>
          , L.:
          <article-title>μZ- An Efficient Engine for Fixed Points with Constraints</article-title>
          .
          <source>In: CAV</source>
          . pp.
          <fpage>457</fpage>
          -
          <lpage>462</lpage>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>John</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Konnov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schmid</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Veith</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Widder</surname>
          </string-name>
          , J.:
          <article-title>Parameterized model checking of fault-tolerant distributed algorithms by abstraction</article-title>
          .
          <source>In: Proc. Int'l Conf. on Formal Methods in Computer-Aided Design (FMCAD)</source>
          . pp.
          <fpage>201</fpage>
          -
          <lpage>209</lpage>
          (
          <year>Aug 2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>John</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Konnov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schmid</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Veith</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Widder</surname>
          </string-name>
          , J.:
          <article-title>Towards Modeling and Model Checking Fault-Tolerant Distributed Algorithms</article-title>
          .
          <source>In: Proc. Int'l SPIN Symposium on Model Checking of Software. Lecture Notes in Computer Science</source>
          , vol.
          <volume>7976</volume>
          , pp.
          <fpage>209</fpage>
          -
          <lpage>226</lpage>
          . Springer (Jul
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Konnov</surname>
            ,
            <given-names>I.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Veith</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Widder</surname>
          </string-name>
          , J.:
          <article-title>What You Always Wanted to Know About Model Checking of Fault-Tolerant Distributed Algorithms</article-title>
          . In: Perspectives of System Informatics - 10th
          <source>International Andrei Ershov Informatics Conference, PSI</source>
          <year>2015</year>
          ,
          <article-title>in Memory of Helmut Veith, Kazan</article-title>
          and Innopolis, Russia,
          <source>August 24-27</source>
          ,
          <year>2015</year>
          , Revised Selected Papers. pp.
          <fpage>6</fpage>
          -
          <lpage>21</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25. Kova´cs,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Voronkov</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          :
          <article-title>Interpolation and Symbol Elimination</article-title>
          .
          <source>In: Automated Deduction - CADE-22, 22nd International Conference on Automated Deduction, Montreal, Canada, August 2-7</source>
          ,
          <year>2009</year>
          . Proceedings. pp.
          <fpage>199</fpage>
          -
          <lpage>213</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Kuncak</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nguyen</surname>
            ,
            <given-names>H.H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rinard</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Deciding Boolean Algebra with Presburger Arithmetic</article-title>
          .
          <source>Journal of Automated Reasoning</source>
          <volume>36</volume>
          (
          <issue>3</issue>
          ) (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Lambek</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Scott</surname>
          </string-name>
          , P.J.:
          <article-title>Introduction to higher order categorical logic</article-title>
          ,
          <source>Cambridge Studies in Advanced Mathematics</source>
          , vol.
          <volume>7</volume>
          . Cambridge University Press, Cambridge (
          <year>1988</year>
          ),
          <article-title>reprint of the 1986 original</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <surname>Presburger</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>U¨ber die Vollsta¨ndigkeit eines gewissen Systems der Arithmetik ganzer Zahlen, in welchem die Addition als einzige Operation hervortritt</article-title>
          . Warszawa (
          <year>1929</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29.
          <string-name>
            <surname>Reynolds</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Deters</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuncak</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tinelli</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Barrett</surname>
            ,
            <given-names>C.W.</given-names>
          </string-name>
          :
          <article-title>Counterexampleguided quantifier instantiation for synthesis in SMT</article-title>
          .
          <source>In: Proc. CAV</source>
          . pp.
          <fpage>198</fpage>
          -
          <lpage>216</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30.
          <string-name>
            <surname>Schweikardt</surname>
          </string-name>
          , N.:
          <string-name>
            <surname>Arithmetic</surname>
          </string-name>
          ,
          <string-name>
            <surname>First-Order Logic</surname>
          </string-name>
          , and Counting Quantifiers. ACM TOCL pp.
          <fpage>1</fpage>
          -
          <lpage>35</lpage>
          (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>