Research at the intersection of artificial intelligence and software engineering is important to both AI researchers and software engineers. For AI, programming is a challenging domain that stimulates fundamental research in knowledge representation and automated reasoning. In software engineering, AI techniques can be applied to programming tools with potential for dramatic improvements in programmer productivity. This volume, edited by two research scientists at the Artificial Intelligence Laboratory of MIT, collects thirty-four important papers covering a wide spectrum of work in this area. Major topics include automatic programming, theorem-proving approaches, transformational approaches, specification techniques, intelligent assistants, knowledge representation, and artificial intelligence programming. The editors have provided an introductory survey of the field and issues, introductions to each group of papers, and an extensive bibliography.
Acknowledgments Introduction I. Deductive Synthesis
1. A Deductive
Approach to Program Synthesis, by Z. Manna and R. Waldinger
2. Top-Down
Synthesis of Divide-and-Conquer Algorithms, by D. Smith II. Program
Verification
3. Mechanical Proofs About Computer Programs, by D. Good
4.
Proof Checking the RSA Public Key Encrytion Algorithm, by R. Boyer and J.S.
Moore III. Transformational Approaches
5. An Experimental Program
Transformation and Synthesis System, by J. Darlington
6. Program Development
as a Formal Activity, by M. Broy and P. Pepper
7. An Experiment in
Knowledge-Based Automatic Programming, by D. Barstow
8. On the Efficient
Synthesis of Efficient Programs, by E. Kant
9. Reusability Through Program
Transformations, by T. Cheatham
10. Program Developments: Formal
Explanations of Implementations, by D. Wile IV. Natural Language
Specifications
11. Automatic Programming Through Natural Language Dialogue:
A Survey, by G. Heidorn
12. Protosystem 1: An Automatic Programming System
Prototype, by G. Ruth
13. Informality in Program Specifications, by R.
Balzer, N. Goldman and D. Wile V. Very High Level Languages
14. An
Automatic Technique for Selection of Data Representations in SETL Programs,
by E. Schonberg, J. Schwartz and M. Sharir
15. Automating the Selection of
Implementation Structures, by L. Rowe and F. Tonge
16. Knowledge-Based
Programming Self Applied, by C. Green and S. Westford
17. Implementing
Specification Freedoms, by P. London and M. Feather VI. Programming by
Example
18. A Methodology for LISP Program Construction from Examples, by P.
Summers
19. Programming by Examples, by M. Bauer VII. Intelligent
Assistants
20. Toward Interactive Design of Correct Programs, by R. Floyd
21. A Designer/Verifier's Assistant, by M. Moriconi
22. The Programmer's
Apprentice: A Session with KBEmacs, by R. Waters
23. Report on a
Knowledge-Based Software Assistant, by C. Green, D. Luckham, R. Balzer, T.
Cheatham and C. Rich VIII. Programming Tutors
24. Intelligent Program
Analysis, by G. Ruth
25. PROUST: Knowledge-Based Software Assistant, by C.
Green, D. Luckham, R. Balzer, T. Cheatham and C. Rich IX. Programming
Knowledge
26. On Program Synthesis Knowledge, by C. Green and D. Barstow
27. Program Abstraction and Instantiation, by N. Dershowitz
28. A Formal
Representation for Plans in the Programmer's Apprentice, by C. Rich
29.
Empirical Studies of Programming Knowledge, by E. Soloway and K. Ehrlich X.
Domain Knowledge
30. The Draco Approach to Contructing Software from
Reusable Components, by J. Neighbors
31. A perspective on Automatic
Programming, by D. Barstow
32. Knowledge Representations as the Basis for
Requirements Specifications, by A. Borgida, S. Greenspan and J. Mylopoulos
XI. Aritificial Intelligence Programming
33. Power Tools for Programmers, by
B. Sheil
34. Perspectives On Artificial Intelligence Programming, by D.
Bobrow and M. Stefik Bibliography Index