<?xml version="1.0" encoding="utf-8"?>
<raweb xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" year="2013">
  <identification id="gallium" isproject="true">
    <shortname>GALLIUM</shortname>
    <projectName>Programming languages, types, compilation and proofs</projectName>
    <theme-de-recherche>Proofs and Verification</theme-de-recherche>
    <domaine-de-recherche>Algorithmics, Programming, Software and Architecture</domaine-de-recherche>
    <urlTeam>http://gallium.inria.fr/</urlTeam>
    <datecreation>2006 May 01</datecreation>
    <UR name="Rocquencourt"/>
    <keywords>
      <term>Programming Languages</term>
      <term>Functional Programming</term>
      <term>Compilation</term>
      <term>Type Systems</term>
      <term>Proofs Of Programs</term>
      <term>Static Analysis</term>
      <term>Parallelism</term>
    </keywords>
  </identification>
  <team id="uid1">
    <person key="cristal-2005-id18078">
      <firstname>Xavier</firstname>
      <lastname>Leroy</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Team leader, Inria, Senior Researcher</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635214976">
      <firstname>Umut</firstname>
      <lastname>Acar</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Advanced Research position, from Jun 2013</moreinfo>
    </person>
    <person key="cristal-2005-id18151">
      <firstname>Damien</firstname>
      <lastname>Doligez</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Researcher</moreinfo>
    </person>
    <person key="comete-2005-id18114">
      <firstname>Fabrice</firstname>
      <lastname>Le Fessant</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Researcher, from Jan 2013</moreinfo>
    </person>
    <person key="moscova-2005-id18098">
      <firstname>Luc</firstname>
      <lastname>Maranget</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Researcher, from Jan 2013</moreinfo>
    </person>
    <person key="cristal-2005-id18210">
      <firstname>François</firstname>
      <lastname>Pottier</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Senior Researcher</moreinfo>
      <hdr>oui</hdr>
    </person>
    <person key="gallium-2013-idp140397635226880">
      <firstname>Mike</firstname>
      <lastname>Rainey</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Starting Research position, from Jun 2013</moreinfo>
    </person>
    <person key="cristal-2005-id18098">
      <firstname>Didier</firstname>
      <lastname>Rémy</lastname>
      <categoryPro>Chercheur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, Senior Researcher</moreinfo>
      <hdr>oui</hdr>
    </person>
    <person key="gallium-2010-id59605">
      <firstname>Julien</firstname>
      <lastname>Cretin</lastname>
      <categoryPro>PhD</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>U. Paris Diderot, AMX grant</moreinfo>
    </person>
    <person key="asap-2009-id60299">
      <firstname>Jacques-Henri</firstname>
      <lastname>Jourdan</lastname>
      <categoryPro>PhD</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, granted by ANR VERASCO project</moreinfo>
    </person>
    <person key="gallium-2010-id59702">
      <firstname>Jonathan</firstname>
      <lastname>Protzenko</lastname>
      <categoryPro>PhD</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria</moreinfo>
    </person>
    <person key="gallium-2010-id59852">
      <firstname>Gabriel</firstname>
      <lastname>Scherer</lastname>
      <categoryPro>PhD</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>U. Paris Diderot, AMN grant</moreinfo>
    </person>
    <person key="gallium-2012-idp140283908771312">
      <firstname>Thibaut</firstname>
      <lastname>Balabonski</lastname>
      <categoryPro>PostDoc</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria</moreinfo>
    </person>
    <person key="moscova-2008-id18320">
      <firstname>Thomas</firstname>
      <lastname>Braibant</lastname>
      <categoryPro>PostDoc</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, granted by FSN CEEC</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635245824">
      <firstname>Pierre-Evariste</firstname>
      <lastname>Dagand</lastname>
      <categoryPro>PostDoc</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, from Nov 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635248128">
      <firstname>Jael</firstname>
      <lastname>Kriener</lastname>
      <categoryPro>PostDoc</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, granted by FSN ADN4SE, from Dec 2013</moreinfo>
    </person>
    <person key="cristal-2005-id18425">
      <firstname>Grégoire</firstname>
      <lastname>Henry</lastname>
      <categoryPro>PostDoc</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, granted by OCamlPro, from Feb 2013 until Oct 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635252800">
      <firstname>Luca</firstname>
      <lastname>Saiu</lastname>
      <categoryPro>PostDoc</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, granted by OCamlPro, from Apr 2013 until Sep 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635255168">
      <firstname>Michael</firstname>
      <lastname>Laporte</lastname>
      <categoryPro>Technique</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria, granted by FUI Richelieu project, from Apr 2013</moreinfo>
    </person>
    <person key="algo-2005-id18115">
      <firstname>Virginie</firstname>
      <lastname>Collette</lastname>
      <categoryPro>Assistant</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Inria</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635259840">
      <firstname>Olin</firstname>
      <lastname>Shivers</lastname>
      <categoryPro>Visiteur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>on sabbatical from Northeastern U., from Jul 2013 until Dec 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635262224">
      <firstname>Robbert</firstname>
      <lastname>Krebbers</lastname>
      <categoryPro>Visiteur</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>Ph.D. student, Radboud U., from Jan 2013 until Mar 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635264592">
      <firstname>Michael</firstname>
      <lastname>Arntzenius</lastname>
      <categoryPro>AutreCategorie</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>intern, CMU, from Jun 2013 until Aug 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635266896">
      <firstname>Jacques-Pascal</firstname>
      <lastname>Deplaix</lastname>
      <categoryPro>AutreCategorie</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>intern, EPITECH, from Oct 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635269200">
      <firstname>Armaël</firstname>
      <lastname>Guéneau</lastname>
      <categoryPro>AutreCategorie</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>intern, ENS Lyon, from Jun 2013 until Jul 2013</moreinfo>
    </person>
    <person key="gallium-2013-idp140397635271504">
      <firstname>Cyprien</firstname>
      <lastname>Mangin</lastname>
      <categoryPro>AutreCategorie</categoryPro>
      <research-centre>Rocquencourt</research-centre>
      <moreinfo>intern, Ecole Polytechnique, from Apr 2013 until Jul 2013</moreinfo>
    </person>
  </team>
  <presentation id="uid2">
    <bodyTitle>Overall Objectives</bodyTitle>
    <subsection id="uid3" level="1">
      <bodyTitle>Introduction</bodyTitle>
      <p>The research conducted in the Gallium group aims at improving the
safety, reliability and security of software through advances in
programming languages and formal verification of programs. Our work
is centered on the design, formalization and implementation of
functional programming languages, with particular emphasis on type
systems and type inference, formal verification of compilers, and
interactions between programming and program proof. The Caml language
and the CompCert verified C compiler embody many of our research
results. Our work spans the whole spectrum from theoretical
foundations and formal semantics to applications to real-world
problems.</p>
    </subsection>
    <subsection id="uid4" level="1">
      <bodyTitle>Highlights of the Year</bodyTitle>
      <p>Didier Le Botlan (INSA Toulouse) and Didier Rémy received the ACM
SIGPLAN Most Influential ICFP Paper Award for their ICFP 2003 paper,
<i>MLF: Raising ML to the power of System F</i>
<ref xlink:href="#gallium-2013-bid0" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
    </subsection>
  </presentation>
  <fondements id="uid5">
    <bodyTitle>Research Program</bodyTitle>
    <subsection id="uid6" level="1">
      <bodyTitle>Programming languages: design, formalization, implementation</bodyTitle>
      <p>Like all languages, programming languages are the media by which
thoughts (software designs) are communicated (development),
acted upon (program execution), and reasoned upon (validation).
The choice of adequate programming languages has a tremendous impact
on software quality. By “adequate”, we mean in particular the
following four aspects of programming languages:</p>
      <simplelist>
        <li id="uid7">
          <p noindent="true"><b>Safety.</b> The programming language must not expose
error-prone low-level operations (explicit memory deallocation,
unchecked array accesses, etc) to the programmers. Further, it should
provide constructs for describing data structures, inserting
assertions, and expressing invariants within programs. The consistency
of these declarations and assertions should be verified through
compile-time verification (e.g. static type checking) and run-time
checks.</p>
        </li>
        <li id="uid8">
          <p noindent="true"><b>Expressiveness.</b> A programming language should manipulate
as directly as possible the concepts and entities of the application
domain. In particular, complex, manual encodings of domain notions
into programmatic notations should be avoided as much as possible. A
typical example of a language feature that increases expressiveness is
pattern matching for examination of structured data (as in symbolic
programming) and of semi-structured data (as in XML processing).
Carried to the extreme, the search for expressiveness leads to
domain-specific languages, customized for a specific application area.</p>
        </li>
        <li id="uid9">
          <p noindent="true"><b>Modularity and compositionality.</b> The complexity of large
software systems makes it impossible to design and develop them as
one, monolithic program. Software decomposition (into semi-independent
components) and software composition (of existing or
independently-developed components) are therefore crucial. Again,
this modular approach can be applied to any programming language,
given sufficient fortitude by the programmers, but is much facilitated
by adequate linguistic support. In particular, reflecting notions of
modularity and software components in the programming language enables
compile-time checking of correctness conditions such as type
correctness at component boundaries.</p>
        </li>
        <li id="uid10">
          <p noindent="true"><b>Formal semantics.</b> A programming language should fully and
formally specify the behaviours of programs using mathematical
semantics, as opposed to informal, natural-language specifications.
Such a formal semantics is required in order to apply formal methods
(program proof, model checking) to programs.</p>
        </li>
      </simplelist>
      <p>Our research work in language design and implementation centers around
the statically-typed functional programming paradigm,
which scores high on safety, expressiveness and formal semantics,
complemented with full imperative features and objects for additional
expressiveness, and modules and classes for compositionality. The
OCaml language and system embodies many of our earlier
results in this area <ref xlink:href="#gallium-2013-bid1" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.
Through collaborations, we also gained experience with several
domain-specific languages based on a functional core, including
distributed programming (JoCaml), XML processing (XDuce, CDuce),
reactive functional programming, and hardware modeling.</p>
    </subsection>
    <subsection id="uid11" level="1">
      <bodyTitle>Type systems</bodyTitle>
      <p>Type systems <ref xlink:href="#gallium-2013-bid2" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> are a very effective way to improve
programming language reliability. By grouping the data manipulated by
the program into classes called types, and ensuring that operations
are never applied to types over which they are not defined
(e.g. accessing an integer as if it were an array, or calling a string
as if it were a function), a tremendous number of programming errors
can be detected and avoided, ranging from the trivial (misspelled
identifier) to the fairly subtle (violation of data structure
invariants). These restrictions are also very effective at thwarting
basic attacks on security vulnerabilities such as buffer overflows.</p>
      <p>The enforcement of such typing restrictions is called type checking,
and can be performed either dynamically (through run-time type tests)
or statically (at compile-time, through static program analysis). We
favor static type checking, as it catches bugs earlier and even in
rarely-executed parts of the program, but note that not all type
constraints can be checked statically if static type checking is to
remain decidable (i.e. not degenerate into full program proof).
Therefore, all typed languages combine static and dynamic
type-checking in various proportions.</p>
      <p>Static type checking amounts to an automatic proof of
partial correctness of the programs that pass the compiler. The two
key words here are <i>partial</i>, since only type safety guarantees are
established, not full correctness; and <i>automatic</i>, since the
proof is performed entirely by machine, without manual assistance from
the programmer (beyond a few, easy type declarations in the source).
Static type checking can therefore be viewed as the poor man's formal
methods: the guarantees it gives are much weaker than full formal
verification, but it is much more acceptable to the general population
of programmers.</p>
      <subsection id="uid12" level="2">
        <bodyTitle>Type systems and language design.</bodyTitle>
        <p>Unlike most other uses of static program analysis, static
type-checking rejects programs that it cannot analyze safe.
Consequently, the type system is an integral part of the language
design, as it determines which programs are acceptable and which are
not. Modern typed languages go one step further: most of the language
design is determined by the <i>type structure</i> (type algebra and
typing rules) of the language and intended application area. This is
apparent, for instance, in the XDuce and CDuce domain-specific
languages for XML transformations <ref xlink:href="#gallium-2013-bid3" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, <ref xlink:href="#gallium-2013-bid4" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>,
whose design is driven by the idea of regular expression types that
enforce DTDs at compile-time. For this reason, research on type
systems – their design, their proof of semantic correctness (type
safety), the development and proof of associated type checking and
inference algorithms – plays a large and central role in the field of
programming language research, as evidenced by the huge number of type
systems papers in conferences such as Principles of Programming
Languages.</p>
      </subsection>
      <subsection id="uid13" level="2">
        <bodyTitle>Polymorphism in type systems.</bodyTitle>
        <p>There exists a fundamental tension in the field of type systems that
drives much of the research in this area. On the one hand, the desire
to catch as many programming errors as possible leads to type systems
that reject more programs, by enforcing fine distinctions between
related data structures (say, sorted arrays and general arrays). The
downside is that code reuse becomes harder: conceptually identical
operations must be implemented several times (say, copying a general array
and a sorted array). On the other hand, the desire to support code
reuse and to increase expressiveness leads to type
systems that accept more programs, by assigning a common type to
broadly similar objects (for instance, the <tt>Object</tt> type of all class
instances in Java). The downside is a loss of precision in static
typing, requiring more dynamic type checks (downcasts in Java) and
catching fewer bugs at compile-time.</p>
        <p><i>Polymorphic</i> type systems offer a way out of this dilemma by
combining precise, descriptive types (to catch more errors statically)
with the ability to abstract over their differences in pieces of
reusable, generic code that is concerned only with their commonalities.
The paradigmatic example is parametric polymorphism, which is
at the heart of all typed functional programming
languages. Many forms of polymorphic typing have been studied since
then. Taking examples from our group, the work of Rémy, Vouillon and
Garrigue on row polymorphism <ref xlink:href="#gallium-2013-bid5" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, integrated
in OCaml, extended the benefits of this approach (reusable
code with no loss of typing precision) to object-oriented programming,
extensible records and extensible variants. Another example is the
work by Pottier on subtype polymorphism, using a constraint-based
formulation of the type system <ref xlink:href="#gallium-2013-bid6" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
      <subsection id="uid14" level="2">
        <bodyTitle>Type inference.</bodyTitle>
        <p>Another crucial issue in type systems research is the issue of type
inference: how many type annotations must be provided by the
programmer, and how many can be inferred (reconstructed) automatically
by the typechecker? Too many annotations make the language more
verbose and bother the programmer with unnecessary details. Too few
annotations make type checking undecidable, possibly requiring
heuristics, which is unsatisfactory.
OCaml requires explicit type information at data type
declarations and at component interfaces, but infers all
other types.</p>
        <p>In order to be predictable, a type inference algorithm must be complete. That
is, it must not find <i>one</i>, but <i>all</i> ways of filling in the missing
type annotations to form an explicitly typed program. This task is made easier
when all possible solutions to a type inference problem are <i>instances</i>
of a single, <i>principal</i> solution.</p>
        <p>Maybe surprisingly, the strong requirements – such as the existence of
principal types – that are imposed on type systems by the desire to perform
type inference sometimes lead to better designs. An illustration of this is
row variables. The development of row variables was prompted by type inference
for operations on records. Indeed, previous approaches were based on subtyping
and did not easily support type inference. Row variables have proved simpler
than structural subtyping and more adequate for typechecking record update,
record extension, and objects.</p>
        <p>Type inference encourages abstraction and code reuse. A programmer's
understanding of his own program is often initially limited to a particular
context, where types are more specific than strictly required. Type inference
can reveal the additional generality, which allows making the code more
abstract and thus more reuseable.</p>
      </subsection>
    </subsection>
    <subsection id="uid15" level="1">
      <bodyTitle>Compilation</bodyTitle>
      <p>Compilation is the automatic translation of high-level programming
languages, understandable by humans, to lower-level languages, often
executable directly by hardware. It is an essential step in the
efficient execution, and therefore in the adoption, of high-level
languages. Compilation is at the interface between programming
languages and computer architecture, and because of this position has
had considerable influence on the designs of both. Compilers have
also attracted considerable research interest as the oldest instance
of symbolic processing on computers.</p>
      <p>Compilation has been the topic of much research work in the last 40
years, focusing mostly on high-performance execution
(“optimization”) of low-level languages such as Fortran and C. Two
major results came out of these efforts: one is a superb body of
performance optimization algorithms, techniques and methodologies; the
other is the whole field of static program analysis, which now serves
not only to increase performance but also to increase reliability,
through automatic detection of bugs and establishment of safety
properties. The work on compilation carried out in the Gallium group
focuses on a less investigated topic: compiler certification.</p>
      <subsection id="uid16" level="2">
        <bodyTitle>Formal verification of compiler correctness.</bodyTitle>
        <p>While the algorithmic aspects of compilation (termination and
complexity) have been well studied, its semantic correctness – the
fact that the compiler preserves the meaning of programs – is
generally taken for granted. In other terms, the correctness of
compilers is generally established only through testing. This is
adequate for compiling low-assurance software, themselves validated
only by testing: what is tested is the executable code produced by the
compiler, therefore compiler bugs are detected along with application
bugs. This is not adequate for high-assurance, critical software
which must be validated using formal methods: what is formally
verified is the source code of the application; bugs in the compiler
used to turn the source into the final executable can invalidate the
guarantees so painfully obtained by formal verification of the source.</p>
        <p>To establish strong guarantees that the compiler can be trusted not
to change the behavior of the program, it is necessary to apply formal
methods to the compiler itself. Several approaches in this direction
have been investigated, including translation validation,
proof-carrying code, and type-preserving compilation. The approach
that we currently investigate, called <i>compiler verification</i>,
applies program proof techniques to the compiler itself, seen as a
program in particular, and use a theorem prover (the Coq system) to
prove that the generated code is observationally equivalent to the
source code. Besides its potential impact on the critical software
industry, this line of work is also scientifically fertile: it
improves our semantic understanding of compiler intermediate
languages, static analyses and code transformations.</p>
      </subsection>
    </subsection>
    <subsection id="uid17" level="1">
      <bodyTitle>Interface with formal methods</bodyTitle>
      <p>Formal methods refer collectively to the mathematical specification of
software or hardware systems and to the verification of these systems
against these specifications using computer assistance: model
checkers, theorem provers, program analyzers, etc. Despite their
costs, formal methods are gaining acceptance in the critical software
industry, as they are the only way to reach the required levels of
software assurance.</p>
      <p>In contrast with several other Inria projects, our research objectives
are not fully centered around formal methods. However, our research
intersects formal methods in the following two areas, mostly related
to program proofs using proof assistants and theorem provers.</p>
      <subsection id="uid18" level="2">
        <bodyTitle>Software-proof codesign</bodyTitle>
        <p>The current industrial practice is to write programs first, then
formally verify them later, often at huge costs. In contrast, we
advocate a codesign approach where the program and its proof of
correctness are developed in interaction, and are interested in
developing ways and means to facilitate this approach. One
possibility that we currently investigate is to extend functional
programming languages such as Caml with the ability to state
logical invariants over data structures and pre- and post-conditions
over functions, and interface with automatic or interactive provers to
verify that these specifications are satisfied. Another approach that
we practice is to start with a proof assistant such as Coq and improve
its capabilities for programming directly within Coq.</p>
      </subsection>
      <subsection id="uid19" level="2">
        <bodyTitle>Mechanized specifications and proofs for
programming languages components</bodyTitle>
        <p>We emphasize mathematical specifications and proofs of correctness for
key language components such as semantics, type systems, type
inference algorithms, compilers and static analyzers. These
components are getting so large that machine assistance becomes
necessary to conduct these mathematical investigations. We have
already mentioned using proof assistants to verify compiler
correctness. We are also interested in using them to specify and
reason about semantics and type systems. These efforts are part of a
more general research topic that is gaining importance: the formal
verification of the tools that participate in the construction and
certification of high-assurance software.</p>
      </subsection>
    </subsection>
  </fondements>
  <domaine id="uid20">
    <bodyTitle>Application Domains</bodyTitle>
    <subsection id="uid21" level="1">
      <bodyTitle>High-assurance software</bodyTitle>
      <p>A large part of our work on programming languages and tools focuses on
improving the reliability of software. Functional programming,
program proof, and static type-checking contribute significantly to
this goal.</p>
      <p>Because of its proximity with mathematical specifications,
pure functional programming is well suited to program proof.
Moreover, functional programming languages such as Caml are eminently
suitable to develop the code generators and verification tools that
participate in the construction and qualification of high-assurance
software. Examples include Esterel Technologies's KCG 6 code
generator, the Astrée static analyzer, the
Caduceus/Jessie program prover, and the Frama-C platform. Our own
work on compiler verification combines these two aspects of functional
programming: writing a compiler in a pure functional language and
mechanically proving its correctness.</p>
      <p>Static typing detects programming errors early, prevents a number
of common sources of program crashes (null references, out-of bound
array accesses, etc), and helps tremendously to enforce the integrity
of data structures. Judicious uses of generalized abstract data types
(GADTs), phantom types, type abstraction and other encapsulation
mechanisms also allow static type checking to enforce program
invariants.</p>
    </subsection>
    <subsection id="uid22" level="1">
      <bodyTitle>Software security</bodyTitle>
      <p>Static typing is also highly effective at preventing a number of
common security attacks, such as buffer overflows, stack smashing, and
executing network data as if it were code. Applications developed in
a language such as Caml are therefore inherently more secure than
those developed in unsafe languages such as C.</p>
      <p>The methods used in designing type systems and establishing their
soundness can also deliver static analyses that automatically verify
some security policies. Two examples from our past work include Java
bytecode verification <ref xlink:href="#gallium-2013-bid7" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> and enforcement of
data confidentiality through type-based inference of information flows
and noninterference properties <ref xlink:href="#gallium-2013-bid8" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
    </subsection>
    <subsection id="uid23" level="1">
      <bodyTitle>Processing of complex structured data</bodyTitle>
      <p>Like most functional languages, Caml is very well suited to expressing
processing and transformations of complex, structured data. It
provides concise, high-level declarations for data structures; a very
expressive pattern-matching mechanism to destructure data; and
compile-time exhaustiveness tests. Languages such as CDuce and OCamlDuce
extend these benefits to the handling of semi-structured XML data
<ref xlink:href="#gallium-2013-bid9" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.
Therefore, Caml is an excellent match for applications involving significant
amounts of symbolic processing: compilers, program analyzers and
theorem provers, but also (and less obviously) distributed
collaborative applications, advanced Web applications, financial
modeling tools, etc.</p>
    </subsection>
    <subsection id="uid24" level="1">
      <bodyTitle>Rapid development</bodyTitle>
      <p>Static typing is often criticized as being verbose (due to the additional
type declarations required) and inflexible (due to, for instance, class
hierarchies that must be fixed in advance). Its combination with type
inference, as in the Caml language, substantially diminishes the
importance of these problems: type inference allows programs to be
initially written with few or no type declarations; moreover, the
OCaml approach to object-oriented programming completely separates the
class inheritance hierarchy from the type compatibility relation.
Therefore, the Caml language is highly suitable for fast
prototyping and the gradual evolution of software prototypes into
final applications, as advocated by the popular “extreme
programming” methodology.</p>
    </subsection>
    <subsection id="uid25" level="1">
      <bodyTitle>Teaching programming</bodyTitle>
      <p>Our work on the Caml language has an impact on the teaching of
programming. Caml Light is one of the programming
languages selected by the French Ministry of Education
for teaching Computer Science in <i>classes
préparatoires scientifiques</i>. OCaml is also widely used for
teaching advanced programming in engineering schools, colleges and
universities in France, the USA, and Japan.</p>
    </subsection>
  </domaine>
  <logiciels id="uid26">
    <bodyTitle>Software and Platforms</bodyTitle>
    <subsection id="uid27" level="1">
      <bodyTitle>OCaml</bodyTitle>
      <participants>
        <person key="cristal-2005-id18151">
          <firstname>Damien</firstname>
          <lastname>Doligez</lastname>
          <moreinfo>correspondant</moreinfo>
        </person>
        <person key="PASUSERID">
          <firstname>Alain</firstname>
          <lastname>Frisch</lastname>
          <moreinfo>LexiFi</moreinfo>
        </person>
        <person key="PASUSERID">
          <firstname>Jacques</firstname>
          <lastname>Garrigue</lastname>
          <moreinfo>Nagoya University</moreinfo>
        </person>
        <person key="comete-2005-id18114">
          <firstname>Fabrice</firstname>
          <lastname>Le Fessant</lastname>
        </person>
        <person key="cristal-2005-id18078">
          <firstname>Xavier</firstname>
          <lastname>Leroy</lastname>
        </person>
        <person key="moscova-2005-id18098">
          <firstname>Luc</firstname>
          <lastname>Maranget</lastname>
        </person>
      </participants>
      <p>OCaml, formerly known as Objective Caml, is our flagship
implementation of the Caml language. From a language standpoint, it
extends the core Caml language with a fully-fledged object and class
layer, as well as a powerful module system, all joined together by a
sound, polymorphic type system featuring type inference. The OCaml
system is an industrial-strength implementation of this language,
featuring a high-performance native-code compiler for several
processor architectures (IA32, AMD64, PowerPC, ARM, etc) as well as a
bytecode compiler and interactive loop for quick development and
portability. The OCaml distribution includes a standard library and a
number of programming tools: replay debugger, lexer and parser
generators, documentation generator, and compilation manager.</p>
      <p>Web site: <ref xlink:href="http://caml.inria.fr/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>caml.<allowbreak/>inria.<allowbreak/>fr/</ref></p>
    </subsection>
    <subsection id="uid28" level="1">
      <bodyTitle>CompCert C</bodyTitle>
      <participants>
        <person key="cristal-2005-id18078">
          <firstname>Xavier</firstname>
          <lastname>Leroy</lastname>
          <moreinfo>correspondant</moreinfo>
        </person>
        <person key="PASUSERID">
          <firstname>Sandrine</firstname>
          <lastname>Blazy</lastname>
          <moreinfo>EPI Celtique</moreinfo>
        </person>
        <person key="asap-2009-id60299">
          <firstname>Jacques-Henri</firstname>
          <lastname>Jourdan</lastname>
        </person>
      </participants>
      <p>The CompCert C verified compiler is a compiler for a large subset of
the C programming language that generates code for the PowerPC, ARM
and x86 processors. The distinguishing feature of Compcert is that it
has been formally verified using the Coq proof assistant: the
generated assembly code is formally guaranteed to behave as prescribed
by the semantics of the source C code. The subset of C supported is
quite large, including all C types except <tt>long double</tt>, all C
operators, almost all control structures (the only exception is
unstructured <tt>switch</tt>), and the full power of functions
(including function pointers and recursive functions but not variadic
functions). The generated PowerPC code runs 2–3 times faster than
that generated by GCC without optimizations, and only 7% (resp. 12%)
slower than GCC at optimization level 1 (resp. 2).</p>
      <p>Web site: <ref xlink:href="http://compcert.inria.fr/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>compcert.<allowbreak/>inria.<allowbreak/>fr/</ref></p>
    </subsection>
    <subsection id="uid29" level="1">
      <bodyTitle>The diy tool suite</bodyTitle>
      <participants>
        <person key="moscova-2005-id18098">
          <firstname>Luc</firstname>
          <lastname>Maranget</lastname>
          <moreinfo>correspondant</moreinfo>
        </person>
        <person key="PASUSERID">
          <firstname>Jade</firstname>
          <lastname>Alglave</lastname>
          <moreinfo>University College London</moreinfo>
        </person>
        <person key="PASUSERID">
          <firstname>Susmit</firstname>
          <lastname>Sarkar</lastname>
          <moreinfo>University of St Andrews</moreinfo>
        </person>
        <person key="PASUSERID">
          <firstname>Peter</firstname>
          <lastname>Sewell</lastname>
          <moreinfo>University of Cambridge</moreinfo>
        </person>
      </participants>
      <p>The <b>diy</b> suite provides a set of tools for testing shared memory
models: the <b>litmus</b> tool for running tests on hardware, various
generators for producing tests from concise specifications, and
<b>herd</b>, a memory model simulator. Tests are small programs written
in x86, Power or ARM assembler that can thus be generated from concise
specification, run on hardware, or simulated on top of memory
models. Test results can be handled and compared using additional
tools.</p>
      <p>The tool suite and a comprehensive documentation
are available from <ref xlink:href="http://diy.inria.fr/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>diy.<allowbreak/>inria.<allowbreak/>fr/</ref>.</p>
    </subsection>
    <subsection id="uid30" level="1">
      <bodyTitle>Zenon</bodyTitle>
      <participants>
        <person key="cristal-2005-id18151">
          <firstname>Damien</firstname>
          <lastname>Doligez</lastname>
        </person>
      </participants>
      <p>Zenon is an automatic theorem prover based on the tableaux method.
Given a first-order statement as input, it outputs a fully formal
proof in the form of a Coq proof script. It has special rules
for efficient handling of equality and arbitrary transitive
relations. Although still in the prototype stage, it already gives
satisfying results on standard automatic-proving benchmarks.</p>
      <p>Zenon is designed to be easy to interface with front-end tools
(for example integration in an interactive proof assistant), and also
to be easily retargeted to output scripts for different frameworks
(for example, Isabelle).</p>
      <p>Web site:
<ref xlink:href="http://zenon-prover.org/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>zenon-prover.<allowbreak/>org/</ref></p>
    </subsection>
    <subsection id="uid31" level="1">
      <bodyTitle>JoCaml</bodyTitle>
      <participants>
        <person key="moscova-2005-id18098">
          <firstname>Luc</firstname>
          <lastname>Maranget</lastname>
        </person>
      </participants>
      <p>JoCaml is an experimental extension of OCaml that adds support for
concurrent and distributed programming, following the programming
model of the join-calculus.</p>
      <p>Web site: <ref xlink:href="http://jocaml.inria.fr/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>jocaml.<allowbreak/>inria.<allowbreak/>fr/</ref></p>
    </subsection>
  </logiciels>
  <resultats id="uid32">
    <bodyTitle>New Results</bodyTitle>
    <subsection id="uid33" level="1">
      <bodyTitle>Formal verification of compilers and static analyzers</bodyTitle>
      <subsection id="uid34" level="2">
        <bodyTitle>The CompCert formally-verified compiler</bodyTitle>
        <participants>
          <person key="cristal-2005-id18078">
            <firstname>Xavier</firstname>
            <lastname>Leroy</lastname>
          </person>
          <person key="asap-2009-id60299">
            <firstname>Jacques-Henri</firstname>
            <lastname>Jourdan</lastname>
          </person>
          <person key="gallium-2013-idp140397635262224">
            <firstname>Robbert</firstname>
            <lastname>Krebbers</lastname>
          </person>
        </participants>
        <p>In the context of our work on compiler verification (see
section <ref xlink:href="#uid16" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>), since 2005 we have been developing and
formally verifying a moderately-optimizing compiler for a large subset
of the C programming language, generating assembly code for the
PowerPC, ARM, and x86 architectures <ref xlink:href="#gallium-2013-bid10" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.
This compiler comprises a back-end part, translating the Cminor
intermediate language to PowerPC assembly and reusable for source
languages other than C <ref xlink:href="#gallium-2013-bid11" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, and a
front-end translating the CompCert C subset of C to Cminor.
The compiler is mostly written within the specification language of
the Coq proof assistant, from which Coq's extraction facility
generates executable Caml code. The compiler comes with a 50000-line,
machine-checked Coq proof of semantic preservation establishing that
the generated assembly code executes exactly as prescribed by the
semantics of the source C program.</p>
        <p>This year we released three versions of CompCert. Version 1.13,
released in March, improves conformance with the ISO C standard by
defining the semantics of comparisons involving pointers “one past”
the end of an array. Such comparisons used to be undefined behaviors
in earlier versions of CompCert. Robbert Krebbers formalized a
reasonable interpretation of the ISO C rules concerning pointers “one
past” and adapted CompCert's proofs accordingly. CompCert 1.13 also
features minor performance improvements for the ARM and PowerPC
back-ends, notably for parameter passing via stack locations.</p>
        <p>Version 2.0 of CompCert, released in June, re-architects the compiler
back-end around the new register allocator described in
section <ref xlink:href="#uid35" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Besides improving the performance of generated
code, this new allocator made it possible to add support for 64-bit
integers, that is, the <tt>long long</tt> and <tt>unsigned long
long</tt> data types of ISO C99. Most arithmetic operations over 64-bit
integers are expanded in-line and proved correct, but a few complex
operations (division, modulus, and conversions to and from
floating-point numbers) are implemented as calls into library
functions.</p>
        <p>Moreover, conformance with Application Binary Interfaces
was improved, especially concerning the passing of function parameters
and results of type <tt>float</tt> (single-precision FP numbers).</p>
        <p>Finally, CompCert 2.0 features preliminary support for debugging
information. The <tt>-g</tt> compiler flag causes DWARF debugging
information to be generated for line numbers and call stack
structure. However, no information is generated yet for C type
definitions and variable declarations.</p>
        <p>Version 2.1, released in October, addresses several shortcomings of
CompCert for embedded system codes, as identified by Airbus during
their experimental evaluation of CompCert. In particular, CompCert
2.1 features the <tt>_Alignas</tt> modifier introduced in ISO C2011, to
support precise control of alignment of global variables and structure
fields, and uses this modifier to implement packed structures in a
more robust fashion than in earlier releases. Xavier Leroy also
implemented and proved correct the optimization of integer divisions
by constants introduced by Granlund and Montgomery
<ref xlink:href="#gallium-2013-bid12" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
      <subsection id="uid35" level="2">
        <bodyTitle>Register allocation with validation a posteriori</bodyTitle>
        <participants>
          <person key="cristal-2005-id18078">
            <firstname>Xavier</firstname>
            <lastname>Leroy</lastname>
          </person>
        </participants>
        <p>Register allocation (the placement of program variables in processor
registers) has a tremendous impact on the performance of compiled
code. However, advanced register allocation techniques are difficult
to prove correct, as they involve complex algorithms and data
structures. Since the beginning of the CompCert project, we chose to
avoid some of these difficult proofs by performing validation
<i>a posteriori</i> for part of register allocation: the IRC graph
coloring algorithm invoked during register allocation is not proved
correct; instead, its results are verified at every compiler run to be
a correct coloring of the given interference graph, using a simple
validator proved sound in Coq.</p>
        <p>In CompCert 2.0, we push this validation-based approach
further. The whole register allocator is now subject to validation a
posteriori and no longer needs to be proved correct. The validator
follows the algorithm invented by Rideau and Leroy
<ref xlink:href="#gallium-2013-bid13" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> and further developed by
Tassarotti and Leroy. It proceeds by backward dataflow analysis of
symbolic equations between program variables, registers, and stack
locations.</p>
        <p>Consequently, the new register allocator for CompCert 2.0 is much more
aggressive than that of CompCert 1: it features a number of
optimizations that could not be proved correct in CompCert, including
live-range splitting, better handling of two-address operations and
other irregularities of the x86 instruction set, an improved spilling
strategy, and iterating register allocation to place temporaries
introduced by spilling. Moreover, the new register allocator can
handle program variables of 64-bit integer types, allocating them to
pairs of 32-bit registers or stack locations. The new register
allocator improves the performance of generated x86 code by up to 10%
on our benchmarks.</p>
      </subsection>
      <subsection id="uid36" level="2">
        <bodyTitle>Formal verification of static analyzers based on abstract interpretation</bodyTitle>
        <participants>
          <person key="PASUSERID">
            <firstname>Sandrine</firstname>
            <lastname>Blazy</lastname>
            <moreinfo>EPI Celtique</moreinfo>
          </person>
          <person key="gallium-2013-idp140397635255168">
            <firstname>Vincent</firstname>
            <lastname>Laporte</lastname>
            <moreinfo>EPI Celtique</moreinfo>
          </person>
          <person key="asap-2009-id60299">
            <firstname>Jacques-Henri</firstname>
            <lastname>Jourdan</lastname>
          </person>
          <person key="cristal-2005-id18078">
            <firstname>Xavier</firstname>
            <lastname>Leroy</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>David</firstname>
            <lastname>Pichardie</lastname>
            <moreinfo>EPI Celtique</moreinfo>
          </person>
        </participants>
        <p>In the context of the ANR Verasco project, we are investigating the
formal specification and verification in Coq of a realistic static
analyzer based on abstract interpretation. This static analyzer should
be able to handle the same large subset of the C language as the
CompCert compiler; support a combination of abstract domains,
including relational domains; and produce usable alarms. The
long-term goal is to obtain a static analyzer that can be used to
prove safety properties of real-world embedded C codes.</p>
        <p>This year, Jacques-Henri Jourdan worked on numerical abstract domains
for the static analyzer. First, he designed, programmed and proved
correct an abstraction layer that transforms any relational abstract
domain for mathematical, arbitrary-precision integers into a
relational abstract domain for finite-precision machine integers,
taking overflow and “wrap-around” behaviors into account. This
domain transformer makes it possible to design numerical domains
without taking into account the finiteness of machine integers.
Then, he implemented and proved sound non-relational abstract domains
for intervals of integers and of floating-point numbers, supporting
almost all CompCert arithmetic operations.</p>
        <p>In collaboration with team Celtique, we studied which intermediate
languages of the CompCert C compiler are suitable as source language
for the static analyzer. Early work by Blazy, Laporte, Maroneze and
Pichardie <ref xlink:href="#gallium-2013-bid14" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> performs abstract interpretation over
the RTL intermediate language, a simple language with unstructured
control (control-flow graph). However, this language is too low-level
to support reporting alarms at the level of the source C program.</p>
        <p>Later this year, we decided to use the C#minor intermediate language
of CompCert as source language for analysis. This language has mostly
structured control (if/then/else, C loops, and <tt>goto</tt>), and is
much closer to the source C program. Then, Jacques-Henri Jourdan,
Xavier Leroy and David Pichardie designed a generic abstract
interpreter for the C#minor language, parameterized by an abstract
domain of execution states, using structured fixpoint iteration for
loops and a function-global iteration for <tt>goto</tt>.
Jacques-Henri Jourdan is in the process of proving the
soundness of this abstract interpreter in Coq.</p>
      </subsection>
      <subsection id="uid37" level="2">
        <bodyTitle>Formalization of floating-point arithmetic</bodyTitle>
        <participants>
          <person key="PASUSERID">
            <firstname>Sylvie</firstname>
            <lastname>Boldo</lastname>
            <moreinfo>EPI Toccata</moreinfo>
          </person>
          <person key="asap-2009-id60299">
            <firstname>Jacques-Henri</firstname>
            <lastname>Jourdan</lastname>
          </person>
          <person key="cristal-2005-id18078">
            <firstname>Xavier</firstname>
            <lastname>Leroy</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Guillaume</firstname>
            <lastname>Melquiond</lastname>
            <moreinfo>EPI Toccata</moreinfo>
          </person>
        </participants>
        <p>Last year, we replaced the axiomatization of floating-point numbers
and arithmetic operations used in early versions of CompCert by a
fully-formal Coq development, building on the Coq formalization of
IEEE-754 arithmetic provided by the Flocq library of Sylvie Boldo and
Guillaume Melquiond. A paper describing this work was presented
at the ARITH 2013 conference <ref xlink:href="#gallium-2013-bid15" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        <p>This year, we extended this formalization of floating-point arithmetic
with a more precise modeling of “Not a Number” special numbers,
reflecting the signs and payloads of these numbers into their
bit-level, in-memory representation. We also proved correct more
algebraic identities over FP computations, such as
<formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mi>x</mi><mo>/</mo><msup><mn>2</mn><mi>n</mi></msup><mo>=</mo><mi>x</mi><mo>×</mo><msup><mn>2</mn><mrow><mo>-</mo><mi>n</mi></mrow></msup></mrow></math></formula> if <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mrow><mo>|</mo><mi>n</mi><mo>|</mo><mo>&lt;</mo><mn>1023</mn></mrow></math></formula>, as well as nontrivial
implementation schemes for conversions between integer and FP numbers,
whose correctness rely on subtle properties of the “round to odd”
rounding mode. These extensions are described in a draft journal
paper under submission <ref xlink:href="#gallium-2013-bid16" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, and integrated in
version 2.1 of CompCert.</p>
      </subsection>
      <subsection id="uid38" level="2">
        <bodyTitle>Formal verification of hardware synthesis</bodyTitle>
        <participants>
          <person key="moscova-2008-id18320">
            <firstname>Thomas</firstname>
            <lastname>Braibant</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Adam</firstname>
            <lastname>Chlipala</lastname>
            <moreinfo>MIT</moreinfo>
          </person>
        </participants>
        <p>Verification of hardware designs has been thoroughly investigated.
Yet, obtaining provably correct hardware of significant complexity is
usually considered challenging and time-consuming. Hardware synthesis
aims to raise the level of description of circuits, reducing the
effort necessary to produce them.
This yields two opportunities for formal verification: a first option
is to verify (part of) the hardware compiler; a second option is to
study to what extent these higher-level design are amenable to formal
proof.</p>
        <p>Continuing work started during a visit at MIT under the supervision of
Adam Chlipala, Thomas Braibant worked on the implementation and proof
of correctness of a prototype hardware compiler. This compiler
produces descriptions of circuits in RTL style from a high-level
description language inspired by BlueSpec.
Formal verification of hardware designs of mild complexity was
conducted at the source level, making it possible to obtain fully
certified RTL designs.
A paper describing this compiler and two examples of certified designs
was presented at the CAV 2013 conference <ref xlink:href="#gallium-2013-bid17" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
    </subsection>
    <subsection id="uid39" level="1">
      <bodyTitle>Language design and type systems</bodyTitle>
      <subsection id="uid40" level="2">
        <bodyTitle>The Mezzo programming language</bodyTitle>
        <participants>
          <person key="gallium-2010-id59702">
            <firstname>Jonathan</firstname>
            <lastname>Protzenko</lastname>
          </person>
          <person key="cristal-2005-id18210">
            <firstname>François</firstname>
            <lastname>Pottier</lastname>
          </person>
          <person key="gallium-2012-idp140283908771312">
            <firstname>Thibaut</firstname>
            <lastname>Balabonski</lastname>
          </person>
          <person key="gallium-2013-idp140397635269200">
            <firstname>Armaël</firstname>
            <lastname>Guéneau</lastname>
          </person>
          <person key="gallium-2013-idp140397635271504">
            <firstname>Cyprien</firstname>
            <lastname>Mangin</lastname>
          </person>
        </participants>
        <p>In the past ten years, the type systems community and the separation logic
community, among others, have developed highly expressive formalisms for
describing ownership policies and controlling side effects in imperative
programming languages. In spite of this extensive knowledge, it remains very
difficult to come up with a programming language design that is simple,
effective (it actually controls side effects!) and expressive (it does not force
programmers to alter the design of their data structures and algorithms).</p>
        <p>The Mezzo programming language aims to bring new answers to these questions.</p>
        <p>This year, we:</p>
        <simplelist>
          <li id="uid41">
            <p noindent="true">made significant progress on the proof of soundness, by rewriting it in
a more modular fashion;</p>
          </li>
          <li id="uid42">
            <p noindent="true">improved the implementation, by formalizing the algorithms and rewriting
significant parts of the type-checker;</p>
          </li>
          <li id="uid43">
            <p noindent="true">hosted two interns who explored arithmetic reasoning and modeling of the
iterator protocol, respectively;</p>
          </li>
          <li id="uid44">
            <p noindent="true">formalized libraries for concurrent programming in Mezzo;</p>
          </li>
          <li id="uid45">
            <p noindent="true">wrote both an interpreter and a compiler for the language.</p>
          </li>
        </simplelist>
        <p>A paper on Mezzo appeared in the ICFP 2013
conference <ref xlink:href="#gallium-2013-bid18" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        <p>During the previous year (2012), François Pottier wrote a formal definition of
Mezzo, and proved that Mezzo is type-safe: that is, well-typed programs cannot
crash. The proof was machine-checked using Coq. This year, Thibaut
Balabonski and François Pottier extended this formalization with support for
concurrency and dynamically-allocated locks, and proved that well-typed
programs not only cannot crash, but also are data-race free.</p>
        <p>The structure of the proof was re-worked so as to make it more modular. A
paper, which emphasizes this modularity, has been submitted for presentation
at a conference.</p>
        <p>The new concurrent features have been integrated in the core library of Mezzo by
Thibaut Balabonski. Further concurrent libraries have been included to provide more
communication primitives, such as channels for message passing.</p>
        <p>Jonathan Protzenko worked on formalizing the type-checking algorithms currently
used in the Mezzo prototype compiler. This led to practical results in the form
of improvements to the type-checker: we now type-check more programs, and the
success of the type-checker is more predictable as well. Some soundness bugs
have been identified and fixed. The design of some of the language's features
has been improved as well.</p>
        <p>The formalization of the type-checker was presented at the IFL 2013
conference, and is to appear in the post-symposium proceedings in 2014.</p>
        <p>We set out to promote Mezzo in the wild. Protzenko packaged the
software to make it available widely via OPAM, wrote a tutorial for
end-users <ref xlink:href="#gallium-2013-bid19" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, communicated through blog
posts about the language, and released the source code online for
others to contribute.</p>
        <p>We also spread the word about Mezzo through various seminar talks and
discussions with other teams (Carnegie-Mellon university, Cambridge
Computer Lab, Aarhus University, Brasilia University), and by
communicating in international conferences (ICFP'13, FSFMA'13).</p>
        <p>This year, two interns worked with us on Mezzo. Armaël Guéneau (L3; June-July
2013) and Cyprien Mangin (M1; April-July 2013) explored several experimental
aspects of the language. In particular, Armaël worked on an encoding of
iterators in an object-oriented style, which involves transfers of ownership
and typestate changes; while Cyprien improved the treatment of arrays and
implemented an experimental extension of Mezzo with arithmetic assertions.
Armaël presented his work at the workshop HOPE 2013. This work is also
described in a short unpublished paper <ref xlink:href="#gallium-2013-bid20" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
      <subsection id="uid46" level="2">
        <bodyTitle>System F with coercion constraints</bodyTitle>
        <participants>
          <person key="gallium-2010-id59605">
            <firstname>Julien</firstname>
            <lastname>Cretin</lastname>
          </person>
          <person key="cristal-2005-id18098">
            <firstname>Didier</firstname>
            <lastname>Rémy</lastname>
          </person>
        </participants>
        <p>Expressive type systems often allow non trivial conversions between
types, which may lead to complex, challenging, and sometimes ad hoc
type systems. Such examples are the extension of System F with type
equalities to model GADTs and type families of Haskell, or the
extension of System F with explicit contracts. A useful technique to
simplify the meta-theoretical studies of such systems is to make type
conversions explicit as “coercions” inside terms.</p>
        <p>Following a general approach to coercions, we extended System F with a
richer type-level language and a proposition language. Propositions
contain a first-order logic, a coinduction mechanism, coherence
assertions and coercion assertions. Types are classified by kinds and
extended in order to handle lists of types. We introduce a particular
kind restricting a previous kind to its types satisfying a
proposition. Abstracting over such a kind means abstracting over
arbitrary propositions, and thus enables coercion abstraction. Type
abstraction must be coherent: the kind of the abstract type has to be
inhabited by a witness type. This language, called Fcc, extends our
previous language parametric F-iota and additionally subsumes
Constraint ML.</p>
        <p>We also extended Fcc with incoherent polymorphism in order to model
GADTs. Unlike coercions and thus coherent polymorphism, incoherent
polymorphism is not erasable. But in counterpart, incoherent
abstraction does not require the kind to be inhabited. Since abstracting
over incoherent types permits to write unsound terms, incoherent
abstraction has to block the reduction of terms.</p>
        <p>This work is part of Julien Cretin's <ref xlink:href="http://phd.ia0.fr/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Ph.D.
dissertation</ref> <ref xlink:href="#gallium-2013-bid21" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, which will be defended in
January 2014.</p>
      </subsection>
      <subsection id="uid47" level="2">
        <bodyTitle>Type inference for GADTs</bodyTitle>
        <participants>
          <person key="PASUSERID">
            <firstname>Jacques</firstname>
            <lastname>Garrigue</lastname>
            <moreinfo>Nagoya University</moreinfo>
          </person>
          <person key="cristal-2005-id18098">
            <firstname>Didier</firstname>
            <lastname>Rémy</lastname>
          </person>
        </participants>
        <p>Type inference for generalized algebraic data types (GADTs) is
inherently non monotone: assuming more specific types for GADTs may
ensure more invariants, which may result in more general types. This
is problematic for type inference and some amount of type annotations
is required.</p>
        <p>Moreover, even when types of GADTs parameters are explicitly given, they
introduce equalities between types, which makes them inter-convertible but
with a limited scope. This may create an ambiguity when leaving the scope of
the equation: which element should be used for representing the equivalent
forms? Idealy, one should use a type disjunction, but this is not
allowed—for good reasons. Hence, to avoid arbitrary choices, these
situations must be rejected as ambiguous, forcing the user to write more
annotations to resolve the ambiguities.</p>
        <p>We proposed a new approach to type inference with GADTs. While some uses of
equations are unavoidable and create <i>real</i> ambiguities, others are
gratuitous and create <i>artificial</i> ambiguities, To distinguish between
the two we introduced <i>ambivalent types</i>, which are a way to trace
unavoidable uses of equations within types themselves. We then redefined
ambiguities so that only ambivalent types become ambiguous and should be
rejected or resolved by a programmer annotation.
Interestingly, this solution is fully compatible with unification-based type
inference algorithms used in ML dialects.</p>
        <p>This work was presented at the APLAS 2013
conference <ref xlink:href="#gallium-2013-bid22" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.
It is also implemented in the OCaml language since version 4.00.</p>
      </subsection>
      <subsection id="uid48" level="2">
        <bodyTitle>GADTs and Subtyping</bodyTitle>
        <participants>
          <person key="gallium-2010-id59852">
            <firstname>Gabriel</firstname>
            <lastname>Scherer</lastname>
          </person>
          <person key="cristal-2005-id18098">
            <firstname>Didier</firstname>
            <lastname>Rémy</lastname>
          </person>
        </participants>
        <p>Following the addition of GADTs to the OCaml language in version 4.00
released this year, we studied the theoretical underpinnings of
variance subtyping for GADTs. The question is to decide which
variances should be accepted for a GADT-style type declaration that
includes type equality constraints in constructor types. This question
exposes a new notion of decomposability and unexpected tensions in
the design of a subtyping relation. A paper describing our
formalization was presented at the ESOP 2013
conference <ref xlink:href="#gallium-2013-bid23" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
      <subsection id="uid49" level="2">
        <bodyTitle>Singleton types for code inference</bodyTitle>
        <participants>
          <person key="gallium-2010-id59852">
            <firstname>Gabriel</firstname>
            <lastname>Scherer</lastname>
          </person>
          <person key="cristal-2005-id18098">
            <firstname>Didier</firstname>
            <lastname>Rémy</lastname>
          </person>
        </participants>
        <p>We continued working on the use of singleton types for code
inference. If we can prove that a type contains, in a suitably
restricted pure lambda-calculus, a unique inhabitant modulo program
equivalence, the compiler can infer the code of this inhabitant. This
opens the way to type-directed description of boilerplate code,
through type inference of finer-grained type annotations. As this is
still work in progress, there was no publication on this topic this
year, but we presented our directions on three occasions: at the PLUME
team in ENS Lyon, at the LIX team in École Polytechnique (whose
proof-search research is highly relevant to our work), and at the
Dependently Typed Programming workshop (satellite of the International
Conference on Functional Programming) in Boston.</p>
      </subsection>
      <subsection id="uid50" level="2">
        <bodyTitle>Open closure types</bodyTitle>
        <participants>
          <person key="gallium-2010-id59852">
            <firstname>Gabriel</firstname>
            <lastname>Scherer</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Jan</firstname>
            <lastname>Hoffmann</lastname>
            <moreinfo>Yale University, FLINT group</moreinfo>
          </person>
        </participants>
        <p>During a visit to Yale, Gabriel Scherer worked with Jan Hoffmann on
a type system for program analysis of higher-order functional
languages. Open closure types are a novel typing construct that lets
the type system statically reason about closure variables present in
the lexical context. This allows fine-grained analysis (e.g., for
resource consumption or information-flow control) of functional
programming patterns such as function currying. This work was
presented at the LPAR 2013 conference <ref xlink:href="#gallium-2013-bid24" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>
(Logic for Programming, Artificial Intelligence, and Reasoning) in
October.</p>
      </subsection>
    </subsection>
    <subsection id="uid51" level="1">
      <bodyTitle>Shared-memory parallelism</bodyTitle>
      <subsection id="uid52" level="2">
        <bodyTitle>Algorithms and data structures for parallel computing</bodyTitle>
        <participants>
          <person key="gallium-2013-idp140397635214976">
            <firstname>Umut</firstname>
            <lastname>Acar</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Arthur</firstname>
            <lastname>Charguéraud</lastname>
            <moreinfo>EPI Toccata</moreinfo>
          </person>
          <person key="gallium-2013-idp140397635226880">
            <firstname>Mike</firstname>
            <lastname>Rainey</lastname>
          </person>
        </participants>
        <p>The ERC Deepsea project, with principal investigator Umut Acar, started in
June and is hosted by the Gallium team. This project aims at
developing techniques for parallel and self-adjusting computations in
the context of shared-memory multiprocessors (i.e., multicore
platforms). The project is continuing work that began at Max Planck
Institute for Software Systems in the previous three years. As part of
this project, we are developing a C++ library, called PASL, for
programming parallel computations at a high level of abstraction. We
use this library to evaluate new algorithms and data structures. We
have recently been pursuing two main lines of work.</p>
        <p>We have been developing an algorithm that is able to perform dynamic
load balancing in the style of work stealing but without requiring
atomic read-modify-write operations. These operations may scale poorly
with the number of cores due to synchronization bottlenecks. We have
designed the algorithm, proved it correct using a new technique for
the x86-TSO weak memory model. We have evaluated our algorithm on a
modern multicore machine. Although we use no synchronization
operations, we achieve performance that is no more than a few percent
slower than the industrial-strengh algorithm, even though the
industrial-strength algorithm takes full advantage of synchronization
operations. We have a soon-to-be-submitted research article describing
our contributions <ref xlink:href="#gallium-2013-bid25" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        <p>The design of efficient parallel graph algorithms requires a sequence
data structure that supports logarithmic-time split and concatenation
operations in addition to push and pop operations with excellent
constant factors. We have designed such a data structure by building
on a recently introduced data structure called Finger Tree and by
integrating a “chunking” technique. Our chunking technique is based on
instantiating the leaves of the Finger Tree with chunks of contiguous
memory. Unlike previous chunked data structures, we are able to prove
efficient constant factors even in worst-case scenarios. Moreover, we
implemented our data structure in C++ and OCaml and showed it to be
competitive with state-of-the-art sequence data structures that do not
support split and concatenation operations. We are currently writing a
report on our results.</p>
      </subsection>
      <subsection id="uid53" level="2">
        <bodyTitle>Weak memory models</bodyTitle>
        <participants>
          <person key="moscova-2005-id18098">
            <firstname>Luc</firstname>
            <lastname>Maranget</lastname>
          </person>
          <person key="gallium-2013-idp140397635266896">
            <firstname>Jacques-Pascal</firstname>
            <lastname>Deplaix</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Jade</firstname>
            <lastname>Alglave</lastname>
            <moreinfo>University College London</moreinfo>
          </person>
        </participants>
        <p>Modern multicore and multiprocessor computers do not follow the intuitive
“Sequential Consistency” model that would define a concurrent execution
as the interleaving of the execution of its constituting threads and that
would command instantaneous writes to the shared memory.
This situation is due both to in-core optimisations such as speculative
and out-of-order execution of instruction and to the presence of
sophisticated (and cooperating) caching devices between processors and
memory.</p>
        <p>In the last few years, Luc Maranget took part in an international
research effort to define the semantics of the computers of the
multi-core era. This research effort relies both on formal methods
for defining the models and on intensive experiments for validating
the models. Joint work with, amongst others, Jade Alglave
(now at University College London) and Peter Sewell
(University of Cambridge) achieved several significant results, including
two semantics for the IBM Power and ARM memory models: one of the operational
kind  <ref xlink:href="#gallium-2013-bid26" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> and the other of the axiomatic
kind  <ref xlink:href="#gallium-2013-bid27" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. In particular, Luc Maranget is the main
developer of the <b>diy</b> tool suite (see section <ref xlink:href="#uid29" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>). Luc
Maranget also performs most of the experiments involved.</p>
        <p>In 2013, Luc Maranget pursued this collaboration. He mainly worked with
Jade Alglave to produce a new model for Power/ARM. The new model is
simpler than the previous ones, in the sense that it is based
on fewer mathematical objects and
can be simulated more efficiently than the previous
models. The new model is at the core of a journal submission which
is now at the second stage of reviewing.
The submitted work contains in-depth testing of ARM devices which led
to the discovery of anomalous behaviours acknowledged as such by our
ARM contact, and of legitimate features now included in the model.
The new model also impacted our <b>diy</b> tool suite that now includes
a generic memory model simulator built by following the principles exposed
in the submitted article.
At the moment the new simulator is available as
an experimental release (<ref xlink:href="http://diy.inria.fr/herd" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>diy.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>herd</ref>).
It will be include in future releases of the tool suite.</p>
        <p>In the same research theme, Luc Maranget supervises the internship of
Jacques-Pascal Deplaix (EPITECH), from Oct. 2013 to May 2014. The
internship aims at extending <b>litmus</b>, our tool to to run tests on
hardware: at the moment <b>litmus</b> accepts test written in
assembler; Jacques-Pascal is extending <b>litmus</b> so that it accepts
tests written in C. The general objective is to achieve conformance
testing of C compilers and machines with respect to the new C11/C++11
standard.</p>
      </subsection>
    </subsection>
    <subsection id="uid54" level="1">
      <bodyTitle>The OCaml language and system</bodyTitle>
      <subsection id="uid55" level="2">
        <bodyTitle>The OCaml system</bodyTitle>
        <participants>
          <person key="cristal-2005-id18151">
            <firstname>Damien</firstname>
            <lastname>Doligez</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Alain</firstname>
            <lastname>Frisch</lastname>
            <moreinfo>Lexifi SAS</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Jacques</firstname>
            <lastname>Garrigue</lastname>
            <moreinfo>University of Nagoya</moreinfo>
          </person>
          <person key="comete-2005-id18114">
            <firstname>Fabrice</firstname>
            <lastname>Le Fessant</lastname>
          </person>
          <person key="cristal-2005-id18078">
            <firstname>Xavier</firstname>
            <lastname>Leroy</lastname>
          </person>
          <person key="gallium-2010-id59852">
            <firstname>Gabriel</firstname>
            <lastname>Scherer</lastname>
          </person>
        </participants>
        <p>This year, we released version 4.01.0 of the OCaml system.
This is a major release that fixes about
140 bugs and introduces 44 new features suggested by users.
Damien Doligez acted as release manager for this version.</p>
        <p>The major innovations in OCaml 4.01 are:</p>
        <simplelist>
          <li id="uid56">
            <p noindent="true">The overloading of variant constructors and record field labels,
resolved using typing information. Before this, programmers had to use
globally unique field labels across all record types. The new
typechecking algorithm enables programmers to use more natural names
for fields in their data structures. The algorithm is carefully
engineered to preserve principality of inferred types.</p>
          </li>
          <li id="uid57">
            <p noindent="true">New warnings give the programmer the option of applying very
strict checking of problematic constructs in the source code.</p>
          </li>
        </simplelist>
        <p>Other features of this release include:</p>
        <simplelist>
          <li id="uid58">
            <p noindent="true">Suggestion of possible typos in case of “unbound identifier” error.</p>
          </li>
          <li id="uid59">
            <p noindent="true">New infix application operators in the standard library.</p>
          </li>
          <li id="uid60">
            <p noindent="true">Options to reduce the verbosity (and enhance the readability) of
error messages.</p>
          </li>
          <li id="uid61">
            <p noindent="true">Many internal improvements, especially in compiler performance.</p>
          </li>
        </simplelist>
        <p>In parallel, we designed and experimented with several new features
that are candidate for inclusion in the next major release of OCaml in
2014:</p>
        <simplelist>
          <li id="uid62">
            <p noindent="true">Module aliases: a more efficient way of
typechecking and compiling module declarations of the form
<tt>module M = ModuleName</tt>, providing a lighter, more practical
alternative to packed modules and reducing the need for name spaces.</p>
          </li>
          <li id="uid63">
            <p noindent="true">Extension points and preprocessing by rewriting abstract syntax
trees: this approach provides an alternative to
Camlp4 for macro processing and automatic code generation.</p>
          </li>
          <li id="uid64">
            <p noindent="true">A native code generator for the new ARM 64 bit instruction set
(also known as AArch64).</p>
          </li>
          <li id="uid65">
            <p noindent="true">Several ongoing experiments to improve the performance of
OCaml-compiled code: more aggressive function inlining and constant
propagation; more unboxing of numbers; and a pass of common
subexpression elimination.</p>
          </li>
        </simplelist>
      </subsection>
      <subsection id="uid66" level="2">
        <bodyTitle>Run-time types for the OCaml language</bodyTitle>
        <participants>
          <person key="cristal-2005-id18425">
            <firstname>Grégoire</firstname>
            <lastname>Henry</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Jacques</firstname>
            <lastname>Garrigue</lastname>
            <moreinfo>University of Nagoya</moreinfo>
          </person>
          <person key="comete-2005-id18114">
            <firstname>Fabrice</firstname>
            <lastname>Le Fessant</lastname>
          </person>
        </participants>
        <p>With the addition of GADTs to OCaml in version 4.00, it is now
possible to provide a clean implementation of run-time types in the
language, thus allowing the definition of polytypic function, a.k.a.
generic function defined by case analysis on the structure of its
argument's type. However, when integrating this mechanism into the
language, its interaction with other parts of the type-system proved
delicate, the main difficulty being the semantic of abstract
types.</p>
        <p>In collaboration with Jacques Garrigue during a 3 month stay in Japan,
Grégoire Henry worked on different semantics for the runtime
representation of abstract types. They tried to design a mechanism
that preserves abstraction by default, and still allows to
propagate type information when requested by the programmer.</p>
      </subsection>
      <subsection id="uid67" level="2">
        <bodyTitle>Multi-runtime OCaml</bodyTitle>
        <participants>
          <person key="gallium-2013-idp140397635252800">
            <firstname>Luca</firstname>
            <lastname>Saiu</lastname>
          </person>
          <person key="comete-2005-id18114">
            <firstname>Fabrice</firstname>
            <lastname>Le Fessant</lastname>
          </person>
        </participants>
        <p>Multicore architectures are now broadly available, and developers
expect their programs to be able to benefit from them. In OCaml, there
is no portable way to use such architectures, as only one OCaml thread
can run at any time.</p>
        <p>As part of the ANR project “BWare”, Luca Saiu and Fabrice Le Fessant
developed a multi-runtime version of OCaml that takes advantage of
multicore architectures. In this version, a program can start several
runtimes that can run on different cores. As a consequence, OCaml
threads running on different runtimes can run concurrently. This
implementation required a lot of rewriting of the OCaml runtime system
(written in C), to make all global variables context-dependent and
all functions reentrant. The compiler was also
modified to generate reentrant code and context-dependent variables.
The sources of the prototype were released in September 2013, to be
tested by users.</p>
        <p>Luca Saiu then developed a library based on skeletons to facilitate
the development of parallel applications that take advantage of the
multi-runtime architecture.</p>
      </subsection>
      <subsection id="uid68" level="2">
        <bodyTitle>Evaluation strategies and standardization</bodyTitle>
        <participants>
          <person key="gallium-2012-idp140283908771312">
            <firstname>Thibaut</firstname>
            <lastname>Balabonski</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Flávio</firstname>
            <lastname>de Moura</lastname>
            <moreinfo>Universidade de Brasília</moreinfo>
          </person>
        </participants>
        <p>During the past years, Thibaut Balabonski studied evaluation
strategies, laziness and optimality for functional programming
languages, in particular in relation to pattern matching.
These investigations continued this year, with two highlights:</p>
        <simplelist>
          <li id="uid69">
            <p noindent="true">Publication in the ICFP conference <ref xlink:href="#gallium-2013-bid28" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> of a
theoretical result relating fully lazy evaluation (as can be found in
some Haskell compilers) to optimal reduction in the weak <formula type="inline"><math xmlns="http://www.w3.org/1998/Math/MathML" overflow="scroll"><mi>λ</mi></math></formula>-calculus.</p>
          </li>
          <li id="uid70">
            <p noindent="true">Collaboration with Flávio de Moura (Universidade de Brasília) on
so-called “standard” evaluation strategies for a calculus with rich
pattern matching mechanisms (the <i>Pure Pattern Calculus</i> of Jay and
Kesner  <ref xlink:href="#gallium-2013-bid29" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>).
The challenge here lies in that the calculus does not satisfies the usual
stability properties. As a consequences, standard strategies are not unique
anymore, and new approaches are needed. A paper is in preparation.</p>
          </li>
        </simplelist>
      </subsection>
    </subsection>
    <subsection id="uid71" level="1">
      <bodyTitle>Software specification and verification</bodyTitle>
      <subsection id="uid72" level="2">
        <bodyTitle>Tools for TLA+</bodyTitle>
        <participants>
          <person key="cristal-2005-id18151">
            <firstname>Damien</firstname>
            <lastname>Doligez</lastname>
          </person>
          <person key="gallium-2013-idp140397635248128">
            <firstname>Jael</firstname>
            <lastname>Kriener</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>Leslie</firstname>
            <lastname>Lamport</lastname>
            <moreinfo>Microsoft Research</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Stephan</firstname>
            <lastname>Merz</lastname>
            <moreinfo>EPI VeriDis</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Tomer</firstname>
            <lastname>Libal</lastname>
            <moreinfo>Microsoft Research-Inria Joint Centre</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Hernán</firstname>
            <lastname>Vanzetto</lastname>
            <moreinfo>Microsoft Research-Inria Joint Centre</moreinfo>
          </person>
        </participants>
        <p>Damien Doligez is head of the “Tools for Proofs” team in the
Microsoft-Inria Joint Centre. The aim of this team is to
extend the TLA+ language with a formal language for hierarchical
proofs, formalizing the ideas in  <ref xlink:href="#gallium-2013-bid30" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, and to
build tools for writing TLA+ specifications and mechanically
checking the corresponding formal proofs.</p>
        <p>This year, the TLA+ tools were released as open-source (MIT license),
and in September we released a new version of the TLA+ Proof System
(TLAPS), an environment for writing and checking TLA+ proofs. This
environment is described in  <ref xlink:href="#gallium-2013-bid31" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
        <p>We have implemented a (not yet released) extension of TLAPS to deal
with proofs of temporal formulas, using the propositional temporal
logic prover LS4 as a back-end. Until now, TLAPS could only
be used to prove safety properties (invariants). With this new
version, our users will be able to prove liveness properties (absence
of deadlock), refinement relations between specifications, etc.</p>
        <p>Jael Kriener started a 2-year post-doc contract in December. She is
working on theoretical and implementation aspects of TLA+ and TLAPS.</p>
        <p>Web sites:</p>
        <p noindent="true">
          <ref xlink:href="http://research.microsoft.com/users/lamport/tla/tla.html" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>research.<allowbreak/>microsoft.<allowbreak/>com/<allowbreak/>users/<allowbreak/>lamport/<allowbreak/>tla/<allowbreak/>tla.<allowbreak/>html</ref>
        </p>
        <p noindent="true">
          <ref xlink:href="http://tla.msr-inria.inria.fr/tlaps" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>tla.<allowbreak/>msr-inria.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>tlaps</ref>
        </p>
      </subsection>
      <subsection id="uid73" level="2">
        <bodyTitle>The Zenon automatic theorem prover</bodyTitle>
        <participants>
          <person key="cristal-2005-id18151">
            <firstname>Damien</firstname>
            <lastname>Doligez</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>David</firstname>
            <lastname>Delahaye</lastname>
            <moreinfo>CNAM</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Pierre</firstname>
            <lastname>Halmagrand</lastname>
            <moreinfo>CNAM</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Olivier</firstname>
            <lastname>Hermant</lastname>
            <moreinfo>Mines ParisTech</moreinfo>
          </person>
          <person key="PASUSERID">
            <firstname>Mélanie</firstname>
            <lastname>Jacquel</lastname>
            <moreinfo>CNAM</moreinfo>
          </person>
        </participants>
        <p>Damien Doligez continued the development of Zenon, a tableau-based
prover for first-order logic with equality and theory-specific
extensions.</p>
        <p>David Delahaye and Mélanie Jacquel designed and implemented (with some
help from Damien Doligez) an extension of Zenon called SuperZenon,
based on the Superdeduction framework of Brauner, Houtmann, and
Kirchner  <ref xlink:href="#gallium-2013-bid32" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>. Mélanie Jacquel defended
her thesis on this subject in April.</p>
        <p>Pierre Halmagrand did an internship and started a thesis on
integrating Deduction Modulo in Zenon; some results of this
work are described in two papers published at
LPAR <ref xlink:href="#gallium-2013-bid33" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/> and IWIL <ref xlink:href="#gallium-2013-bid34" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>.</p>
      </subsection>
      <subsection id="uid74" level="2">
        <bodyTitle>Implementing hash-consed structures in Coq</bodyTitle>
        <participants>
          <person key="moscova-2008-id18320">
            <firstname>Thomas</firstname>
            <lastname>Braibant</lastname>
          </person>
          <person key="asap-2009-id60299">
            <firstname>Jacques-Henri</firstname>
            <lastname>Jourdan</lastname>
          </person>
          <person key="PASUSERID">
            <firstname>David</firstname>
            <lastname>Monniaux</lastname>
            <moreinfo>CNRS, VERIMAG</moreinfo>
          </person>
        </participants>
        <p>Hash-consing is a programming technique used to implement maximal
sharing of immutable values in memory, keeping a single copy of
semantically equivalent objects.
Hash-consed data-structures give a unique identifier to each object,
allowing fast hashing and comparisons of objects. This may lead to
major improvements in execution time by itself, but it also make it
possible to do efficient memoization of computations.</p>
        <p>Hash-consing and memoization are examples of imperative techniques
that are of prime importance for performance, but are not easy to
implement and prove correct using the purely functional language of a
proof assistant such as Coq.
In a joint article at ITP 2013 <ref xlink:href="#gallium-2013-bid35" location="biblio" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>, we
described three different implementation techniques for hash-consed
data-structures in Coq through the running example of Binary Decision
Diagrams (BDDs). BDDs are representations of Boolean functions, and
are often used in software and hardware verification tools (e.g.,
model checkers).</p>
        <p>We substantially improved the work described in this ITP 2013 article
afterwards. First, we came up with a fourth implementation technique
for hash-consed data-structures in Coq. Then, we performed an in-depth
comparative study of how our “design patterns” for certified
hash-consing fare on two real-scale examples: BDDs and
lambda-terms. This work is currently under revision for publication in
a journal.</p>
      </subsection>
      <subsection id="uid75" level="2">
        <bodyTitle>Working with names and binders</bodyTitle>
        <participants>
          <person key="cristal-2005-id18210">
            <firstname>François</firstname>
            <lastname>Pottier</lastname>
          </person>
        </participants>
        <p>François Pottier released <b>dblib</b>, a Coq library that helps work
with de Bruijn indices in a generic and lightweight manner. This
library is used in the formalization of Mezzo (see section <ref xlink:href="#uid40" location="intern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>).
It is available at <ref xlink:href="http://gallium.inria.fr/~fpottier/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>gallium.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>~fpottier/</ref>.</p>
      </subsection>
    </subsection>
    <subsection id="uid76" level="1">
      <bodyTitle>Technology transfer</bodyTitle>
      <subsection id="uid77" level="2">
        <bodyTitle>Analysis of the Scilab Language</bodyTitle>
        <participants>
          <person key="comete-2005-id18114">
            <firstname>Fabrice</firstname>
            <lastname>Le Fessant</lastname>
          </person>
          <person key="gallium-2013-idp140397635255168">
            <firstname>Michael</firstname>
            <lastname>Laporte</lastname>
          </person>
        </participants>
        <p>The Scilab language is a scripting language providing easy access to
efficient implementations of mathematical operations (on matrices, for
example). It suffers from the lack of verifications of an untyped
language, together with the performance problems of an interpreted
language. As part of the FUI Richelieu project, Fabrice Le Fessant
and Michael Laporte have been investigating solutions to these
issues.</p>
        <p>The first part of the work was to clarify the semantics of the
Scilab language. For that, an interpreter was implemented in
OCaml, based on the C++ AST provided by the forthcoming version 6 of
Scilab. This work exhibited a number of bugs in the new
implementation, and proved to be more performant than the C++
implementation, thanks to a better algorithm to manage the dynamic
scopes of Scilab.</p>
        <p>The second part of the work was to understand how users write Scilab
code. For that, a style-checking application, called <i>Scilint</i>,
has been developed. It implements static checking of some properties
of Scilab programs, to be able to detect runtime errors before running
the program. Warnings are displayed for suspicious cases. Using
Scilint on large sets of Scilab code (from the Scilab forge or the
Atom repository) showed that the most erroneous features of Scilab
are commonly used and that, to achieve the ultimate goal of partial
typing of the language, a subset of the language must be specified that
the user should conform to, in order for the code to benefit from the
next part of the work, i.e. just-in-time compilation.</p>
      </subsection>
    </subsection>
  </resultats>
  <contrats id="uid78">
    <bodyTitle>Bilateral Contracts and Grants with Industry</bodyTitle>
    <subsection id="uid79" level="1">
      <bodyTitle>Bilateral Contracts with Industry</bodyTitle>
      <subsection id="uid80" level="2">
        <bodyTitle>The Caml Consortium</bodyTitle>
        <participants>
          <person key="cristal-2005-id18078">
            <firstname>Xavier</firstname>
            <lastname>Leroy</lastname>
            <moreinfo>correspondant</moreinfo>
          </person>
          <person key="cristal-2005-id18151">
            <firstname>Damien</firstname>
            <lastname>Doligez</lastname>
          </person>
          <person key="cristal-2005-id18098">
            <firstname>Didier</firstname>
            <lastname>Rémy</lastname>
          </person>
        </participants>
        <p>The Caml Consortium is a formal structure where industrial and
academic users of Caml can support the development of the language and
associated tools, express their specific needs, and contribute to the
long-term stability of Caml. Membership fees are used to fund
specific developments targeted towards industrial users. Members of
the Consortium automatically benefit from very liberal licensing
conditions on the OCaml system, allowing for instance the OCaml
compiler to be embedded within proprietary applications.</p>
        <p>The Consortium currently has 11 member companies:</p>
        <simplelist>
          <li id="uid81">
            <p noindent="true">CEA</p>
          </li>
          <li id="uid82">
            <p noindent="true">Citrix</p>
          </li>
          <li id="uid83">
            <p noindent="true">Dassault Aviation</p>
          </li>
          <li id="uid84">
            <p noindent="true">Dassault Systèmes</p>
          </li>
          <li id="uid85">
            <p noindent="true">Esterel Technologies</p>
          </li>
          <li id="uid86">
            <p noindent="true">Jane Street</p>
          </li>
          <li id="uid87">
            <p noindent="true">LexiFi</p>
          </li>
          <li id="uid88">
            <p noindent="true">Microsoft</p>
          </li>
          <li id="uid89">
            <p noindent="true">Mylife.com</p>
          </li>
          <li id="uid90">
            <p noindent="true">OCamlPro</p>
          </li>
          <li id="uid91">
            <p noindent="true">SimCorp</p>
          </li>
        </simplelist>
        <p>For a complete description of this
structure, refer to <ref xlink:href="http://caml.inria.fr/consortium/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>caml.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>consortium/</ref>.
Xavier Leroy chairs the scientific committee of the Consortium.</p>
      </subsection>
      <subsection id="uid92" level="2">
        <bodyTitle>OCamlPro</bodyTitle>
        <participants>
          <person key="comete-2005-id18114">
            <firstname>Fabrice</firstname>
            <lastname>Le Fessant</lastname>
          </person>
        </participants>
        <p>Fabrice Le Fessant is consulting for OCamlPro, a SME that provides
services and tools to companies wanting to use OCaml as their
development language.</p>
      </subsection>
    </subsection>
  </contrats>
  <partenariat id="uid93">
    <bodyTitle>Partnerships and Cooperations</bodyTitle>
    <subsection id="uid94" level="1">
      <bodyTitle>National Initiatives</bodyTitle>
      <subsection id="uid95" level="2">
        <bodyTitle>ANR projects</bodyTitle>
        <subsection id="uid96" level="3">
          <bodyTitle>BWare</bodyTitle>
          <participants>
            <person key="cristal-2005-id18151">
              <firstname>Damien</firstname>
              <lastname>Doligez</lastname>
            </person>
            <person key="comete-2005-id18114">
              <firstname>Fabrice</firstname>
              <lastname>Le Fessant</lastname>
            </person>
            <person key="gallium-2013-idp140397635252800">
              <firstname>Luca</firstname>
              <lastname>Saiu</lastname>
            </person>
          </participants>
          <p>The “BWare” project (2012-2016) is coordinated by David Delahaye at
Conservatoire National des Arts et Métiers and funded by the <i>Ingénierie Numérique et Sécurité</i> programme of <i>Agence Nationale de
la Recherche</i>. BWare is an industrial research project that aims to
provide a mechanized framework to support the automated verification
of proof obligations coming from the development of industrial
applications using the B method and requiring high guarantees of
confidence.</p>
        </subsection>
        <subsection id="uid97" level="3">
          <bodyTitle>Paral-ITP</bodyTitle>
          <participants>
            <person key="cristal-2005-id18151">
              <firstname>Damien</firstname>
              <lastname>Doligez</lastname>
            </person>
          </participants>
          <p>The “Paral-ITP” project (2011-2014) is coordinated by Burkhart Wolff
at Université Paris Sud and funded by the <i>Ingénierie Numérique
et Sécurité</i> programme of <i>Agence Nationale de la
Recherche</i>. The objective of Paral-ITP is to investigate the
parallelization of interactive theorem provers such as Coq and
Isabelle.</p>
        </subsection>
        <subsection id="uid98" level="3">
          <bodyTitle>Verasco</bodyTitle>
          <participants>
            <person key="asap-2009-id60299">
              <firstname>Jacques-Henri</firstname>
              <lastname>Jourdan</lastname>
            </person>
            <person key="cristal-2005-id18078">
              <firstname>Xavier</firstname>
              <lastname>Leroy</lastname>
            </person>
          </participants>
          <p>The “Verasco” project (2012-2015) is coordinated by Xavier Leroy and
funded by the <i>Ingéniérie Numérique et Sécurité</i> programme of <i>Agence Nationale de la Recherche</i>. The objective of this 4-year
project is to develop and formally verify a static analyzer based on
abstract interpretation, and interface it with the CompCert C verified
compiler.</p>
        </subsection>
      </subsection>
      <subsection id="uid99" level="2">
        <bodyTitle>FSN BGLE projects</bodyTitle>
        <subsection id="uid100" level="3">
          <bodyTitle>ADN4SE</bodyTitle>
          <participants>
            <person key="cristal-2005-id18151">
              <firstname>Damien</firstname>
              <lastname>Doligez</lastname>
            </person>
            <person key="gallium-2013-idp140397635248128">
              <firstname>Jael</firstname>
              <lastname>Kriener</lastname>
            </person>
          </participants>
          <p>The “ADN4SE” project (2012-2016) is coordinated by the Sherpa
Engineering company and funded by the <i>Briques Génériques du
Logiciel Embarqué</i> programme of <i>Fonds national pour la
Société Numérique</i>. The aim of this project is to develop a process and a
set of tools to support the rapid development of embedded software
with strong safety constraints.
Gallium is involved in this project to provide tools and help for the
formal verification in TLA+ of some important aspects of the PharOS
real-time kernel, on which the whole project is based.</p>
        </subsection>
        <subsection id="uid101" level="3">
          <bodyTitle>CEEC</bodyTitle>
          <participants>
            <person key="moscova-2008-id18320">
              <firstname>Thomas</firstname>
              <lastname>Braibant</lastname>
            </person>
            <person key="cristal-2005-id18078">
              <firstname>Xavier</firstname>
              <lastname>Leroy</lastname>
            </person>
          </participants>
          <p>The “CEEC” project (2011-2014) is coordinated by the Prove &amp; Run
company and also involves Esterel Technologies and Trusted Labs. It
is funded by the <i>Briques Génériques du
Logiciel Embarqué</i> programme of <i>Fonds national pour la
Société Numérique</i>. The CEEC project develops an environment for the
development and certification of high-security software, centered on a
new domain-specific language designed by Prove &amp; Run. Our involvement
in this project focuses on the formal verification of a C code
generator for this domain-specific language, and its interface with
the CompCert C verified compiler.</p>
        </subsection>
      </subsection>
      <subsection id="uid102" level="2">
        <bodyTitle>FUI projects</bodyTitle>
        <subsection id="uid103" level="3">
          <bodyTitle>Richelieu (FUI)</bodyTitle>
          <participants>
            <person key="gallium-2013-idp140397635255168">
              <firstname>Michael</firstname>
              <lastname>Laporte</lastname>
            </person>
            <person key="comete-2005-id18114">
              <firstname>Fabrice</firstname>
              <lastname>Le Fessant</lastname>
            </person>
          </participants>
          <p>The “Richelieu” project (2012-2014) is funded by the <i>Fonds
unique interministériel</i> (FUI). It involves Scilab Enterprises,
U. Pierre et Marie Curie, Dassault Aviation, ArcelorMittal, CNES,
Silkan, OCamlPro, and Inria. The objective of the project is to
improve the performance of scientific programming languages such as
Scilab's through the use of VMKit and LLVM.</p>
        </subsection>
      </subsection>
    </subsection>
    <subsection id="uid104" level="1">
      <bodyTitle>European Initiatives</bodyTitle>
      <subsection id="uid105" level="2">
        <bodyTitle>FP7 Projects</bodyTitle>
        <subsection id="uid106" level="3">
          <bodyTitle>DEEPSEA</bodyTitle>
          <sanspuceslist>
            <li id="uid107">
              <p noindent="true">Type: IDEAS</p>
            </li>
            <li id="uid108">
              <p noindent="true">Instrument: ERC Starting Grant</p>
            </li>
            <li id="uid109">
              <p noindent="true">Duration: June 2013 - May 2018</p>
            </li>
            <li id="uid110">
              <p noindent="true">Coordinator: Umut Acar</p>
            </li>
            <li id="uid111">
              <p noindent="true">Partner: Inria</p>
            </li>
            <li id="uid112">
              <p noindent="true">Inria contact: Umut Acar</p>
            </li>
            <li id="uid113">
              <p noindent="true">Abstract: the objective of project DEEPSEA is to develop
abstractions, algorithms and languages for parallelism and dynamic
parallelism, with applications to problems on large data sets.</p>
            </li>
          </sanspuceslist>
        </subsection>
      </subsection>
    </subsection>
    <subsection id="uid114" level="1">
      <bodyTitle>International Initiatives</bodyTitle>
      <subsection id="uid115" level="2">
        <bodyTitle>Inria International Labs</bodyTitle>
        <p>Fabrice Le Fessant visited CIRIC (Center of Excellence
on TIC, created by Inria in Chile) during two weeks. He gave several
lectures on OCaml: a presentation at StarTechConf'2013,
a presentation at University Adolfo Ibañez, and
a presentation and a lecture at University of Chile.</p>
      </subsection>
    </subsection>
    <subsection id="uid116" level="1">
      <bodyTitle>International Research Visitors</bodyTitle>
      <subsection id="uid117" level="2">
        <bodyTitle>Visits of International Scientists</bodyTitle>
        <p>Olin Shivers, professor at Northeastern University (Boston), visited
the Gallium team from July 2013 to December 2013. He worked on static
analysis and intermediate representations for functional programming
languages.</p>
        <subsection id="uid118" level="3">
          <bodyTitle>Internships</bodyTitle>
          <sanspuceslist>
            <li id="uid119">
              <person>
                <firstname>Robbert</firstname>
                <lastname>Krebbers</lastname>
              </person>
              <sanspuceslist>
                <li id="uid120">
                  <p noindent="true">Subject: formal semantics for the C language</p>
                </li>
                <li id="uid121">
                  <p noindent="true">Date: from Jan 2013 until Mar 2013</p>
                </li>
                <li id="uid122">
                  <p noindent="true">Institution: Radboud University (Netherlands)</p>
                </li>
              </sanspuceslist>
            </li>
          </sanspuceslist>
        </subsection>
      </subsection>
    </subsection>
  </partenariat>
  <diffusion id="uid123">
    <bodyTitle>Dissemination</bodyTitle>
    <subsection id="uid124" level="1">
      <bodyTitle>Scientific Animation</bodyTitle>
      <subsection id="uid125" level="2">
        <bodyTitle>Conference organization</bodyTitle>
        <p>Didier Rémy organized the October 2013 meeting of IFIP working group 2.8
“Functional programming”, which took place in Aussois, France.</p>
        <p>Thomas Braibant participated in the organization of the LOLA 2013
workshop, associated with LICS 2013.</p>
      </subsection>
      <subsection id="uid126" level="2">
        <bodyTitle>Editorial boards</bodyTitle>
        <p>Xavier Leroy is on the editorial board for the Research Highlights
column of Communications of the ACM. He is a member of the editorial
boards of Journal of Automated Reasoning, Journal of Functional
Programming, and Journal of Formalized Reasoning.</p>
      </subsection>
      <subsection id="uid127" level="2">
        <bodyTitle>Program committees</bodyTitle>
        <p>Xavier Leroy was a member of the program committee for VSTTE 2013, the
conference on Verified Software: Theory, Tools and Experiments.</p>
        <p>François Pottier was a member of the program committee for ESOP 2014,
the European Symposium On Programming.</p>
      </subsection>
      <subsection id="uid128" level="2">
        <bodyTitle>Steering committees</bodyTitle>
        <p>Xavier Leroy is a member of the steering committees for the Certified
Programming and Proofs (CPP) conference and the Programming
Languages meet Program Verification (PLPV) workshop.</p>
        <p>François Pottier is a member of the steering committee for the ACM
TLDI workshop.</p>
        <p>Didier Rémy is a member of the steering committee of the OCaml Workshop.</p>
      </subsection>
      <subsection id="uid129" level="2">
        <bodyTitle>Collective responsibilities</bodyTitle>
        <p>Damien Doligez chairs the <i>Commission des actions de développement
technologiques</i> of Inria Paris-Rocquencourt.</p>
        <p>Xavier Leroy is <i>vice-président du comité des projets</i> of Inria
Paris-Rocquencourt and appointed member of <i>Commission
d'Évaluation</i>. He participated in the following Inria hiring and
promotion committees: <i>jury d'admissibilité CR2
Paris-Rocquencourt</i> (vice-chair, with Philippe Robert as chair);
<i>jury d'admissibilité DR2</i>; <i>promotions CR1, DR1, DR0</i>.
He was a member of the hiring committee for a <i>Maître de
conférences</i> position at Université Rennes 1.</p>
        <p>Luc Maranget chairs the <i>Commission des utilisateurs des moyens
informatiques – Recherche</i> of Inria Paris-Rocquencourt.</p>
        <p>François Pottier is a member of the post-doctoral hiring committee of
Inria Paris-Rocquencourt. He was a member of the hiring committee for a
<i>Maître de conférences</i> position at Université Paris Diderot.</p>
        <p>Jonathan Protzenko curated the Junior Seminar of Inria
Paris-Rocquencourt until June 2013, which marked the end of his
two-year involvement in the seminar.</p>
        <p>Didier Rémy represents Inria in the <i>commission des études</i> of the
MPRI master, co-organized by U. Paris Diderot, ENS Cachan, ENS Paris,
and École Polytechnique.</p>
      </subsection>
    </subsection>
    <subsection id="uid130" level="1">
      <bodyTitle>Teaching - Supervision - Juries</bodyTitle>
      <subsection id="uid131" level="2">
        <bodyTitle>Teaching</bodyTitle>
        <sanspuceslist>
          <li id="uid132">
            <p noindent="true">Licence:
Thibaut Balabonski,
“Travaux dirigés de Caml Light”,
14 hours,
L1,
Collège Stanislas (classes préparatoires MPSI),
France.</p>
          </li>
          <li id="uid133">
            <p noindent="true">Licence:
Julien Cretin,
“Bases de données”,
26h,
L3,
U. Paris Diderot,
France.</p>
          </li>
          <li id="uid134">
            <p noindent="true">Licence:
Julien Cretin,
“Principe de fonctionnement des machines binaires”,
33h,
L1,
U. Paris Diderot,
France.</p>
          </li>
          <li id="uid135">
            <p noindent="true">Licence:
Jacques-Henri Jourdan,
“Langages de programmation et compilation”,
46h,
L3,
École Normale Supérieure,
France.</p>
          </li>
          <li id="uid136">
            <p noindent="true">Licence:
François Pottier,
“Algorithmique et programmation” (INF431),
13h30,
L3,
École Polytechnique,
France.</p>
          </li>
          <li id="uid137">
            <p noindent="true">Licence:
Gabriel Scherer,
“IF1: Introduction to computer science and programming”,
42h,
L1,
U. Paris Diderot,
France.</p>
          </li>
          <li id="uid138">
            <p noindent="true">Master:
Xavier Leroy and Didier Rémy,
“Functional programming and type systems”,
12h + 18h,
M2,
MPRI master,
France.</p>
          </li>
          <li id="uid139">
            <p noindent="true">Master:
Luc Maranget,
“Semantics, languages and algorithms for multicore programming”,
9h,
M2,
MPRI master,
France.</p>
          </li>
          <li id="uid140">
            <p noindent="true">Master:
François Pottier,
“Compilation” (INF564),
13h30,
M1,
École Polytechnique,
France.</p>
          </li>
          <li id="uid141">
            <p noindent="true">Master:
Jonathan Protzenko,
“Conception et mise en œuvre d'algorithmes” (MOOC),
32h,
M1,
Coursera / École Polytechnique,
France.</p>
          </li>
          <li id="uid142">
            <p noindent="true">Master:
Gabriel Scherer,
“Advanced Functional Programming”,
30h,
M1,
U. Paris Diderot,
France.</p>
          </li>
          <li id="uid143">
            <p noindent="true">Doctorat:
Xavier Leroy,
“Mechanized semantics”,
6h,
Verification Technology, Systems &amp; Applications summer school 2013,
Nancy, France.</p>
          </li>
        </sanspuceslist>
      </subsection>
      <subsection id="uid144" level="2">
        <bodyTitle>Supervision</bodyTitle>
        <sanspuceslist>
          <li id="uid145">
            <p noindent="true">PhD in progress:
Julien Cretin,
“Erasable coercions: a unified approach to type systems”,
École Polytechnique,
since December 2010,
supervised by Didier Rémy,
to be defended January 30th, 2014.</p>
          </li>
          <li id="uid146">
            <p noindent="true">PhD in progress:
Pierre Halmagrand,
“Déduction Automatique Modulo”,
CNAM,
since September 2013,
supervised by David Delahaye, Damien Doligez, and Olivier Hermant.</p>
          </li>
          <li id="uid147">
            <p noindent="true">PhD in progress:
Jonathan Protzenko,
“Fine-grained static control of side effects”,
U. Paris Diderot,
since September 2010,
supervised by François Pottier.</p>
          </li>
          <li id="uid148">
            <p noindent="true">PhD in progress:
Gabriel Scherer,
“Term inference”,
U. Paris Diderot,
since October 2011,
supervised by Didier Rémy.</p>
          </li>
          <li id="uid149">
            <p noindent="true">PhD in progress:
Jacques-Henri Jourdan,
“Formal verification of a static analyzer for critical embedded software”,
U. Paris Diderot,
since September 2012,
supervised by Xavier Leroy.</p>
          </li>
        </sanspuceslist>
      </subsection>
      <subsection id="uid150" level="2">
        <bodyTitle>Juries</bodyTitle>
        <p>Damien Doligez was a member of the Ph.D. jury of Mélanie Jacquel,
CNAM, Paris, april 2013.</p>
        <p>Xavier Leroy was a member of the Ph.D. jury of Xiaomu Shi, Université
Joseph Fourier, Grenoble, july 2013. Xavier Leroy was president of the
Ph.D. jury of Pierre-Nicolas Tollitte, CNAM, Paris, december 2013.</p>
      </subsection>
    </subsection>
    <subsection id="uid151" level="1">
      <bodyTitle>Popularization</bodyTitle>
      <p>Jacques-Henri Jourdan and Arthur Charguéraud participated in the
organization of the Castor computer science contest
(<ref xlink:href="http://castor-informatique.fr/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>castor-informatique.<allowbreak/>fr/</ref>). This contest aims at making
computer science more popular in French high schools and junior high
schools. It attracted over 170,000 participants.</p>
      <p>Fabrice Le Fessant is one of the organizers of the OCaml meetup in
Paris. Four events were organized in 2013, each featuring four short
presentations on topics related to OCaml. Each event was attended by
about 60 participants.</p>
      <p>Xavier Leroy gave a tutorial on using theorem provers in programming
language research at the 2013 ACM SIGPLAN Programming Languages
Mentoring Workshop, which was attended by about 80 undergraduate,
graduate and post-doctoral students.</p>
      <p>Since 2012, the Gallium team publishes a research blog at
<ref xlink:href="http://gallium.inria.fr/blog/" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>gallium.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>blog/</ref>, edited by Gabriel Scherer. This
blog continued its activity in 2013, with 26 posts by 12 different
authors. It covered various changes in the OCaml language, announced
small software libraries from members of the team, and discussed
Gallium's research, notably the Mezzo language.</p>
    </subsection>
  </diffusion>
  <biblio id="bibliography" html="bibliography" numero="10" titre="Bibliography">
    
    <biblStruct id="gallium-2013-bid45" type="inproceedings" rend="refer" n="refercite:2008-Chargueraud-Pottier-ICFP">
      <identifiant type="doi" value="10.1145/1411204.1411235"/>
      <analytic>
        <title level="a">Functional Translation of a Calculus of Capabilities</title>
        <author>
          <persName key="cristal-2005-id18395">
            <foreName>Arthur</foreName>
            <surname>Charguéraud</surname>
            <initial>A.</initial>
          </persName>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">Proceedings of the 13th International Conference on Functional Programming (ICFP'08)</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <month>September</month>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">213–224</biblScope>
          <ref xlink:href="http://doi.acm.org/10.1145/1411204.1411235" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>doi.<allowbreak/>acm.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1145/<allowbreak/>1411204.<allowbreak/>1411235</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid48" type="inproceedings" rend="refer" n="refercite:2010-Doligez-TLA+">
      <identifiant type="doi" value="10.1007/978-3-642-14203-1_12"/>
      <analytic>
        <title level="a">Verifying Safety Properties With the TLA+ Proof System</title>
        <author>
          <persName key="parsifal-2006-id18273">
            <foreName>Kaustuv</foreName>
            <surname>Chaudhuri</surname>
            <initial>K.</initial>
          </persName>
          <persName key="cristal-2005-id18151">
            <foreName>Damien</foreName>
            <surname>Doligez</surname>
            <initial>D.</initial>
          </persName>
          <persName>
            <foreName>Leslie</foreName>
            <surname>Lamport</surname>
            <initial>L.</initial>
          </persName>
          <persName key="mosel-2005-id18120">
            <foreName>Stephan</foreName>
            <surname>Merz</surname>
            <initial>S.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">Automated Reasoning, 5th International Joint Conference, IJCAR 2010</title>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">6173</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2010</year>
          </dateStruct>
          <biblScope type="pages">142–148</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1007/978-3-642-14203-1_12" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1007/<allowbreak/>978-3-642-14203-1_12</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid50" type="inproceedings" rend="refer" n="refercite:2012-Cretin-Remy">
      <identifiant type="doi" value="10.1145/2103656.2103699"/>
      <analytic>
        <title level="a">On the Power of Coercion Abstraction</title>
        <author>
          <persName key="gallium-2010-id59605">
            <foreName>Julien</foreName>
            <surname>Cretin</surname>
            <initial>J.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">Proceedings of the 39th ACM Symposium on Principles of Programming Languages (POPL'12)</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <year>2012</year>
          </dateStruct>
          <biblScope type="pages">361–372</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1145/2103656.2103699" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1145/<allowbreak/>2103656.<allowbreak/>2103699</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid47" type="article" rend="refer" n="refercite:2009-LeBotlan-Remy-recasting-mlf">
      <identifiant type="doi" value="10.1016/j.ic.2008.12.006"/>
      <analytic>
        <title level="a">Recasting MLF</title>
        <author>
          <persName key="obasco-2005-id18584">
            <foreName>Didier</foreName>
            <surname>Le Botlan</surname>
            <initial>D.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Information and Computation</title>
        <imprint>
          <biblScope type="volume">207</biblScope>
          <biblScope type="number">6</biblScope>
          <dateStruct>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">726–785</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1016/j.ic.2008.12.006" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1016/<allowbreak/>j.<allowbreak/>ic.<allowbreak/>2008.<allowbreak/>12.<allowbreak/>006</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid11" type="article" rend="refer" n="refercite:2009-Leroy-Compcert-backend">
      <identifiant type="doi" value="10.1007/s10817-009-9155-4"/>
      <analytic>
        <title level="a">A formally verified compiler back-end</title>
        <author>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Journal of Automated Reasoning</title>
        <imprint>
          <biblScope type="volume">43</biblScope>
          <biblScope type="number">4</biblScope>
          <dateStruct>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">363–446</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1007/s10817-009-9155-4" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1007/<allowbreak/>s10817-009-9155-4</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid10" type="article" rend="refer" n="refercite:2009-Leroy-Compcert-CACM">
      <identifiant type="doi" value="10.1145/1538788.1538814"/>
      <analytic>
        <title level="a">Formal verification of a realistic compiler</title>
        <author>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Communications of the ACM</title>
        <imprint>
          <biblScope type="volume">52</biblScope>
          <biblScope type="number">7</biblScope>
          <dateStruct>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">107–115</biblScope>
          <ref xlink:href="http://doi.acm.org/10.1145/1538788.1538814" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>doi.<allowbreak/>acm.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1145/<allowbreak/>1538788.<allowbreak/>1538814</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid46" type="inproceedings" rend="refer" n="refercite:2008-Pottier-antiframe">
      <identifiant type="doi" value="10.1109/LICS.2008.16"/>
      <analytic>
        <title level="a">Hiding local state in direct style: a higher-order anti-frame rule</title>
        <author>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">Proceedings of the 23rd Annual IEEE Symposium on Logic In Computer Science (LICS'08)</title>
        <imprint>
          <publisher>
            <orgName>IEEE Computer Society Press</orgName>
          </publisher>
          <dateStruct>
            <month>June</month>
            <year>2008</year>
          </dateStruct>
          <biblScope type="pages">331-340</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1109/LICS.2008.16" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1109/<allowbreak/>LICS.<allowbreak/>2008.<allowbreak/>16</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid44" type="incollection" rend="refer" n="refercite:2005-Pottier-Remy-ATTAPL">
      <analytic>
        <title level="a">The Essence of ML Type Inference</title>
        <author>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <editor role="editor">
          <persName>
            <foreName>Benjamin C.</foreName>
            <surname>Pierce</surname>
            <initial>B. C.</initial>
          </persName>
        </editor>
        <title level="m">Advanced Topics in Types and Programming Languages</title>
        <imprint>
          <biblScope type="chapter">10</biblScope>
          <publisher>
            <orgName>MIT Press</orgName>
          </publisher>
          <dateStruct>
            <year>2005</year>
          </dateStruct>
          <biblScope type="pages">389–489</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid51" type="article" rend="refer" n="refercite:2012-Pouillard-Pottier">
      <identifiant type="doi" value="10.1017/S0956796812000251"/>
      <analytic>
        <title level="a">A unified treatment of syntax with binders</title>
        <author>
          <persName key="gallium-2006-id18542">
            <foreName>Nicolas</foreName>
            <surname>Pouillard</surname>
            <initial>N.</initial>
          </persName>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes">
        <title level="j">Journal of Functional Programming</title>
        <imprint>
          <biblScope type="volume">22</biblScope>
          <biblScope type="number">4–5</biblScope>
          <dateStruct>
            <year>2012</year>
          </dateStruct>
          <biblScope type="pages">614–704</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1017/S0956796812000251" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1017/<allowbreak/>S0956796812000251</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid49" type="inproceedings" rend="refer" n="refercite:2010-Tristan-Leroy-softpipe">
      <identifiant type="doi" value="10.1145/1706299.1706311"/>
      <analytic>
        <title level="a">A simple, verified validator for software pipelining</title>
        <author>
          <persName key="gallium-2006-id18564">
            <foreName>Jean-Baptiste</foreName>
            <surname>Tristan</surname>
            <initial>J.-B.</initial>
          </persName>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">Proceedings of the 37th ACM Symposium on Principles of Programming Languages (POPL'10)</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <year>2010</year>
          </dateStruct>
          <biblScope type="pages">83–92</biblScope>
          <ref xlink:href="http://doi.acm.org/10.1145/1706299.1706311" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>doi.<allowbreak/>acm.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1145/<allowbreak/>1706299.<allowbreak/>1706311</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid21" type="phdthesis" rend="year" n="cite:cretin:tel-00940511">
      <identifiant type="hal" value="tel-00940511"/>
      <monogr>
        <title level="m">Coercions effaçables : une approche unifiée des systèmes de types</title>
        <author>
          <persName key="gallium-2010-id59605">
            <foreName>Julien</foreName>
            <surname>Cretin</surname>
            <initial>J.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName type="school">Université Paris-Diderot - Paris VII</orgName>
          </publisher>
          <dateStruct>
            <month>January</month>
            <year>2014</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/tel-00940511" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>tel-00940511</ref>
        </imprint>
      </monogr>
      <note type="typdoc">Ph. D. Thesis</note>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid38" type="incollection" rend="year" n="cite:leroy:hal-00905435">
      <identifiant type="hal" value="hal-00905435"/>
      <analytic>
        <title level="a">The CompCert memory model</title>
        <author>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
          <persName key="moscova-2005-id18321">
            <foreName>Andrew W.</foreName>
            <surname>Appel</surname>
            <initial>A. W.</initial>
          </persName>
          <persName key="cristal-2005-id18137">
            <foreName>Sandrine</foreName>
            <surname>Blazy</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Gordon</foreName>
            <surname>Stewart</surname>
            <initial>G.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <editor role="editor">
          <persName key="moscova-2005-id18321">
            <foreName>Andrew W.</foreName>
            <surname>Appel</surname>
            <initial>A. W.</initial>
          </persName>
        </editor>
        <title level="m">Program Logics for Certified Compilers</title>
        <imprint>
          <publisher>
            <orgName>Cambridge University Press</orgName>
          </publisher>
          <dateStruct>
            <month>April</month>
            <year>2014</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00905435" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00905435</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid37" type="article" rend="year" n="cite:pottier:hal-00877589">
      <identifiant type="doi" value="10.1017/S0956796812000366"/>
      <identifiant type="hal" value="hal-00877589"/>
      <analytic>
        <title level="a">Syntactic soundness proof of a type-and-capability system with hidden state</title>
        <author>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes" id="rid01234">
        <idno type="issn">0956-7968</idno>
        <title level="j">Journal of Functional Programming</title>
        <imprint>
          <biblScope type="volume">23</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <month>January</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">38-144</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00877589" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00877589</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid36" type="article" rend="year" n="cite:schwinghammer:hal-00772757">
      <identifiant type="hal" value="hal-00772757"/>
      <analytic>
        <title level="a">A step-indexed Kripke Model of Hidden State</title>
        <author>
          <persName>
            <foreName>Jan</foreName>
            <surname>Schwinghammer</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Lars</foreName>
            <surname>Birkedal</surname>
            <initial>L.</initial>
          </persName>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
          <persName>
            <foreName>Bernhard</foreName>
            <surname>Reus</surname>
            <initial>B.</initial>
          </persName>
          <persName>
            <foreName>Kristian</foreName>
            <surname>Støvring</surname>
            <initial>K.</initial>
          </persName>
          <persName>
            <foreName>Hongseok</foreName>
            <surname>Yang</surname>
            <initial>H.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-editorial-board="yes" x-international-audience="yes" id="rid01486">
        <idno type="issn">0960-1295</idno>
        <title level="j">Mathematical Structures in Computer Science</title>
        <imprint>
          <biblScope type="volume">23</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">1–54</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00772757" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00772757</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid28" type="inproceedings" rend="year" n="cite:balabonski:hal-00907056">
      <identifiant type="doi" value="10.1145/2500365.2500606"/>
      <identifiant type="hal" value="hal-00907056"/>
      <analytic>
        <title level="a">Weak Optimality, and the Meaning of Sharing</title>
        <author>
          <persName key="gallium-2012-idp140283908771312">
            <foreName>Thibaut</foreName>
            <surname>Balabonski</surname>
            <initial>T.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">International Conference on Functional Programming (ICFP)</title>
        <loc>Boston, United States</loc>
        <imprint>
          <dateStruct>
            <month>September</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">263-274</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00907056" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00907056</ref>
        </imprint>
        <meeting id="cid21926">
          <title>ACM SIGPLAN International Conference on Functional Programming</title>
          <num>18</num>
          <abbr type="sigle">ICFP</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid15" type="inproceedings" rend="year" n="cite:boldo:hal-00743090">
      <identifiant type="hal" value="hal-00743090"/>
      <analytic>
        <title level="a">A Formally-Verified C Compiler Supporting Floating-Point Arithmetic</title>
        <author>
          <persName key="arenaire-2005-id18308">
            <foreName>Sylvie</foreName>
            <surname>Boldo</surname>
            <initial>S.</initial>
          </persName>
          <persName key="asap-2009-id60299">
            <foreName>Jacques-Henri</foreName>
            <surname>Jourdan</surname>
            <initial>J.-H.</initial>
          </persName>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
          <persName key="arenaire-2005-id18381">
            <foreName>Guillaume</foreName>
            <surname>Melquiond</surname>
            <initial>G.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Alberto</foreName>
            <surname>Nannarelli</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Peter-Michael</foreName>
            <surname>Seidel</surname>
            <initial>P.-M.</initial>
          </persName>
          <persName>
            <foreName>Ping Tak Peter</foreName>
            <surname>Tang</surname>
            <initial>P. T. P.</initial>
          </persName>
        </editor>
        <title level="m">Arith - 21st IEEE Symposium on Computer Arithmetic</title>
        <loc>Austin, United States</loc>
        <imprint>
          <publisher>
            <orgName>IEEE</orgName>
          </publisher>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">107-115</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00743090" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00743090</ref>
        </imprint>
        <meeting id="cid94252">
          <title>IEEE Symposium on Computer Arithmetic</title>
          <num>21</num>
          <abbr type="sigle">ARITH</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid17" type="inproceedings" rend="year" n="cite:braibant:hal-00776876">
      <identifiant type="doi" value="10.1007/978-3-642-39799-8_14"/>
      <identifiant type="hal" value="hal-00776876"/>
      <analytic>
        <title level="a">Formal Verification of Hardware Synthesis</title>
        <author>
          <persName key="moscova-2008-id18320">
            <foreName>Thomas</foreName>
            <surname>Braibant</surname>
            <initial>T.</initial>
          </persName>
          <persName>
            <foreName>Adam</foreName>
            <surname>Chlipala</surname>
            <initial>A.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Natasha</foreName>
            <surname>Sharygina</surname>
            <initial>N.</initial>
          </persName>
          <persName>
            <foreName>Helmut</foreName>
            <surname>Veith</surname>
            <initial>H.</initial>
          </persName>
        </editor>
        <title level="m">Computer Aided Verification - 25th International Conference</title>
        <loc>Saint Petersburg, Russian Federation</loc>
        <title level="s">Lecture notes in computer science</title>
        <imprint>
          <biblScope type="volume">8044</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">213-228</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00776876" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00776876</ref>
        </imprint>
        <meeting id="cid116287">
          <title>International Conference on Computer Aided Verification</title>
          <num>25</num>
          <abbr type="sigle">CAV</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid35" type="inproceedings" rend="year" n="cite:braibant:hal-00816672">
      <identifiant type="doi" value="10.1007/978-3-642-39634-2_36"/>
      <identifiant type="hal" value="hal-00816672"/>
      <analytic>
        <title level="a">Implementing hash-consed structures in Coq</title>
        <author>
          <persName key="moscova-2008-id18320">
            <foreName>Thomas</foreName>
            <surname>Braibant</surname>
            <initial>T.</initial>
          </persName>
          <persName key="asap-2009-id60299">
            <foreName>Jacques-Henri</foreName>
            <surname>Jourdan</surname>
            <initial>J.-H.</initial>
          </persName>
          <persName key="abstraction-2007-id18225">
            <foreName>David</foreName>
            <surname>Monniaux</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName key="cristal-2005-id18137">
            <foreName>Sandrine</foreName>
            <surname>Blazy</surname>
            <initial>S.</initial>
          </persName>
          <persName key="proval-2008-id18094">
            <foreName>Christine</foreName>
            <surname>Paulin-Mohring</surname>
            <initial>C.</initial>
          </persName>
          <persName key="everest-2005-id18304">
            <foreName>David</foreName>
            <surname>Pichardie</surname>
            <initial>D.</initial>
          </persName>
        </editor>
        <title level="m">Interactive Theorem Proving, 4th international conference</title>
        <loc>Rennes, France</loc>
        <title level="s">Lecture notes in computer science</title>
        <imprint>
          <biblScope type="volume">7998</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <month>July</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">477-483</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00816672" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00816672</ref>
        </imprint>
        <meeting id="cid390060">
          <title>International Conference on Interactive Theorem Proving</title>
          <num>4</num>
          <abbr type="sigle">ITP</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid34" type="inproceedings" rend="year" n="cite:delahaye:hal-00909688">
      <identifiant type="hal" value="hal-00909688"/>
      <analytic>
        <title level="a">Proof Certiﬁcation in Zenon Modulo: When Achilles Uses Deduction Modulo to Outrun the Tortoise with Shorter Steps</title>
        <author>
          <persName>
            <foreName>David</foreName>
            <surname>Delahaye</surname>
            <initial>D.</initial>
          </persName>
          <persName key="cristal-2005-id18151">
            <foreName>Damien</foreName>
            <surname>Doligez</surname>
            <initial>D.</initial>
          </persName>
          <persName key="gravite-2008-id18368">
            <foreName>Frédéric</foreName>
            <surname>Gilbert</surname>
            <initial>F.</initial>
          </persName>
          <persName>
            <foreName>Pierre</foreName>
            <surname>Halmagrand</surname>
            <initial>P.</initial>
          </persName>
          <persName key="logical-2005-id18289">
            <foreName>Olivier</foreName>
            <surname>Hermant</surname>
            <initial>O.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Stephan</foreName>
            <surname>Schulz</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Geoff</foreName>
            <surname>Sutcliffe</surname>
            <initial>G.</initial>
          </persName>
          <persName>
            <foreName>Boris</foreName>
            <surname>Konev</surname>
            <initial>B.</initial>
          </persName>
        </editor>
        <title level="m">IWIL - 10th International Workshop on the Implementation of Logics - 2013</title>
        <loc>Stellenbosch, South Africa</loc>
        <imprint>
          <publisher>
            <orgName>EasyChair</orgName>
          </publisher>
          <dateStruct>
            <month>December</month>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00909688" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00909688</ref>
        </imprint>
        <meeting id="cid624092">
          <title>International Workshop on the Implementation of Logics</title>
          <num>10</num>
          <abbr type="sigle">IWIL</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid33" type="inproceedings" rend="year" n="cite:delahaye:hal-00909784">
      <identifiant type="doi" value="10.1007/978-3-642-45221-5_20"/>
      <identifiant type="hal" value="hal-00909784"/>
      <analytic>
        <title level="a">Zenon Modulo: When Achilles Outruns the Tortoise using Deduction Modulo</title>
        <author>
          <persName>
            <foreName>David</foreName>
            <surname>Delahaye</surname>
            <initial>D.</initial>
          </persName>
          <persName key="cristal-2005-id18151">
            <foreName>Damien</foreName>
            <surname>Doligez</surname>
            <initial>D.</initial>
          </persName>
          <persName key="gravite-2008-id18368">
            <foreName>Frédéric</foreName>
            <surname>Gilbert</surname>
            <initial>F.</initial>
          </persName>
          <persName>
            <foreName>Pierre</foreName>
            <surname>Halmagrand</surname>
            <initial>P.</initial>
          </persName>
          <persName key="logical-2005-id18289">
            <foreName>Olivier</foreName>
            <surname>Hermant</surname>
            <initial>O.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Ken</foreName>
            <surname>McMillan</surname>
            <initial>K.</initial>
          </persName>
          <persName>
            <foreName>Aart</foreName>
            <surname>Middeldorp</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Andrei</foreName>
            <surname>Voronkov</surname>
            <initial>A.</initial>
          </persName>
        </editor>
        <title level="m">LPAR - Logic for Programming Artificial Intelligence and Reasoning - 2013</title>
        <loc>Stellenbosch, South Africa</loc>
        <title level="s">LNCS</title>
        <imprint>
          <biblScope type="volume">8312</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <month>December</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">274-290</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00909784" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00909784</ref>
        </imprint>
        <meeting id="cid290069">
          <title>International Conference on Logic for Programming, Artificial Intelligence and Reasoning</title>
          <num>19</num>
          <abbr type="sigle">LPAR</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid22" type="inproceedings" rend="year" n="cite:garrigue:hal-00914560">
      <identifiant type="doi" value="10.1007/978-3-319-03542-0_19"/>
      <identifiant type="hal" value="hal-00914560"/>
      <analytic>
        <title level="a">Ambivalent Types for Principal Type Inference with GADTs</title>
        <author>
          <persName>
            <foreName>Jacques</foreName>
            <surname>Garrigue</surname>
            <initial>J.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Chung-Chieh</foreName>
            <surname>Shan</surname>
            <initial>Chung-Chieh.</initial>
          </persName>
        </editor>
        <title level="m">APLAS 2013 - 11th Asian Symposium on Programming Languages and Systems</title>
        <loc>Melbourne, Australia</loc>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">8301</biblScope>
          <dateStruct>
            <month>December</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">257-272</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00914560" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00914560</ref>
        </imprint>
        <meeting id="cid36280">
          <title>Asian Symposium on Programming Languages and Systems</title>
          <num>11</num>
          <abbr type="sigle">APLAS</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid18" type="inproceedings" rend="year" n="cite:pottier:hal-00877590">
      <identifiant type="doi" value="10.1145/2500365.2500598"/>
      <identifiant type="hal" value="hal-00877590"/>
      <analytic>
        <title level="a">Programming with permissions in Mezzo</title>
        <author>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
          <persName key="gallium-2010-id59702">
            <foreName>Jonathan</foreName>
            <surname>Protzenko</surname>
            <initial>J.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">ICFP - The 18th ACM SIGPLAN International Conference on Functional Programming - 2013</title>
        <loc>Boston, United States</loc>
        <imprint>
          <dateStruct>
            <month>September</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">173-184</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00877590" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00877590</ref>
        </imprint>
        <meeting id="cid21926">
          <title>ACM SIGPLAN International Conference on Functional Programming</title>
          <num>18</num>
          <abbr type="sigle">ICFP</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid24" type="inproceedings" rend="year" n="cite:scherer:hal-00911656">
      <identifiant type="hal" value="hal-00911656"/>
      <analytic>
        <title level="a">Tracking Data-Flow with Open Closure Types</title>
        <author>
          <persName key="gallium-2010-id59852">
            <foreName>Gabriel</foreName>
            <surname>Scherer</surname>
            <initial>G.</initial>
          </persName>
          <persName key="maia-2009-id59550">
            <foreName>Jan</foreName>
            <surname>Hoffmann</surname>
            <initial>J.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Ken</foreName>
            <surname>McMillan</surname>
            <initial>K.</initial>
          </persName>
          <persName>
            <foreName>Aart</foreName>
            <surname>Middeldorp</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Andrei</foreName>
            <surname>Voronkov</surname>
            <initial>A.</initial>
          </persName>
        </editor>
        <title level="m">LPAR- 19th International Conference Logic for Programming, Artificial Intelligence, and Reasoning</title>
        <loc>Stellenbosch, South Africa</loc>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">8312</biblScope>
          <publisher>
            <orgName>Springer Verlag</orgName>
          </publisher>
          <dateStruct>
            <month>October</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">710-726</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00911656" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00911656</ref>
        </imprint>
        <meeting id="cid290069">
          <title>International Conference on Logic for Programming, Artificial Intelligence and Reasoning</title>
          <num>19</num>
          <abbr type="sigle">LPAR</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid23" type="inproceedings" rend="year" n="cite:scherer:hal-00772993">
      <identifiant type="doi" value="10.1007/978-3-642-37036-6"/>
      <identifiant type="hal" value="hal-00772993"/>
      <analytic>
        <title level="a">GADTs meet subtyping</title>
        <author>
          <persName key="gallium-2010-id59852">
            <foreName>Gabriel</foreName>
            <surname>Scherer</surname>
            <initial>G.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Matthias</foreName>
            <surname>Felleisen</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>Philippa</foreName>
            <surname>Gardner</surname>
            <initial>P.</initial>
          </persName>
        </editor>
        <title level="m">ESOP 2013 - 22nd European Symposium on Programming</title>
        <loc>Rome, Italy</loc>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">7792</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <month>January</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">554-573</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00772993" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00772993</ref>
        </imprint>
        <meeting id="cid71137">
          <title>European Symposium on Programming</title>
          <num>22</num>
          <abbr type="sigle">ESOP</abbr>
        </meeting>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid25" type="techreport" rend="year" n="cite:acar:hal-00910130">
      <identifiant type="hal" value="hal-00910130"/>
      <monogr>
        <title level="m">Atomic Read-Modify-Write Operations are Unnecessary for Shared-Memory Work Stealing</title>
        <author>
          <persName>
            <foreName>Umut</foreName>
            <surname>Acar</surname>
            <initial>U.</initial>
          </persName>
          <persName key="cristal-2005-id18395">
            <foreName>Arthur</foreName>
            <surname>Charguéraud</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Stefan</foreName>
            <surname>Muller</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Mike</foreName>
            <surname>Rainey</surname>
            <initial>M.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <month>September</month>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00910130" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00910130</ref>
        </imprint>
      </monogr>
      <note type="typdoc">Research Report</note>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid40" type="techreport" rend="year" n="cite:cretin:hal-00934408">
      <identifiant type="hal" value="hal-00934408"/>
      <monogr>
        <title level="m">System F with Coercion Constraints</title>
        <author>
          <persName key="gallium-2010-id59605">
            <foreName>Julien</foreName>
            <surname>Cretin</surname>
            <initial>J.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
        <imprint>
          <biblScope type="number">RR-8456</biblScope>
          <publisher>
            <orgName type="institution">Inria</orgName>
          </publisher>
          <dateStruct>
            <month>January</month>
            <year>2014</year>
          </dateStruct>
          <biblScope type="pages">36</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00934408" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00934408</ref>
        </imprint>
      </monogr>
      <note type="typdoc">Research Report</note>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid1" type="techreport" rend="year" n="cite:leroy:hal-00930213">
      <identifiant type="hal" value="hal-00930213"/>
      <monogr>
        <title level="m">The OCaml system release 4.01: Documentation and user's manual</title>
        <author>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
          <persName key="cristal-2005-id18151">
            <foreName>Damien</foreName>
            <surname>Doligez</surname>
            <initial>D.</initial>
          </persName>
          <persName key="cristal-2005-id18165">
            <foreName>Alain</foreName>
            <surname>Frisch</surname>
            <initial>A.</initial>
          </persName>
          <persName>
            <foreName>Jacques</foreName>
            <surname>Garrigue</surname>
            <initial>J.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
          <persName>
            <foreName>Jérôme</foreName>
            <surname>Vouillon</surname>
            <initial>J.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <month>September</month>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00930213" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00930213</ref>
        </imprint>
      </monogr>
      <note type="typdoc">Interne</note>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid39" type="techreport" rend="year" n="cite:scherer:hal-00851658">
      <identifiant type="hal" value="hal-00851658"/>
      <monogr>
        <title level="m">Tracking Data-Flow with Open Closure Types</title>
        <author>
          <persName key="gallium-2010-id59852">
            <foreName>Gabriel</foreName>
            <surname>Scherer</surname>
            <initial>G.</initial>
          </persName>
          <persName key="maia-2009-id59550">
            <foreName>Jan</foreName>
            <surname>Hoffmann</surname>
            <initial>J.</initial>
          </persName>
        </author>
        <imprint>
          <biblScope type="number">RR-8345</biblScope>
          <publisher>
            <orgName type="institution">Inria</orgName>
          </publisher>
          <dateStruct>
            <month>August</month>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">24</biblScope>
          <ref xlink:href="http://hal.inria.fr/hal-00851658" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00851658</ref>
        </imprint>
      </monogr>
      <note type="typdoc">Research Report</note>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid16" type="unpublished" rend="year" n="cite:boldo:hal-00862689">
      <identifiant type="hal" value="hal-00862689"/>
      <monogr>
        <title level="m">A Formally-Verified C Compiler Supporting Floating-Point Arithmetic</title>
        <author>
          <persName key="arenaire-2005-id18308">
            <foreName>Sylvie</foreName>
            <surname>Boldo</surname>
            <initial>S.</initial>
          </persName>
          <persName key="asap-2009-id60299">
            <foreName>Jacques-Henri</foreName>
            <surname>Jourdan</surname>
            <initial>J.-H.</initial>
          </persName>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
          <persName key="arenaire-2005-id18381">
            <foreName>Guillaume</foreName>
            <surname>Melquiond</surname>
            <initial>G.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00862689" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00862689</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid41" type="unpublished" rend="year" n="cite:braibant:hal-00881085">
      <identifiant type="hal" value="hal-00881085"/>
      <monogr>
        <title level="m">Implementing and reasoning about hash-consed data structures in Coq</title>
        <author>
          <persName key="moscova-2008-id18320">
            <foreName>Thomas</foreName>
            <surname>Braibant</surname>
            <initial>T.</initial>
          </persName>
          <persName key="asap-2009-id60299">
            <foreName>Jacques-Henri</foreName>
            <surname>Jourdan</surname>
            <initial>J.-H.</initial>
          </persName>
          <persName key="abstraction-2007-id18225">
            <foreName>David</foreName>
            <surname>Monniaux</surname>
            <initial>D.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <month>November</month>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00881085" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00881085</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct subtype="nonparu-n" id="gallium-2013-bid43" type="unpublished" rend="year" n="cite:dagand:hal-00922581">
      <identifiant type="hal" value="hal-00922581"/>
      <monogr>
        <title level="m">Transporting Functions across Ornaments</title>
        <author>
          <persName>
            <foreName>Pierre-Evariste</foreName>
            <surname>Dagand</surname>
            <initial>P.-E.</initial>
          </persName>
          <persName>
            <foreName>Conor</foreName>
            <surname>Mcbride</surname>
            <initial>C.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <month>December</month>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00922581" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00922581</ref>
        </imprint>
      </monogr>
      <note type="bnote">Under submission to "Journal of Functional Programming"</note>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid42" type="unpublished" rend="year" n="cite:garrigue:hal-00914493">
      <identifiant type="hal" value="hal-00914493"/>
      <monogr>
        <title level="m">Ambivalent Types for Principal Type Inference with GADTs (extended version)</title>
        <author>
          <persName>
            <foreName>Jacques</foreName>
            <surname>Garrigue</surname>
            <initial>J.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00914493" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00914493</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid20" type="unpublished" rend="year" n="cite:gueneau:hal-00912381">
      <identifiant type="hal" value="hal-00912381"/>
      <monogr>
        <title level="m">The ins and outs of iteration in Mezzo</title>
        <author>
          <persName>
            <foreName>Armaël</foreName>
            <surname>Guéneau</surname>
            <initial>A.</initial>
          </persName>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
          <persName key="gallium-2010-id59702">
            <foreName>Jonathan</foreName>
            <surname>Protzenko</surname>
            <initial>J.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00912381" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00912381</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid19" type="unpublished" rend="year" n="cite:protzenko:hal-00910402">
      <identifiant type="hal" value="hal-00910402"/>
      <monogr>
        <title level="m">Illustrating the Mezzo programming language</title>
        <author>
          <persName key="gallium-2010-id59702">
            <foreName>Jonathan</foreName>
            <surname>Protzenko</surname>
            <initial>J.</initial>
          </persName>
        </author>
        <imprint>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <ref xlink:href="http://hal.inria.fr/hal-00910402" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>hal-00910402</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid4" type="inproceedings" rend="foot" n="footcite:2003-CDuce">
      <analytic>
        <title level="a">CDuce: an XML-centric general-purpose language</title>
        <author>
          <persName>
            <foreName>Véronique</foreName>
            <surname>Benzaken</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>Giuseppe</foreName>
            <surname>Castagna</surname>
            <initial>G.</initial>
          </persName>
          <persName key="cristal-2005-id18165">
            <foreName>Alain</foreName>
            <surname>Frisch</surname>
            <initial>A.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Int. Conf. on Functional programming (ICFP'03)</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <year>2003</year>
          </dateStruct>
          <biblScope type="pages">51–63</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid14" type="inproceedings" rend="foot" n="footcite:BlazyLMP13">
      <analytic>
        <title level="a">Formal Verification of a C Value Analysis Based on Abstract Interpretation</title>
        <author>
          <persName key="cristal-2005-id18137">
            <foreName>Sandrine</foreName>
            <surname>Blazy</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Vincent</foreName>
            <surname>Laporte</surname>
            <initial>V.</initial>
          </persName>
          <persName>
            <foreName>André</foreName>
            <surname>Maroneze</surname>
            <initial>A.</initial>
          </persName>
          <persName key="everest-2005-id18304">
            <foreName>David</foreName>
            <surname>Pichardie</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Static Analysis - 20th International Symposium, SAS 2013</title>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">7935</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2013</year>
          </dateStruct>
          <biblScope type="pages">324-344</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid32" type="inproceedings" rend="foot" n="footcite:brauner:inria-00133557">
      <identifiant type="hal" value="inria-00133557"/>
      <analytic>
        <title level="a">Principles of Superdeduction</title>
        <author>
          <persName key="protheo-2006-id18712">
            <foreName>Paul</foreName>
            <surname>Brauner</surname>
            <initial>P.</initial>
          </persName>
          <persName key="protheo-2005-id18604">
            <foreName>Clément</foreName>
            <surname>Houtmann</surname>
            <initial>C.</initial>
          </persName>
          <persName key="protheo-2005-id18078">
            <foreName>Claude</foreName>
            <surname>Kirchner</surname>
            <initial>C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">22nd IEEE Symposium on Logic in Computer Science (LICS 2007)</title>
        <imprint>
          <publisher>
            <orgName>IEEE Computer Society Press</orgName>
          </publisher>
          <dateStruct>
            <year>2007</year>
          </dateStruct>
          <biblScope type="pages">41-50</biblScope>
          <ref xlink:href="http://hal.inria.fr/inria-00133557" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>hal.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>inria-00133557</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid31" type="inproceedings" rend="foot" n="footcite:2012-doligez-etal-tla">
      <identifiant type="doi" value="10.1007/978-3-642-32759-9_14"/>
      <analytic>
        <title level="a">TLA + Proofs</title>
        <author>
          <persName key="logical-2006-id18335">
            <foreName>Denis</foreName>
            <surname>Cousineau</surname>
            <initial>D.</initial>
          </persName>
          <persName key="cristal-2005-id18151">
            <foreName>Damien</foreName>
            <surname>Doligez</surname>
            <initial>D.</initial>
          </persName>
          <persName>
            <foreName>Leslie</foreName>
            <surname>Lamport</surname>
            <initial>L.</initial>
          </persName>
          <persName key="mosel-2005-id18120">
            <foreName>Stephan</foreName>
            <surname>Merz</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Daniel</foreName>
            <surname>Ricketts</surname>
            <initial>D.</initial>
          </persName>
          <persName key="parsifal-2011-idp140563516811760">
            <foreName>Hernán</foreName>
            <surname>Vanzetto</surname>
            <initial>H.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <editor role="editor">
          <persName>
            <foreName>Dimitra</foreName>
            <surname>Giannakopoulou</surname>
            <initial>D.</initial>
          </persName>
          <persName key="mosel-2005-id18078">
            <foreName>Dominique</foreName>
            <surname>Méry</surname>
            <initial>D.</initial>
          </persName>
        </editor>
        <title level="m">FM 2012: Formal Methods - 18th International Symposium</title>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">7436</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2012</year>
          </dateStruct>
          <biblScope type="pages">147-154</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1007/978-3-642-32759-9_14" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1007/<allowbreak/>978-3-642-32759-9_14</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid9" type="inproceedings" rend="foot" n="footcite:2006-Frisch-icfp">
      <identifiant type="doi" value="10.1145/1159803.1159829"/>
      <analytic>
        <title level="a">OCaml + XDuce</title>
        <author>
          <persName key="cristal-2005-id18165">
            <foreName>Alain</foreName>
            <surname>Frisch</surname>
            <initial>A.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Proceedings of the Eleventh ACM SIGPLAN International Conference on Functional Programming</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <month>September</month>
            <year>2006</year>
          </dateStruct>
          <biblScope type="pages">192–200</biblScope>
          <ref xlink:href="http://doi.acm.org/10.1145/1159803.1159829" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>doi.<allowbreak/>acm.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1145/<allowbreak/>1159803.<allowbreak/>1159829</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid12" type="inproceedings" rend="foot" n="footcite:Granlund-Montgomery-94">
      <analytic>
        <title level="a">Division by Invariant Integers using Multiplication</title>
        <author>
          <persName>
            <foreName>Torbjörn</foreName>
            <surname>Granlund</surname>
            <initial>T.</initial>
          </persName>
          <persName>
            <foreName>Peter L.</foreName>
            <surname>Montgomery</surname>
            <initial>P. L.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Proceedings of the ACM SIGPLAN'94 Conference on Programming Language Design and Implementation (PLDI)</title>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>1994</year>
          </dateStruct>
          <biblScope type="pages">61-72</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid3" type="article" rend="foot" n="footcite:2003-Hosoya-Pierce">
      <analytic>
        <title level="a">XDuce: A Statically Typed XML Processing Language</title>
        <author>
          <persName>
            <foreName>Haruo</foreName>
            <surname>Hosoya</surname>
            <initial>H.</initial>
          </persName>
          <persName>
            <foreName>Benjamin C.</foreName>
            <surname>Pierce</surname>
            <initial>B. C.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">ACM Transactions on Internet Technology</title>
        <imprint>
          <biblScope type="volume">3</biblScope>
          <biblScope type="number">2</biblScope>
          <dateStruct>
            <month>May</month>
            <year>2003</year>
          </dateStruct>
          <biblScope type="pages">117–148</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid29" type="article" rend="foot" n="footcite:Jay-Kesner-PurePatternCalculus">
      <analytic>
        <title level="a">First-class patterns</title>
        <author>
          <persName>
            <foreName>C. Barry</foreName>
            <surname>Jay</surname>
            <initial>C. B.</initial>
          </persName>
          <persName>
            <foreName>Delia</foreName>
            <surname>Kesner</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">J. Functional Programming</title>
        <imprint>
          <biblScope type="volume">19</biblScope>
          <biblScope type="number">2</biblScope>
          <dateStruct>
            <year>2009</year>
          </dateStruct>
          <biblScope type="pages">191-225</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid30" type="article" rend="foot" n="footcite:2012-lamport-proof">
      <identifiant type="doi" value="10.1007/s11784-012-0071-6"/>
      <analytic>
        <title level="a">How to write a 21st century proof</title>
        <author>
          <persName>
            <foreName>Leslie</foreName>
            <surname>Lamport</surname>
            <initial>L.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Journal of Fixed Point Theory and Applications</title>
        <imprint>
          <biblScope type="volume">11</biblScope>
          <dateStruct>
            <year>2012</year>
          </dateStruct>
          <biblScope type="pages">43-63</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1007/s11784-012-0071-6" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1007/<allowbreak/>s11784-012-0071-6</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid7" type="article" rend="foot" n="footcite:2003-Leroy-JAR">
      <analytic>
        <title level="a">Java bytecode verification: algorithms and formalizations</title>
        <author>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Journal of Automated Reasoning</title>
        <imprint>
          <biblScope type="volume">30</biblScope>
          <biblScope type="number">3–4</biblScope>
          <dateStruct>
            <year>2003</year>
          </dateStruct>
          <biblScope type="pages">235–269</biblScope>
          <ref xlink:href="http://gallium.inria.fr/~xleroy/publi/bytecode-verification-JAR.pdf" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>gallium.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>~xleroy/<allowbreak/>publi/<allowbreak/>bytecode-verification-JAR.<allowbreak/>pdf</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid27" type="inproceedings" rend="foot" n="footcite:Maranget-MMS12">
      <analytic>
        <title level="a">An Axiomatic Memory Model for Power Multiprocessors</title>
        <author>
          <persName>
            <foreName>Sela</foreName>
            <surname>Mador-Haim</surname>
            <initial>S.</initial>
          </persName>
          <persName key="moscova-2005-id18098">
            <foreName>Luc</foreName>
            <surname>Maranget</surname>
            <initial>L.</initial>
          </persName>
          <persName>
            <foreName>Susmit</foreName>
            <surname>Sarkar</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Kayvan</foreName>
            <surname>Memarian</surname>
            <initial>K.</initial>
          </persName>
          <persName key="moscova-2007-id18277">
            <foreName>Jade</foreName>
            <surname>Alglave</surname>
            <initial>J.</initial>
          </persName>
          <persName>
            <foreName>Scott</foreName>
            <surname>Owens</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Rajeev</foreName>
            <surname>Alur</surname>
            <initial>R.</initial>
          </persName>
          <persName>
            <foreName>Milo</foreName>
            <surname>Martin</surname>
            <initial>M.</initial>
          </persName>
          <persName>
            <foreName>Peter</foreName>
            <surname>Sewell</surname>
            <initial>P.</initial>
          </persName>
          <persName>
            <foreName>Derek</foreName>
            <surname>Williams</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Computer Aided Verification - 24th International Conference, CAV 2012</title>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">7358</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2012</year>
          </dateStruct>
          <biblScope type="pages">495-512</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid2" type="book" rend="foot" n="footcite:TAPL">
      <monogr>
        <title level="m">Types and Programming Languages</title>
        <author>
          <persName>
            <foreName>Benjamin C.</foreName>
            <surname>Pierce</surname>
            <initial>B. C.</initial>
          </persName>
        </author>
        <imprint>
          <publisher>
            <orgName>MIT Press</orgName>
          </publisher>
          <dateStruct>
            <year>2002</year>
          </dateStruct>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid6" type="article" rend="foot" n="footcite:2001-Pottier-IC">
      <analytic>
        <title level="a">Simplifying subtyping constraints: a theory</title>
        <author>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">Information and Computation</title>
        <imprint>
          <biblScope type="volume">170</biblScope>
          <biblScope type="number">2</biblScope>
          <dateStruct>
            <year>2001</year>
          </dateStruct>
          <biblScope type="pages">153–183</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid8" type="article" rend="foot" n="footcite:2003-Pottier-Simonet-TOPLAS">
      <analytic>
        <title level="a">Information Flow Inference for ML</title>
        <author>
          <persName key="cristal-2005-id18210">
            <foreName>François</foreName>
            <surname>Pottier</surname>
            <initial>F.</initial>
          </persName>
          <persName>
            <foreName>Vincent</foreName>
            <surname>Simonet</surname>
            <initial>V.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="j">ACM Transactions on Programming Languages and Systems</title>
        <imprint>
          <biblScope type="volume">25</biblScope>
          <biblScope type="number">1</biblScope>
          <dateStruct>
            <month>January</month>
            <year>2003</year>
          </dateStruct>
          <biblScope type="pages">117–158</biblScope>
          <ref xlink:href="http://gallium.inria.fr/~fpottier/publis/fpottier-simonet-toplas.ps.gz" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>gallium.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>~fpottier/<allowbreak/>publis/<allowbreak/>fpottier-simonet-toplas.<allowbreak/>ps.<allowbreak/>gz</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid13" type="inproceedings" rend="foot" n="footcite:2010-Rideau-Leroy-regalloc">
      <identifiant type="doi" value="10.1007/978-3-642-11970-5_13"/>
      <analytic>
        <title level="a">Validating register allocation and spilling</title>
        <author>
          <persName key="gallium-2009-id59893">
            <foreName>Silvain</foreName>
            <surname>Rideau</surname>
            <initial>S.</initial>
          </persName>
          <persName key="cristal-2005-id18078">
            <foreName>Xavier</foreName>
            <surname>Leroy</surname>
            <initial>X.</initial>
          </persName>
        </author>
      </analytic>
      <monogr x-international-audience="yes" x-proceedings="yes">
        <title level="m">Compiler Construction (CC 2010)</title>
        <title level="s">Lecture Notes in Computer Science</title>
        <imprint>
          <biblScope type="volume">6011</biblScope>
          <publisher>
            <orgName>Springer</orgName>
          </publisher>
          <dateStruct>
            <year>2010</year>
          </dateStruct>
          <biblScope type="pages">224–243</biblScope>
          <ref xlink:href="http://dx.doi.org/10.1007/978-3-642-11970-5_13" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>dx.<allowbreak/>doi.<allowbreak/>org/<allowbreak/>10.<allowbreak/>1007/<allowbreak/>978-3-642-11970-5_13</ref>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid5" type="inproceedings" rend="foot" n="footcite:1997-Remy-Vouillon">
      <analytic>
        <title level="a">Objective ML: A simple object-oriented extension to ML</title>
        <author>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
          <persName>
            <foreName>Jérôme</foreName>
            <surname>Vouillon</surname>
            <initial>J.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">24th ACM Conference on Principles of Programming Languages</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <year>1997</year>
          </dateStruct>
          <biblScope type="pages">40–53</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid26" type="inproceedings" rend="foot" n="footcite:Maranget-SSA11">
      <analytic>
        <title level="a">Understanding Power multiprocessors</title>
        <author>
          <persName>
            <foreName>Susmit</foreName>
            <surname>Sarkar</surname>
            <initial>S.</initial>
          </persName>
          <persName>
            <foreName>Peter</foreName>
            <surname>Sewell</surname>
            <initial>P.</initial>
          </persName>
          <persName key="moscova-2007-id18277">
            <foreName>Jade</foreName>
            <surname>Alglave</surname>
            <initial>J.</initial>
          </persName>
          <persName key="moscova-2005-id18098">
            <foreName>Luc</foreName>
            <surname>Maranget</surname>
            <initial>L.</initial>
          </persName>
          <persName>
            <foreName>Derek</foreName>
            <surname>Williams</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI 2011</title>
        <imprint>
          <publisher>
            <orgName>ACM</orgName>
          </publisher>
          <dateStruct>
            <year>2011</year>
          </dateStruct>
          <biblScope type="pages">175-186</biblScope>
        </imprint>
      </monogr>
    </biblStruct>
    
    <biblStruct id="gallium-2013-bid0" type="inproceedings" rend="foot" n="footcite:2003-LeBotlan-Remy-ICFP">
      <analytic>
        <title level="a">MLF: Raising ML to the power of System F</title>
        <author>
          <persName key="obasco-2005-id18584">
            <foreName>Didier</foreName>
            <surname>Le Botlan</surname>
            <initial>D.</initial>
          </persName>
          <persName key="cristal-2005-id18098">
            <foreName>Didier</foreName>
            <surname>Rémy</surname>
            <initial>D.</initial>
          </persName>
        </author>
      </analytic>
      <monogr>
        <title level="m">Proceedings of the Eighth ACM SIGPLAN International Conference on Functional Programming</title>
        <imprint>
          <publisher>
            <orgName>ACM Press</orgName>
          </publisher>
          <dateStruct>
            <month>August</month>
            <year>2003</year>
          </dateStruct>
          <biblScope type="pages">27–38</biblScope>
          <ref xlink:href="http://gallium.inria.fr/~remy/work/mlf/icfp.pdf" location="extern" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://<allowbreak/>gallium.<allowbreak/>inria.<allowbreak/>fr/<allowbreak/>~remy/<allowbreak/>work/<allowbreak/>mlf/<allowbreak/>icfp.<allowbreak/>pdf</ref>
        </imprint>
      </monogr>
    </biblStruct>
  </biblio>
</raweb>
