  The design and implementation of static analyzers has become increasingly
systematic. Yet for a given language or analysis feature, it often requires
tedious and error prone work to implement an analyzer and prove it sound. In
short, static analysis features and their proofs of soundness do not compose
well, causing a dearth of reuse in both implementation and metatheory.
  We solve the problem of systematically constructing static analyzers by
introducing Galois transformers: monad transformers that transport Galois
connection properties. In concert with a monadic interpreter, we define a
library of monad transformers that implement building blocks for classic
analysis parameters like context, path, and heap (in)sensitivity. Moreover,
these can be composed together independent of the language being analyzed.
  Significantly, a Galois transformer can be proved sound once and for all,
making it a reusable analysis component. As new analysis features and
abstractions are developed and mixed in, soundness proofs need not be
reconstructed, as the composition of a monad transformer stack is sound by
virtue of its constituents. Galois transformers provide a viable foundation for
reusable and composable metatheory for program analysis.
  Finally, these Galois transformers shift the level of abstraction in analysis
design and implementation to a level where non-specialists have the ability to
synthesize sound analyzers over a number of parameters.
