Êtes-vous un étudiant de l'EPFL à la recherche d'un projet de semestre?
Travaillez avec nous sur des projets en science des données et en visualisation, et déployez votre projet sous forme d'application sur Graph Search.
We present an automated approach for verifying the correctness of programming assignments, such as ones arising in a functional programming course. Our approach takes a small set of reference implementations and a set of student implementations and checks, for each student implementation, whether it is provably correct. A function is considered correct if it is shown equivalent to a reference implementation either directly or indirectly through some other intermediate function. Equivalence checking automatically generates inductive proof attempts and checks them using function unfolding and SMT solving. We extend the Stainless verification system with our algorithm to support equivalence checking of functions written in Scala. We evaluate our system on submissions from a programming course. We show that our system is capable of proving function correctness by generating inductive equivalence proofs, as well as providing counterexamples in case of incorrect implementations, with a high success rate.
Michaël Unser, Alexis Marie Frederic Goujon, Joaquim Gonçalves Garcia Barreto Campos
Denis Gillet, Juan Carlos Farah, Adrian Christian Holzer, Abdessalam Ouaazki