Operational semantics is a category of
formal programming language semantics
Semantics is the study of linguistic Meaning (philosophy), meaning. It examines what meaning is, how words get their meaning, and how the meaning of a complex expression depends on its parts. Part of this process involves the distinction betwee ...
in which certain desired properties of a
program, such as correctness, safety or security, are
verified by constructing
proofs from logical statements about its
execution
Capital punishment, also known as the death penalty and formerly called judicial homicide, is the state-sanctioned killing of a person as punishment for actual or supposed misconduct. The sentence ordering that an offender be punished in ...
and procedures, rather than by attaching mathematical meanings to its terms (
denotational semantics
In computer science, denotational semantics (initially known as mathematical semantics or Scott–Strachey semantics) is an approach of formalizing the meanings of programming languages by constructing mathematical objects (called ''denotations'' ...
). Operational semantics are classified in two categories: structural operational semantics (or small-step semantics) formally describe how the ''individual steps'' of a
computation
A computation is any type of arithmetic or non-arithmetic calculation that is well-defined. Common examples of computation are mathematical equation solving and the execution of computer algorithms.
Mechanical or electronic devices (or, hist ...
take place in a computer-based system; by opposition natural semantics (or big-step semantics) describe how the ''overall results'' of the executions are obtained. Other approaches to providing a
formal semantics of programming languages
In programming language theory, semantics is the rigorous mathematical study of the meaning of programming languages. Semantics assigns computational meaning to valid string (computer science), strings in a programming language syntax. It is cl ...
include
axiomatic semantics
Axiomatic semantics is an approach based on mathematical logic for proving the correctness of computer programs. It is closely related to Hoare logic.
Axiomatic semantics define the meaning of a command in a program by describing its effect on ...
and
denotational semantics
In computer science, denotational semantics (initially known as mathematical semantics or Scott–Strachey semantics) is an approach of formalizing the meanings of programming languages by constructing mathematical objects (called ''denotations'' ...
.
The operational semantics for a
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
describes how a valid program is interpreted as sequences of computational steps. These sequences then ''are'' the meaning of the program. In the context of
functional programming
In computer science, functional programming is a programming paradigm where programs are constructed by Function application, applying and Function composition (computer science), composing Function (computer science), functions. It is a declarat ...
, the final step in a terminating sequence returns the value of the program. (In general there can be many return values for a single program, because the program could be
nondeterministic, and even for a deterministic program there can be many computation sequences since the semantics may not specify exactly what sequence of operations arrives at that value.)
Perhaps the first formal incarnation of operational semantics was the use of the
lambda calculus
In mathematical logic, the lambda calculus (also written as ''λ''-calculus) is a formal system for expressing computability, computation based on function Abstraction (computer science), abstraction and function application, application using var ...
to define the semantics of
Lisp
Lisp (historically LISP, an abbreviation of "list processing") is a family of programming languages with a long history and a distinctive, fully parenthesized Polish notation#Explanation, prefix notation.
Originally specified in the late 1950s, ...
.
Abstract machines in the tradition of the
SECD machine are also closely related.
History
The concept of operational semantics was used for the first time in defining the semantics of
Algol 68
ALGOL 68 (short for ''Algorithmic Language 1968'') is an imperative programming language member of the ALGOL family that was conceived as a successor to the ALGOL 60 language, designed with the goal of a much wider scope of application and ...
.
The following statement is a quote from the revised ALGOL 68 report:
The meaning of a program in the strict language is explained in terms of a hypothetical computer
which performs the set of actions that constitute the elaboration of that program. ( Algol68, Section 2)
The first use of the term "operational semantics" in its present meaning is attributed to
Dana Scott (
Plotkin04).
What follows is a quote from Scott's seminal paper on formal semantics,
in which he mentions the "operational" aspects of semantics.
It is all very well to aim for a more ‘abstract’ and a ‘cleaner’ approach to
semantics, but if the plan is to be any good, the operational aspects cannot
be completely ignored. ( Scott70)
Approaches
Gordon Plotkin introduced the structural operational semantics,
Matthias Felleisen and Robert Hieb the reduction semantics,
and
Gilles Kahn the natural semantics.
Small-step semantics
Structural operational semantics
Structural operational semantics (SOS, also called structured operational semantics or small-step semantics) was introduced by
Gordon Plotkin in (
Plotkin81) as a logical means to define operational semantics. The basic idea behind SOS is to define the behavior of a program in terms of the behavior of its parts, thus providing a structural, i.e., syntax-oriented and
inductive, view on operational semantics. An SOS specification defines the behavior of a program in terms of a (set of)
transition relation(s). SOS specifications take the form of a set of
inference rules that define the valid transitions of a composite piece of syntax in terms of the transitions of its components.
For a simple example, we consider part of the semantics of a simple programming language; proper illustrations are given in
Plotkin81 and
Hennessy90, and other textbooks. Let
range over programs of the language, and let
range over states (e.g. functions from memory locations to values). If we have expressions (ranged over by
), values and locations (
), then a memory update command would have semantics:
Informally, the rule says that "if the expression
in state
reduces to value
, then the program
will update the state
with the assignment
".
The semantics of sequencing can be given by the following three rules:
Informally, the first rule says that,
if program
in state
finishes in state
, then the program
in state
will reduce to the program
in state
.
(You can think of this as formalizing "You can run
, and then run
using the resulting memory store.)
The second rule says that
if the program
in state
can reduce to the program
with state
, then the program
in state
will reduce to the program
in state
.
(You can think of this as formalizing the principle for an optimizing compiler:
"You are allowed to transform
as if it were stand-alone, even if it is just the
first part of a program.")
The semantics is structural, because the meaning of the sequential program
, is defined by the meaning of
and the meaning of
.
If we also have Boolean expressions over the state, ranged over by
, then we can define the semantics of the while command:
Such a definition allows formal analysis of the behavior of programs, permitting the study of
relations between programs. Important relations include
simulation preorders and
bisimulation.
These are especially useful in the context of
concurrency theory.
Thanks to its intuitive look and easy-to-follow structure,
SOS has gained great popularity and has become a de facto standard in defining
operational semantics. As a sign of success, the original report (so-called Aarhus
report) on SOS (
Plotkin81) has attracted more than 1000 citations according to the CiteSee
making it one of the most cited technical reports in
Computer Science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
.
Reduction semantics
Reduction semantics is an alternative presentation of operational semantics. Its key ideas were first applied to purely functional
call by name and
call by value variants of the
lambda calculus
In mathematical logic, the lambda calculus (also written as ''λ''-calculus) is a formal system for expressing computability, computation based on function Abstraction (computer science), abstraction and function application, application using var ...
by
Gordon Plotkin in 1975 and generalized to higher-order functional languages with imperative features by
Matthias Felleisen in his 1987 dissertation. The method was further elaborated by Matthias Felleisen and Robert Hieb in 1992 into a fully
equational theory for
control and
state.
The phrase “reduction semantics” itself was first coined by Felleisen and
Daniel P. Friedman in a PARLE 1987 paper.
Reduction semantics are given as a set of ''reduction rules'' that each specify a single potential reduction step. For example, the following reduction rule states that an assignment statement can be reduced if it sits immediately beside its variable declaration:
To get an assignment statement into such a position it is “bubbled up” through function applications and the right-hand side of assignment statements until it reaches the proper point. Since intervening
expressions may declare distinct variables, the calculus also demands an extrusion rule for
expressions. Most published uses of reduction semantics define such “bubble rules” with the convenience of evaluation contexts. For example, the grammar of evaluation contexts in a simple
call by value language can be given as
where
denotes arbitrary expressions and
denotes fully-reduced values. Each evaluation context includes exactly one hole