a methodology for lisp program construction from examples
This paper reports on a system, THESYS, that synthesizes LISP recursive programs from examples of what they do. There has been recent interest in this form of program specification[1,4,8]. The theory of such inductive systems has been investigated by Blum and Blum[2], Kugel[5] and Summers[10]. In this paper we describe the practical results of an investigation into the problem of program synthesis from examples. The methodology to be presented is based on a firm theoretical foundation which may provide a basis for generalizing the results to other kinds of program synthesis systems. The various theoretical models for computation and data that comprise the theory are not described in detail in this paper but may be found in [10]. As part of the methodology we describe two processes used in constructing LISP recursive programs from examples. The first is a method for discovering and encoding the relationships or differences between pairs of examples used to specify a program. Unlike systems that synthesize programs from a single example[8], we feel that it is crucial to the process of program synthesis to discover these implicit relationships rather than inferring them from a single example. The multiple example approach permits the construction of a greater variety of programs than does the single example approach. If the algorithm for difference discovery is successful, the relationship between examples is encoded as a kind of recurrence relation. Derivation of such relations effectively determines the program to be constructed as one may prove equivalence between certain recurrence relations and various program schemata.
methodology lisp program examples systems recursion computation applications control flow association