  We describe here a library aimed at automating the solution of partial
differential equations using the finite element method. By employing novel
techniques for automated code generation, the library combines a high level of
expressiveness with efficient computation. Finite element variational forms may
be expressed in near mathematical notation, from which low-level code is
automatically generated, compiled and seamlessly integrated with efficient
implementations of computational meshes and high-performance linear algebra.
Easy-to-use object-oriented interfaces to the library are provided in the form
of a C++ library and a Python module. This paper discusses the mathematical
abstractions and methods used in the design of the library and its
implementation. A number of examples are presented to demonstrate the use of
the library in application code.
