M.Sc. in Computer Science
(Laurea in Scienze dell’Informazione)
with Full Marks and Honors,
University of Pisa, Italy.

1992–1996:

Research activity as PhD student at the Computer Science
Department of the University of Pisa, Italy.
Doctorate degree officially awarded on September 8, 1997.

1997:

Research fellow at the School of Computer Studies of
the University of Leeds, United Kingdom.

1997–2001

Research and teaching activity as Assistant Professor
(Ricercatore)
at the Department of
Mathematics of the University of Parma,
from November 1st, 1997 to December 15th, 2001.

2001–2010:

From December 16th, 2001, to October 31st, 2010,
research and teaching activity
as Associate Professor at the Department of Mathematics
of the University of Parma, Italy.
Among other things, he contributed to the creation
of the Degree in Computer Science
(Informatica)
of the University of Parma.

2011:

Foundation of the university spin-off BUGSENG srl.

Presently:

Since November 1st, 2010, research and teaching activity
as Full Professor at the Department of Mathematics
and Computer Science
of the University of Parma, Italy.
Since the foundation, he is the President and CEO
of BUGSENG srl.

3 Teaching Activities

3.1 Courses Taught

All the activities listed in this section refer to courses of studies
of the University of Parma.

“Computer Aided Verification of Complex Systems: An Introduction”,
Ph.D. School (Dottorato di ricerca)
in “Matematica e Statistica per le Scienze Computazionali”
(Mathematics and Statistics for the Computational Sciences),
Department of Mathematics, University of Milan,
academic year 2006-2007.

3.2 Teaching Collaborations

Lectures (8 hours) on
The Compilation of Prolog and the Warren Abstract Machine
in the course on “Linguaggi speciali di programmazione”
(Special-Purpose Programming Languages) taught by Prof. Giorgio Levi,
degree in “Computer Science” of the Universityof Pisa,
academic years 1990-1991, 1991-1992, 1992-1993 and 1993-1994.

Exercise classes for the course on
“Linguaggi formali e compilatori” (Formal Languages and Compilers)
taught by Prof. Pierpaolo Degano,
degree in “Computer Science” of the Universityof Pisa,
academic year 1995-1996,

Theory and exercise classes for the course on
“Teoria ed applicazioni delle macchine calcolatrici”
(Theory and Application of Computing Machines)
taught by Prof. Gianfranco Rossi,
degree in “Environmental Sciences” of the University of Parma,
academic years 1997-1998, 1998-1999, 1999-2000 and 2000-2001.

Theory and exercise classes for the course on
“Fondamenti dell’informatica” (Foundations of Computer Science)
taught by Prof. Grazia Lotti,
degree in “Mathematics” of the University of Parma,
academic years 1998-1999 and 1999-2000.

Classes and support to student projects for the course on
“Metodologie di programmazione” (Programming Methodologies)
taught by Dr. Enea Zaffanella,
degree in “Conputer Science” of the University of Parma,
academic years 2003-2004 and 2004-2005.

Franchi, E.
A contribution to the issue of string cleanness: a design of
an automatic program transformation.
Laurea thesis in “Mathematics and Computer Science”,
University of Parma.
Advisor: R. Bagnara; co-advisor: E. Zaffanella;
Academic year 2006-2007.

3.4 Ph.D. Schools

Since 2000,
teacher of the Ph.D. School (Dottorato di ricerca)
in “Matematica e Statistica per le Scienze Computazionali”
(Mathematics and Statistics for the Computational Sciences),
Department of Mathematics, University of Milan.

3.6 Other Teaching Activities

Lectures on fundamentals of Computer Science for the specialization
course for high-school teachers of Mathematics organized by
the Faculty of Sciences of the University of Parma,
academic years 1997-1998 and 1998-1999.

A computer and computing primer for the teachers of the maternal and
primary schools of Suvereto, Italy, 1999.

Visiting researcher at the Department of Computer Science
of the Monash University, Melbourne, Australia,
for a joint research with the group of Prof. Kim Marriott,
January–February 1995.

Research fellow at the School of Computer Studies
of the University of Leeds, UK,
January–October 1997.

Starting from 1998, numerous visits (at least one week per year)
the School of Computing of the University of Leeds
for joint research periods with Dr Patricia M. Hill.

Withing the framework of exchanges between Italy and Spain,
spent one week at the
Facultad de Informática, Universidad Politécnica de Madrid
for joint research with the group of Prof. Manuel Hermenegildo,
January–February 2001.

In the framework of the bilateral project on
“Advanced Development Environments for Logic Programs”
(Azioni Integrate Italia-Spagna 2001, code IT229),
three one-week visits at the
Facultad de Informática, Universidad Politécnica de Madrid
for joint research
with the group of Prof. Manuel Hermenegildo,
November 2001, September 2002 and May 2003.

“Applications of Polyhedral Computations to the Analysis and Verification of Hardware and Software Systems”,
Polyhedral Computation Worskhop,
Centre de recherches mathématiques,
University of Montréal, Montréal (Québec),
Canada,
October 2006 (invited talk).

“The Parma Polyhedra Library: A Library of Numerical Abstractions for Analysis and Verification”,
Department of Informatics and Mathematical Modelling,
Technical University of Denmark (DTU),
Lyngby, Denmark,
June 2007.

“On the Design of Generic Static Analyzers for Modern Imperative Languages”,
Facultad de Informática, Universidad Politécnica de Madrid,
Madrid, Spain,
September 2007.

“Ranking Functions for Automatic Termination Analysis”,
Department of Computer Science, University of Bologna, Italy
December 2007.

“On the Design of Generic Static Analyzers for Imperative Languages”,
Department of Computer Science, University of Pisa, Italy,
March 2008.

“Computer Aided Verification of Complex Systems: An Introduction”,
Department of Mathematics, University of Milan, Italy,
March 2008.

“Numerical Abstract Domains and the Parma Polyhedra Library”,
Department of Computer Science, University of Verona, Italy,
January 2010.

“Syntactic and Semantic Analysis of Safety-Critical Software”,
Safety Critical Systems Club workshop on
Using the MISRA Guidelines to Support Safety-Related Systems Development,
Ambassadors Bloomsbury, London, UK,
November 2010.

4.6 Standardization

4.7 Organization of Schools, Conferences, Workshops and Seminars

Workshop Chair for the “Joint International Symposia SAS’98
and PLILP-ALP’98”,
Pisa, Italy, September 14–18, 1998.

Organizer, with Patricia M. Hill of the University of Leeds
of the “Second International Summer School on Computational Logic”,
Maratea, Italy, August 25–30, 2002
(http://www.cs.unipr.it/ISCL02/).

Organizer of a cycle of seminars on
“Convex Polyhedra for the Analysis and Verification
of Hardware and Software Systems”,
Dipartimento di Matematica, University of Parma,
November 2003 – February 2004
(http://bugseng.com/products/pplseminars_2003_2004).

Scientific Committee member and organizer (with Giancarlo Macchi) of the
First Workshop on Open Source, Free Software and Open Formats in
Archaeological Research Processes, Grosseto, Italy, May 8, 2006.

Scientific Committee member and organizer (with Giancarlo Macchi) of the
I-QMDAA Summer School on Quantitative Methods and Data Analysis
in Archaeology, Villa Lanzi, Campiglia Marittima, Italy, September 10–17,
2006.

PLILP/ALP’98, “Tenth International Symposium on Programming Languages,
Implementations, Logics and Programs”
and “Seventh International Conference on Algebraic and Logic Programming”,
Pisa, Italy,
September 1998.

Participant to the italian national project on
“Aggregate- and Number-Reasoning for Computing:
from Decision Algorithms to Constraint Programming with Multisets,
Sets, and Maps”
(2001–2003,
national coordinator: Prof. Domenico Cantone, University of Catania).

Coordinator of the Parma research unit for the italian national project on
“Constraint-Based Verification of Reactive Systems”
(2002–2004,
national coordinator: Prof. Maurizio Gabbrielli, University of Bologna).

Coordinator of the Parma research unit for the italian national project on
“AIDA — Abstract Interpretation: Design and Applications”
(2004–2006,
national coordinator: Prof. Roberto Giacobazzi, University of Verona).

Coordinator of the University of Parma research unit in the
ITEA (Information Technology for European Advancement)
GlobalGCC project (GGCC),
among whose objective was the one of extending the
GNU Compiler Collection
(GCC) with global static analysis techniques.

Coordinator of the Parma research unit for the italian national project on
“AIDA2007 — Abstract Interpretation: Design and Applications”
(2008–2010,
national coordinator: Prof. Francesco Ranzato, University of Padova).

4.11.2 Project Proposals

Participant, as national representative for Italy and coordinator
(with François Irigoin, École des Mines de Paris)
of the workpackage on Numerical Abstract Domains, to the proposal
IST (VI programma quadro) titled
“AINoE: Network of Excellence on Abstract Interpretation”
(004456).

Bagnara, R., Hill, P. M., and Zaffanella, E.
A new encoding and implementation of not necessarily closed convex
polyhedra.
In Proceedings of the 3rd Workshop on Automated Verification of
Critical Systems (Southampton, UK, 2003), M. Leuschel, S. Gruner, and
S. Lo Presti, Eds., pp. 161–176.
Published as TR Number DSSE-TR-2003-2, University of Southampton.

Hill, P. M., Zaffanella, E., and Bagnara, R.
A correct, precise and efficient integration of set-sharing, freeness
and linearity for the analysis of finite and rational tree languages.
Quaderno 273, Dipartimento di Matematica, Università di Parma,
Italy, 2001.
Available at http://www.cs.unipr.it/Publications/. Also
published as technical report No. 2001.22, School of Computing, University of
Leeds, U.K.

Hill, P. M., Zaffanella, E., and Bagnara, R.
On the analysis of set-sharing, freeness and linearity for finite and
rational tree languages.
Tech. Rep. 2003.08, School of Computing, University of Leeds, U.K., 2003.

Bagnara, R., Hill, P. M., and Zaffanella, E.
The Parma Polyhedra Library: Toward a complete set of numerical
abstractions for the analysis and verification of hardware and software
systems.
Quaderno 457, Dipartimento di Matematica, Università di Parma,
Italy, 2006.
Available at http://www.cs.unipr.it/Publications/. Also
published as arXiv:cs.MS/0612085, available from
http://arxiv.org/.

Bagnara, R., Hill, P. M., and Zaffanella, E.
Applications of polyhedral computations to the analysis and
verification of hardware and software systems.
Quaderno 458, Dipartimento di Matematica, Università di Parma,
Italy, 2007.
Available at http://www.cs.unipr.it/Publications/. Also
published as arXiv:cs.CG/0701122, available from
http://arxiv.org/.

5.8 Recent Software

Most of the theoretical research work has been validated and, in some
cases, inspired by the design and development of software systems
that implement or use abstract interpretation techniques for
program analysis.
All the software projects mentioned in this section are coordinated
by Roberto Bagnara.

5.8.1 PPL

The PPL (Parma Polyhedra Library is a software library
for the representation and manipulation of numerical abstractions
especially targeted at applications concerning the analysis and
verification of software and hardware (digital and/or analog) systems.
The library supports abstractions based not necessarily closed (NNC)
convex polyhedra, rational grids, a wide selection of difference
and octagonal shapes, the most powerful and wide family of intervals
available in the free software world (closed intervals,
possibly non-closed ones, with boundaries given by any native integral
or floating point type, unbounded integers or rationals,
possibly with restrictions like modulo interval and
strided interval),
plus products and finite powersets of the above.
The PPL has several features that make it unique: these include
a natural interface for NNC polyhedra, innovative widening operators
and support for time- and memory-bounded computations.
The Parma Polyhedra Library provides several user friendly interfaces
(C++, C, Java, OCaml and Prolog);
it is fully dynamic (available virtual memory is the only limitation
to the dimension of anything);
it is portable (written in standard C++ and following all other available
standards);
it is exception-safe (never leaks resources or leaves invalid object
fragments around);
it is quite efficient and thoroughly documented.
The library is free software distributed under the terms of the GNU General
Public License.
For the most up-to-date information, documentation and downloads
and to follow the development work see the Parma Polyhedra Library
site at http://bugseng.com/products/ppl.
The PPL is used by many projects and by the most prestigious research
centers in the field of formal analysis and verification.
In particular, it is used by GCC —the GNU Compiler Collection—,
probably the compilers’ suite in most widespread use.

5.8.2 ECLAIR

ECLAIR is a new, professional platform for the verification
of the C family of languages. It can currently analyze several
dialects of C, but work on extending ECLAIR to C++
has already started.
The main features of the current version of ECLAIR
are summarized in the following paragraphs.

Toolchain Emulation and Unchanged Build System

A powerful and completely generic option-processing mechanism
allows ECLAIR to masquerade as any toolchain component,
such as gcc, with its 1000+ options, and any other
compiler, assembler and linker.
Thanks to this kind of mimicry, ECLAIR can access
all the code comprising an application or library without
requiring any change in the build system. In particular,
if the application/library can be built in parallel (e.g., via
make -j), then it can be analyzed with ECLAIR
in parallel.
Here, for instance, is how httpd version 2.2.11
can be analyzed once the verification tasks to be performed
have been specified in the file my_setup:

Double AST Interface

The ECLAIR parser builds an abstract syntax tree (AST) that
is available to the other components of the system via two different,
though completely interoperable, interfaces:
(1)
As a Prolog term that directly encodes all and only the syntactic
aspects of the program; but incorporating “handles” as subterms
that give easy access to all non-syntactic information.
(2)
As a number of inter-related C++ classes: a more complex
representation that, however, gives access to all the information.
The Prolog view makes it easy to code syntax-based algorithms,
such as coding rule checkers, program analyzers and transformers.

Precise and Fast Parsing

The AST built by the parser encodes precise information about
the original source code so that we can recover, almost for
each token, complete information on the chain of file inclusions and,
orthogonally, the chain of macro expansions that brought it to the
preprocessed source. This means that we can build tools able to
identify the precise points in the source that are responsible for a
given state of affairs.
The parser, which supports ISO C90 and C99 along with several
GNU and Microsoft extensions, is pretty fast: today running
at more than 100,000 lines of code per second, with room for
further optimizations.

Simplified Intermediate Form

ECLAIR includes a semantics-preserving program transformer
that can simplify a program into a subset of C (or C++), the main
simplification consisting of the removal of side-effects from
expressions. The simplified form, which is of course compilable and
semantically equivalent, makes it much easier to develop
semantics-based program manipulations.

Coding Rule Checkers and Bug Finders

The coding rule checkers support the following rule sets:
MISRA-C:2004, CERT C Secure Coding Standard,
JSF C++, High-Integrity C++.
The simplicity and elegance with which checkers can be defined
is available to users that wish to develop their own checkers.

Precise and Scalable Program Analysis

We are porting the semantic analysis engine of a previous prototype
to ECLAIR. This includes a flow-, context- and field-sensitive
pointer analysis along with numerical value analyses based on the
Parma Polyhedra Library, a state-of-the-art library of numerical
abstractions. A key feature of ECLAIR will be reduction
of false positives thanks to sophisticated program analyses and not
via the introduction of false negatives.

5.8.3 PURRS

Purrs (Parma University’s Recurrence Relation Solver
is a prototype of an automatic recurrence relation solver.
It is able to automatically solve difference equation and other
generalized recurrences providing, when possible, a closed formula
(i.e., a formula containing a number of ‘+’ or ‘−’ signs
that is independent of the main variable).
If Purrs fails to find such a closed formula, it will express the solution,
whenever possible, in terms of sums and/or products.
A closed formula (or its generalization involving symbolic sums and products)
is guaranteed to exist only in rather special
circumstances, and in general Purrs will only find upper and lower bounds
for the solution of the recurrence.
Notice that these are proper upper and lower bounds,
which are valid for all possible inputs, rather than asymptotic bounds.
This possibility is a first step toward the definition of an automatic
complexity analysis of programs that is able to provide real guarantees
concerning resource usage.
Purrs is free software distributed under the terms of the GNU General
Public License.
All the information is available at
http://www.cs.unipr.it/purrs/.
At the same URI, an interactive prototype is available that allows
to explore the capabilities of the system.

5.8.4 CHINA

China (Clp(H, N) Analyzer)
is a parametric static analyzer for (constraint) logic programming
languages. The analyzer accepts ISO Prolog programs and uses
several abstract domains that allow to determine approximations
of the following information concerning program variables
and terms bound to them:
groundness, sharing, freeness, linearity, compoundness,
shape, finiteness, simple types, values of the numerical leaves,
and linear relations among term sizes.

5.8.5 OCRA

Ocra (Occur-Check Reduction Analyzer) is a prototype
using the information provided by the China analyzer for the
occur-check reduction of logic languages.
Given, e.g., an ISO Prolog program, Ocra produces a new ISO Prolog
program that can be correctly executed even on systems that omit
the occur-check in the unification procedure.

5.8.6 CLAIR

The CLAIR (Combined Language and Abstract Interpretation Resource)
system has been developed in order to study and experiment
with various aspects of programming language implementation.
In particular it is aimed to provide easy ways of playing with:
(1)
lexical analysis;
(2)
syntactic analysis and generation of the abstract syntax tree (parsing);
(3)
static checking of type correctness;
(4)
operational semantics expressed by means of transition systems;
(5)
interpretation;
(6)
static analysis;
(7)
compilation.
Points 1–5 are fully developed; point 6 has been implemented, but further
development has moved to the new ECLAIR system; point 7 has been
investigated in some small student projects.
The CLAIR approach is based on structured operational semantics
à la Plotkin for the formal description
and on the Prolog language for the implementation.
One of the advantages of this combined approach is that it is relatively
easy to extend the system so as to support other language features.
CLAIR is currently being used successfully in university courses
covering formal languages and operational
semantics.1
Its main advantage is that students can see, with relatively little
effort, theory at work: a grammar becomes a parser; static semantics
rules directly translate into a type checker; concrete dynamic semantics
rules result in an interpreter for the language; abstract dynamic rules
can be turned into a static program analyzer.
More information is available at
http://www.cs.unipr.it/clair/.