  This report describes the state of the art in verifiable computation. The
problem being solved is the following:
  The Verifiable Computation Problem (Verifiable Computing Problem) Suppose we
have two computing agents. The first agent is the verifier, and the second
agent is the prover. The verifier wants the prover to perform a computation.
The verifier sends a description of the computation to the prover. Once the
prover has completed the task, the prover returns the output to the verifier.
The output will contain proof. The verifier can use this proof to check if the
prover computed the output correctly. The check is not required to verify the
algorithm used in the computation. Instead, it is a check that the prover
computed the output using the computation specified by the verifier. The effort
required for the check should be much less than that required to perform the
computation.
  This state-of-the-art report surveys 128 papers from the literature
comprising more than 4,000 pages. Other papers and books were surveyed but were
omitted. The papers surveyed were overwhelmingly mathematical. We have
summarised the major concepts that form the foundations for verifiable
computation. The report contains two main sections. The first, larger section
covers the theoretical foundations for probabilistically checkable and
zero-knowledge proofs. The second section contains a description of the current
practice in verifiable computation. Two further reports will cover (i) military
applications of verifiable computation and (ii) a collection of technical
demonstrators. The first of these is intended to be read by those who want to
know what applications are enabled by the current state of the art in
verifiable computation. The second is for those who want to see practical tools
and conduct experiments themselves.
