My research is aimed at gaining a better understanding of the programming process, with respect to both sequential and concurrent (or parallel) programs. The work requires investigation of theories of program correctness and their application, as well as investigation of other concepts in the semantics of programming languages. A procedural programming language, Polya, is being defined and implemented. We are attempting to make the language in which algorithms are usually presented the programming language, but without loss of efficiency. This has entailed work in the theory of polymorphic types and type inference as well as the development of new constructs for defining types and for describing the implementation of variables. The hope is that this work will advance the state of the art of reusability of program parts and will raise the level at which programs are written.
Education, in particular the material taught in the first few courses in computer science, is of particular interest. A text for a discrete mathematics course, coauthored with F.B. Schneider, was completed. The text emphasizes the pervasive use of logic and formal calculation in discrete mathematics.