  The paper introduces a new modular action language, ALM, and illustrates the
methodology of its use. It is based on the approach of Gelfond and Lifschitz
(1993; 1998) in which a high-level action language is used as a front end for a
logic programming system description. The resulting logic programming
representation is used to perform various computational tasks. The methodology
based on existing action languages works well for small and even medium size
systems, but is not meant to deal with larger systems that require structuring
of knowledge. ALM is meant to remedy this problem. Structuring of knowledge in
ALM is supported by the concepts of module (a formal description of a specific
piece of knowledge packaged as a unit), module hierarchy, and library, and by
the division of a system description of ALM into two parts: theory and
structure. A theory consists of one or more modules with a common theme,
possibly organized into a module hierarchy based on a dependency relation. It
contains declarations of sorts, attributes, and properties of the domain
together with axioms describing them. Structures are used to describe the
domain's objects. These features, together with the means for defining classes
of a domain as special cases of previously defined ones, facilitate the
stepwise development, testing, and readability of a knowledge base, as well as
the creation of knowledge representation libraries. To appear in Theory and
Practice of Logic Programming (TPLP).
