08.12.13 - 11.12.13, Seminar 13502

Approaches and Applications of Inductive Programming

The following text appeared on our web pages prior to the seminar, and was included as part of the invitation.

Motivation

Inductive programming research addresses the problem of learning programs from incomplete specifications, such as input/output examples or constraints. Beginning in the 1960-ies, this area of research was initiated in artificial intelligence (AI) exploring the complex intellectual cognitive processes involved in producing program code which satisfies some specification. Furthermore, applications of AI for software engineering are investigated resulting in methodologies and techniques for automating parts of the program development process. Inductive programming can be seen as a very special subdomain of machine learning where the hypothesis space consists of classes of computer programs.

Nowadays, researchers working on inductive programming are distributed over different communities, especially inductive logic programming, evolutionary programming, grammar inference, functional programming, and programming languages and verification. Furthermore, similar approaches are of interest in programming by demonstration applications for end-user programming as well as in cognitive models of inductive learning.

Inductive programming methodologies are of potential use in different areas:

End-user development Even if the use of computers has become ubiquitous in everyday life, there is still a fundamental gap between users and their personal computers. Computers must be programmed, yet programming remains to be a highly specialized task requiring experts skills. As a consequence, millions of users carry out repetitive tasks or cannot even achieve a goal at all { although a few lines of code could potentially solve the problem. Inductive programming can help end users program computers by demonstrations, or even simply by examples.

Autonomous Intelligent Agents Generalizing particular problem-solving experience into general strategies that help to solve other problems in the same domain is a fundamental capability of human cognition. Inductive programming is a promising approach to computationally model this capability and to implement it in autonomous intelligent agents such as in tools for computer-aided education, and even in robots to make them more useful in open environments such as households.

Process Mining Computationally analyzing procedural data { e.g., biological network data or logs from business processes { by directly executable models such as Petri nets, becomes more and more important in science as well as in industry. Inductive programming will help to automatically mine such executable models from collected data.

Software Synthesis Inductive programming can even be useful in professional software development. In (deductive) software synthesis { e.g., synthesis of specific algorithm details that are hard to figure out by humans {, inductive reasoning can be used to generate program candidates from either user-provided data such as test cases or from data automatically derived from a formal specification. The aim of this seminar is to bring together researchers from the different areas where inductive programming is of interest. We expect that the possibility to discuss and evaluate approaches from different perspectives will be fruitful for (a) gaining better insights in general mechanisms underlying inductive programming algorithms, (b) identifying commonalities between induction algorithms and empirical knowledge about cognitive characteristics of the induction of complex rules, and (c) open up new areas for applications for inductive programming in end-user programming, support tools for example driven programming, and architectures for cognitive systems.