In the last fifteen years the area of formal language theory and abstract automata has enjoyed a great deal of attention from the research community in theoretical computer science. However, in the last few years the main interest in theoretical computer science has been directed elsewhere. In these notes I shall consider the role of formal language theory in theoretical computer science by discussing some areas in which formal language theory may find applications.Behind the activities in theoretical computer science lie the major problems of understanding the nature of computation and its relationship to computing methodology.While this area is mathematical and abstract in spirit, it is not pure mathematics:indeed, theoretical computer science derives much of its motivation from the abstraction of the practical problems of computation.Abstraction for the sake of abstraction and beauty is one of the goals of modern pure mathematics [ i]. However, as part of theoretical computer science, formal language theory must speak to problems concerning the nature of computation. In Part I of these notes I point to results of language theory which stem from or lend insight to the more general study of computability and computational complexity. In Part I I I discuss several problem areas where formal language theory may find interesting and fruitful application. In this context I urge the reader to consult the paper "Programming languages, natural languages, and mathematics" by Peter Naur [ 2].# The preparation of this paper was supported in part by the National Science Foundation under Grant GJ-30409 and by the Department of Computer Science, Yale University.
Part IFormal language theory is concerned with the specification and manipulation of sets of strings of symbols, i.e., languages. It is my thesis here that as an area of interest within theoretical computer science formal language theory should be closely tied to the study of computability theory and computational complexity. Computability theory is concerned with the representation of algorithms and languages, and computational complexity considers the inherent difficulty of evaluating functions and deciding predicates. Within the scope of these studies are the questions of determinism versus nondeterminism, trade-offs between measures and representations, differences in computational power stemming from different choices of atomic operations, and the existence of hierarchies.We shall explore two topics in order to illustrate how the common features and the differences between formal language theory and computability theory can interact fruitfully. In both cases it is shown that the questions and results of formal language theory take on new significance when reconsidered in terms of computability theory and computational complexity.
A. Universal SetsOne of the most basic notions in computability theory is the notion of a "universal machine." This notion allows a representation of the concept of "self-reference" in terms of a class of algorithms. It is particularly...