  Digital computers carry out algorithms coded in high level programs. These
abstract entities determine what happens at the physical level: they control
whether electrons flow through specific transistors at specific times or not,
entailing downward causation in both the logical and implementation
hierarchies. This paper explores how this is possible in the light of the
alleged causal completeness of physics at the bottom level, and highlights the
mechanism that enables strong emergence (the manifest causal effectiveness of
application programs) to occur. Although synchronic emergence of higher levels
from lower levels is manifestly true, diachronic emergence is generically not
the case; indeed we give specific examples where it cannot occur because of the
causal effectiveness of higher level variables.
