ExAIS: Executable AI Semantics
  Neural networks can be regarded as a new programming paradigm, i.e., instead
of building ever-more complex programs through (often informal) logical
reasoning in the programmers' mind, complex 'AI' systems are built by
optimising generic neural network models with big data. In this new paradigm,
AI frameworks such as TensorFlow and PyTorch play a key role, which is as
essential as the compiler for traditional programs. It is known that the lack
of a proper semantics for programming languages (such as C), i.e., a
correctness specification for compilers, has contributed to many problematic
program behaviours and security issues. While it is in general hard to have a
correctness specification for compilers due to the high complexity of
programming languages and their rapid evolution, we have a unique opportunity
to do it right this time for neural networks (which have a limited set of
functions, and most of them have stable semantics). In this work, we report our
effort on providing a correctness specification of neural network frameworks
such as TensorFlow. We specify the semantics of almost all TensorFlow layers in
the logical programming language Prolog. We demonstrate the usefulness of the
semantics through two applications. One is a fuzzing engine for TensorFlow,
which features a strong oracle and a systematic way of generating valid neural
networks. The other is a model validation approach which enables consistent bug
reporting for TensorFlow models.
