Research on Automatic Program-Synthesis Systems

Introduction

Computers are playing an ever-increasing role in their own programming–assemblers, compilers, and optimizers have been taking programming tasks out of human hands. However, the actual design of algorithms has largely been left up to the programer. Even the user of a higher-level language must construct his own algorithms. It seems inevitable that this chore will also eventually be relegated to computer control. Artificial intelligence has now reached a position such that efforts in that direction will be fruitful.


Programs have been written with some program-synthesis capabilities. These programs have used automatic theorem proving as u tool; they have demonstrated the importance of theorem proving in program synthesis. However, they also have pointed to the inadequacy of current techniques. Their performance as program writers is unimpressive when compared with that of a human being, but they have at least provided us with a definition of the program-synthesis task and suggested a way to approach it.


The disappointing performance of the earlier work may be ascribed partially to the weakness of current mechanical theorem-proving techniques. Theorems are of necessity expressed in an unnatural language, and then are attacked with methods inadequate to their solution. Results are understandably meager. There is a clear need for more powerful techniques that can be applied to a more acceptable problem statement.


Furthermore, there is some evidence that theorem proving as we know it may be an inappropriate approach to cert ain programming tasks. For example, machine-language program construction may call for an entirely different attack. Thus, the past research points out the need for extensive work in several areas.


The general objective of the proposed research is to establish design criteria for ap automatic program-synthesizing system. We mean to devise a natural way to define program-writing problems and describe programming languages, and then improve the known methods of program synthesis and investigate new ones.


Read more from SRI