Operational semantics is a category of
formal programming language semantics
Semantics (from grc, σημαντικός ''sēmantikós'', "significant") is the study of reference, meaning, or truth. The term can be used to refer to subfields of several distinct disciplines, including philosophy
Philosophy (f ...
in which certain desired properties of a
program
Program, programme, programmer, or programming may refer to:
Business and management
* Program management, the process of managing several related projects
* Time management
* Program, a part of planning
Arts and entertainment Audio
* Progra ...
, such as correctness, safety or security, are
verified
Verified is a United Nations project to improve access to accurate information. In the project the United Nations seeks to organize a network of millions of online volunteers to curate and fact check information online. Verified has held a socia ...
by constructing
proof
Proof most often refers to:
* Proof (truth), argument or sufficient evidence for the truth of a proposition
* Alcohol proof, a measure of an alcoholic drink's strength
Proof may also refer to:
Mathematics and formal logic
* Formal proof, a con ...
s from logical statements about its
execution 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
Computation is any type of arithmetic or non-arithmetic calculation that follows a well-defined model (e.g., an algorithm).
Mechanical or electronic devices (or, historically, people) that perform computations are known as ''computers''. An es ...
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 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 ass ...
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. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming ...
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 declar ...
, 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
Lambda calculus (also written as ''λ''-calculus) is a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution. It is a universal model of computation ...
to define the semantics of
Lisp
A lisp is a speech impairment in which a person misarticulates sibilants (, , , , , , , ). These misarticulations often result in unclear speech.
Types
* A frontal lisp occurs when the tongue is placed anterior to the target. Interdental lisping ...
.
Abstract machines in the tradition of the
SECD machine The SECD machine is a highly influential (''see: '') virtual machine and abstract machine intended as a target for functional programming language compilers. The letters stand for Stack, Environment, Control, Dump—the internal registers of the mac ...
are also closely related.
History
The concept of operational semantics was used for the first time in defining the semantics of
Algol 68.
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
ALGOL 68 (short for ''Algorithmic Language 1968'') is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously d ...
, 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
Matthias Felleisen is a German-American computer science professor and author. He grew up in Germany and immigrated to the US when he was 21 years old.
He received his PhD from Indiana University under the direction of Daniel P. Friedman.
Afte ...
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
Relation or relations may refer to:
General uses
*International relations, the study of interconnection of politics, economics, and law on a global level
*Interpersonal relationship, association or acquaintance between two or more people
*Public ...
between programs. Important relations include
simulation preorder In theoretical computer science a simulation is a relation between state transition systems associating systems that behave in the same way in the sense that one system ''simulates'' the other.
Intuitively, a system simulates another system if it c ...
s and
bisimulation
In theoretical computer science a bisimulation is a binary relation between state transition systems, associating systems that behave in the same way in that one system simulates the other and vice versa.
Intuitively two systems are bisimilar if ...
.
These are especially useful in the context of
concurrency theory
In computer science, concurrency is the ability of different parts or units of a program, algorithm, or problem to be executed out-of-order or in partial order, without affecting the outcome. This allows for parallel execution of the concur ...
.
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, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to Applied science, practical discipli ...
.
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
Lambda calculus (also written as ''λ''-calculus) is a formal system in mathematical logic for expressing computation based on function abstraction and application using variable binding and substitution. It is a universal model of computation ...
by
Gordon Plotkin in 1975 and generalized to higher-order functional languages with imperative features by
Matthias Felleisen
Matthias Felleisen is a German-American computer science professor and author. He grew up in Germany and immigrated to the US when he was 21 years old.
He received his PhD from Indiana University under the direction of Daniel P. Friedman.
Afte ...
in his 1987 dissertation. The method was further elaborated by Matthias Felleisen and Robert Hieb in 1992 into a fully
equational theory
Universal algebra (sometimes called general algebra) is the field of mathematics that studies algebraic structures themselves, not examples ("models") of algebraic structures.
For instance, rather than take particular groups as the object of study, ...
for
control
Control may refer to:
Basic meanings Economics and business
* Control (management), an element of management
* Control, an element of management accounting
* Comptroller (or controller), a senior financial officer in an organization
* Controlling ...
and
state.
The phrase “reduction semantics” itself was first coined by Felleisen and
Daniel 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