This paper describes a novel technique for the synthesis of imperative programs. Automated program synthesis has the potential to make programming and the design of systems easier by allowing programs to be specified at a higher-level than executable code. In our approach, which we call proof-theoretic synthesis, the user provides an input-output functional specification, a description of the atomic operations in the programming language, and a specification of the synthesized program’s looping structure, allowed stack space, and bound on usage of certain operations. Our technique synthesizes a program, if there exists one, that meets the input-output specification and uses only the given resources.
The insight behind our approach is to interpret program synthesis as generalized program verification, which allows us to bring verification tools and techniques to program synthesis. Our synthesis algorithm works by creating a program with unknown statements, guards, inductive invariants, and ranking functions. It then generates constraints that relate the unknowns and enforces three kinds of requirements: partial correctness, loop termination, and well-formedness conditions on program guards. We formalize the requirements that program verification tools must meet to solve these constraint and use tools from prior work as our synthesizers.
We believe the reason for the practicality of our approach is the interplay between the proof (invariants) and the statements. Specifically, by setting up constraints with both statement and proof unknowns together, statements that do not have a corresponding proof are efficiently eliminated. We believe this is the first proposal that leverages this insight for efficient and automatic program synthesis.
This blog is for articles, book reviews and critiques relating to “New Atheist Bad History” – the misuse of history and the use of biased, erroneous or distorted pseudo history by anti-theistic atheists. The author is an atheist himself so no, this is not some theist apologetics blog. It is simply an attempt to call out and correct the misuse of history, because rationalists should not base their arguments on errors and distortions.
While Modern English has a two-form system of yes and no for affirmatives and negatives, earlier forms of English had a four-form system, comprising the words yea, nay, yes, and no. Yes contradicts a negatively formulated question, No affirms it; Yea affirms a positively formulated question, Nay contradicts it.