In this paper we present the mathematical core of a new programming language LD3 (=Language for Data Directed Design). The mathematical core of the language contains its abstract syntax and its semantics. But we go beyond this and present the language, its programs, and its underlying data types, as mathematical objects constructed in an algebraic/categorical framework. As it stands the language is highly encapsulated and highly extensible. Subsequent papers will exploit the mathematical structure to form extensions of the language with parameterized types and inheritance. The philosophy of design is to develop a full understanding of the theory behind the language, its constructs, and extensions, before committing to specific user syntax or implementations. We do, however, present some provisional sugared versions of the syntax for use in examples. © 1990.