  This paper concerns the development of metatheory for extensible languages.
It uses as its starting point a view that programming languages tailored to
specific application domains are to be constructed by composing components from
an open library of independently-developed extensions to a host language. In
the elaboration of this perspective, static analyses (such as typing) and
dynamic semantics (such as evaluation) are described via relations whose
specifications are distributed across the host language and extensions and are
given in a rule-based fashion. Metatheoretic properties, which ensure that
static analyses accurately gauge runtime behavior, are represented in this
context by formulas over such relations. These properties may be fundamental to
the language, introduced by the host language, or they may pertain to analyses
introduced by individual extensions. We expose the problem of modular
metatheory, i.e., the notion that proofs of relevant properties can be
constructed by reasoning independently within each component in the library. To
solve this problem, we propose the twin ideas of decomposing proofs around
language fragments and of reasoning generically about extensions based on
broad, a priori constraints imposed on their behavior. We establish the
soundness of these styles of reasoning by showing how complete proofs of the
properties can be automatically constructed for any language obtained by
composing the independent parts. Mathematical precision is given to our
discussions by framing them within a logic that encodes inductive rule-based
specifications via least fixed-point definitions. We also sketch the structure
of a practical system for metatheoretic reasoning for extensible languages
based on the ideas developed.
