CLN2INV: Learning Loop Invariants with Continuous Logic Networks
  Program verification offers a framework for ensuring program correctness and
therefore systematically eliminating different classes of bugs. Inferring loop
invariants is one of the main challenges behind automated verification of
real-world programs which often contain many loops. In this paper, we present
Continuous Logic Network (CLN), a novel neural architecture for automatically
learning loop invariants directly from program execution traces. Unlike
existing neural networks, CLNs can learn precise and explicit representations
of formulas in Satisfiability Modulo Theories (SMT) for loop invariants from
program execution traces. We develop a new sound and complete semantic mapping
for assigning SMT formulas to continuous truth values that allows CLNs to be
trained efficiently. We use CLNs to implement a new inference system for loop
invariants, CLN2INV, that significantly outperforms existing approaches on the
popular Code2Inv dataset. CLN2INV is the first tool to solve all 124
theoretically solvable problems in the Code2Inv dataset. Moreover, CLN2INV
takes only 1.1 seconds on average for each problem, which is 40 times faster
than existing approaches. We further demonstrate that CLN2INV can even learn 12
significantly more complex loop invariants than the ones required for the
Code2Inv dataset.
