We describe techniques for synthesis and verification of recursive functional programs over unbounded domains. Our techniques build on top of an algorithm for satisfiability modulo recursive functions, a framework for deductive synthesis, and complete synthesis procedures for algebraic data types. We present new counterexample-guided algorithms for constructing verified programs. We have implemented these algorithms in an integrated environment for interactive verification and synthesis from relational specifications. Our system was able to synthesize a number of useful recursive functions that manipulate unbounded numbers and data structures.
Martin Jaggi, Mary-Anne Hartley, Vinitra Swamy, Jibril Albachir Frej, Thierry Bossy, Thijs Vogels, Malika Satayeva
Martin Odersky, Nicolas Alexander Stucki