Action Semantics

A distinguishing characteristic of action semantics is its facet system, which defines the variety of information flows in a language definition. The facet system can be analyzed to validate the well-formedness of a language definition, to infer the typings of its inputs and outputs, and to calculate the operational semantics of programs. We present a single framework for doing all of the above. The framework exploits the internal subsorting structure of the facets so that sort checking, static analysis, and operational semantics are related, sound instances of the same underlying analysis. The framework also suggests that action semantics's extensibility can be understood as a kind of "weakening rule" in a "logic" of actions. In this paper, the framework is used to perform type inference on specific programs, to justify meaning-preserving code transformations, and to "stage" an action semantics definition of a programming language into a static semantics stage and a dynamic semantics stage.