  This paper proposes a causal inference relation and causal programming as
general frameworks for causal inference with structural causal models. A tuple,
$\langle M, I, Q, F \rangle$, is an instance of the relation if a formula, $F$,
computes a causal query, $Q$, as a function of known population probabilities,
$I$, in every model entailed by a set of model assumptions, $M$. Many problems
in causal inference can be viewed as the problem of enumerating instances of
the relation that satisfy given criteria. This unifies a number of previously
studied problems, including causal effect identification, causal discovery and
recovery from selection bias. In addition, the relation supports formalizing
new problems in causal inference with structural causal models, such as the
problem of research design. Causal programming is proposed as a further
generalization of causal inference as the problem of finding optimal instances
of the relation, with respect to a cost function.
