e-mail: fleck AT cs.uiowa.edu
My initial research efforts were in algebraic automata theory and formal languages. These areas investigate highly abstract models of computing devices and languages, and apply them to examine the ultimate limits of information processing by mechanical devices. I still find this body of theoretical material helps to provide much better insight into many practical aspects of computing, and I have recently published a textbook, Formal Models of Computation, in this area.
The recognition of the compelling role of data structures in the programming process, together with a proliferation of programming languages and embedded facilities next fueled an interest in formalizing common data structures in a setting independent of any specific programming language. This is accomplished by developing a formal model of a data structure that reflects its essential organizing properties. The creation of an abstract definitional framework then provides a basis for precise analysis of the descriptive capacity of a data structure. One aspect of this work appeared as a chapter in the book Current Trends in Programming Methodology: Data Structuring. It was hardly coincidence that formal language concepts were found to be highly useful for this topic as well.
My most recent area of research interest is foundations of programming and programming languages. This includes the formal syntax and semantics of programming languages, methodology for construction of correct programs, and methods for formal verification of program correctness. It also includes methodology for program specification at a level abstract enough to avoid particulars such as algorithm and data structure selection, plus transformation techniques for evolving more efficient programs from prototypes known to be correct. Declarative programming languages (i.e., logic and functional paradigms) facilitate developing prototypes directly from formal specifications, and then admit general transformation techniques, and provide a natural setting for this approach. The vastly higher level of abstraction available in logic programming has led me to prefer this paradigm for prototype construction.