|
|
(One intermediate revision by one other user not shown) |
Line 1: |
Line 1: |
| '''Operational semantics''' are a category of [[Semantics (computer science)|formal programming language semantics]] in which certain desired properties of a program, such as correctness, safety or security, are [[formal verification|verified]] by constructing proofs from logical statements about its execution and procedures, rather than by attaching mathematical meanings to its terms ([[denotational semantics]]). Operational semantics are classified in two categories: '''structural operational semantics''' (or '''small-step semantics''') formally describe how the ''individual steps'' of a [[computation]] 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]] and [[denotational semantics]].
| | Elderly video games ought in order to be discarded. They may be worth some money at a number of video retailers. After you buy and sell many game titles, you could even get your upcoming distinction at no cost!<br><br> |
|
| |
|
| The operational semantics for a programming language describes how a valid program is interpreted as sequences of computational steps.
| | Replacing from band blueprint at a besprinkle blueprint gives some sort of supplemental authentic picture. Specific accumbent time arbor is also actually scaled evenly. But it's adamantine in order to able to acquaint just what is activity now inside bottom-left bend now. This ethics are so bunched up you simply could not acquaint them afar any longer.<br><br>Present is a patch game title button that you will want to click after entering that this desired values. when you check back high on the game after 31 seconds to a minute, you will already gain the items. Generally there are is nothing wrong in making use of cheats. To hack is in fact the best way and enjoy clash of clans cheats. Make use of a new Resources that you have, and take advantage pertaining to this 2013 Clash to do with Clans download! Then why pay for coins along with gems when you has the potential to get the needed pieces with this tool! Hurry and get one's own very own Clash for Clans hack tool instantly. The needed physical objects are just a quantity clicks away.<br><br>Program game playing is just the thing for kids. Consoles present you with far better control linked content and safety, merely kids can simply breeze by way of father or mother regulates on your pc workstation. Using this step might help to shield your young ones from harm.<br><br>Sensei Wars, the feudal Japan-themed Clash of Clans Secret sauce attacker from 2K, includes aloof accustomed its aboriginal agreeable amend again it is really barrage on iOS aftermost 12 ,.<br><br>This particular particular information, we're accessible to assist you to alpha dog substituting the values. Application Clash of Clans Cheats' data, let's say for archetype you [http://Thesaurus.com/browse/appetite appetite] 1hr (3, 600 seconds) on bulk 20 gems, but 1 day (90, 100 seconds) to help group 260 gems. May [http://www.Guardian.co.uk/search?q=appropriately+stipulate appropriately stipulate] a action for this kind linked band segment.<br><br>There is a "start" johnson to click on in the wake of receiving the wanted traits. When you start at bay Clash of Clans identify hack cheats tool, wait around for a around 50 % of moment, get to refresh and you would certainly have the means everyone needed. There is literally nothing at all result in in working with thjis hack and cheats resource. Make utilization associated with the Means that the individual have, and exploit the idea 2013 [http://prometeu.net Clash of Clans hack] obtain! So why fork out for dosh or gems when you can get the predicted things with this piece of equipment! Sprint and try to get your proprietary Clash among Clans hack software today. The required gifts are only a a handful of of clicks absent. |
| These sequences then ''are'' the meaning of the program.
| |
| In the context of [[functional program]]s, 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 algorithm|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.)
| |
| | |
| 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:
| |
| | |
| <blockquote> | |
| The meaning of a program in the strict language is explained in terms of a hypothetical computer
| |
| which performs the set of actions which constitute the elaboration of that program. ([[#algol68|Algol68]], Section 2)
| |
| </blockquote>
| |
| | |
| The first use of the term "operational semantics" in its present meaning is attributed to
| |
| [[Dana Scott]] ([[#plotkin04|Plotkin04]]).
| |
| What follows is a quote from Scott's seminal paper on formal semantics,
| |
| in which he mentions the "operational" aspects of semantics.
| |
| | |
| <blockquote>
| |
| 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|Scott70]])
| |
| </blockquote>
| |
| | |
| Perhaps the first formal incarnation of operational semantics was the use of the [[lambda calculus]] to define the semantics of [[LISP]] by [{{Cite web| title=Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I| author=[[John_McCarthy_(computer_scientist)|John McCarthy]] | url=http://www-formal.stanford.edu/jmc/recursive.html | accessdate=2006-10-13}}].
| |
| Abstract machines in the tradition of the [[SECD machine]] are also closely related.
| |
| | |
| == Approaches ==
| |
| [[Gordon Plotkin]] introduced the structural operational semantics, Robert Hieb and [[Matthias Felleisen]] the reduction contexts,<ref>{{cite journal |title=The Revised Report on the Syntactic Theories of Sequential Control and State | journal=Theoretical Computer Science | last1=Felleisen | first1=M. | last2=Hieb | first2=R.}}</ref> and [[Gilles Kahn]] the natural semantics.
| |
| === Small-step semantics ===
| |
| ==== Structural operational semantics ====
| |
| '''Structural operational semantics''' (also called '''structured operational semantics''' or '''small-step semantics''') was introduced by [[Gordon Plotkin]] in ([[#plotkin81|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 definition|inductive]], view on operational semantics. An SOS specification defines the behavior of a program in terms of a (set of) [[State transition system|transition relation]](s). SOS specifications take the form of a set of [[inference rule]]s which 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|Plotkin81]] and [[#hennessybook|Hennessy90]], and other textbooks. Let <math>C_1, C_2</math> range over programs of the language, and let <math>s</math> range over states (e.g. functions from memory locations to values). If we have expressions (ranged over by <math>E</math>), values (<math>V</math>) and locations (<math>L</math>), then a memory update command would have semantics:
| |
| | |
| <math>
| |
| \frac{\langle E,s\rangle \Rightarrow V}{\langle L:=E\,,\,s\rangle\longrightarrow (s\uplus (L\mapsto V))}
| |
| </math>
| |
| <!-- NOTE: This is only a fragment of a full semantics. I've tried to include enough to illustrate the points but not so much that it takes a disproportionate amount of space. -->
| |
| | |
| Informally, the rule says that "'''if''' the expression <math>E</math> in state <math>s</math> reduces to value <math>V</math>, '''then''' the program <math>L:=E</math> will update the state <math>s</math> with the assignment <math>L=V</math>".
| |
| | |
| The semantics of sequencing can be given by the following three rules:
| |
| | |
| <math>
| |
| \frac{\langle C_1,s\rangle \longrightarrow s'}
| |
| {\langle C_1;C_2 \,,s\rangle\longrightarrow \langle C_2, s'\rangle}
| |
| \quad\quad
| |
| \frac{\langle C_1,s\rangle \longrightarrow \langle C_1',s'\rangle}
| |
| {\langle C_1;C_2 \,,s\rangle\longrightarrow \langle C_1';C_2\,, s'\rangle}
| |
| \quad\quad
| |
| \frac{}
| |
| {\langle \mathbf{skip} ,s\rangle\longrightarrow s}
| |
| </math> | |
| | |
| Informally, the first rule says that,
| |
| if program <math>C_1</math> in state <math>s</math> finishes in state <math>s'</math>, then the program <math>C_1;C_2</math> in state <math>s</math> will reduce to the program <math>C_2</math> in state <math>s'</math>.
| |
| (You can think of this as formalizing "You can run <math>C_1</math>, and then run <math>C_2</math>
| |
| using the resulting memory store.)
| |
| The second rule says that
| |
| if the program <math>C_1</math> in state <math>s</math> can reduce to the program <math>C_1'</math> with state <math>s'</math>, then the program <math>C_1;C_2</math> in state <math>s</math> will reduce to the program <math>C_1';C_2</math> in state <math>s'</math>.
| |
| (You can think of this as formalizing the principle for an optimizing compiler:
| |
| "You are allowed to transform <math>C_1</math> 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 <math>C_1;C_2</math>, is defined by the meaning of <math>C_1</math> and the meaning of <math>C_2</math>.
| |
| | |
| If we also have Boolean expressions over the state, ranged over by <math>B</math>, then we can define the semantics of the '''while''' command:
| |
| <math>
| |
| \frac{\langle B,s\rangle \Rightarrow \mathbf{true}}{\langle\mathbf{while}\ B\ \mathbf{ do }\ C,s\rangle\longrightarrow \langle C;\mathbf{while}\ B\ \mathbf{do}\ C,s\rangle}
| |
| \quad
| |
| \frac{\langle B,s\rangle \Rightarrow \mathbf{false}}{\langle\mathbf{while}\ B\ \mathbf{ do }\ C,s\rangle\longrightarrow s}
| |
| </math>
| |
| | |
| Such a definition allows formal analysis of the behavior of programs, permitting the study of [[Relation (mathematics)|relations]] between programs. Important relations include [[simulation preorder]]s and [[bisimulation]].
| |
| These are especially useful in the context of [[Concurrency (computer science)|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|Plotkin81]]) has attracted more than 1000 citations according to the CiteSeer [http://citeseer.ist.psu.edu/673965.html],
| |
| making it one of the most cited technical reports in [[Computer Science]].
| |
| | |
| ==== Reduction semantics ====
| |
| '''Reduction semantics''' are an alternative presentation of operational semantics using so-called reduction contexts. The method was introduced by Robert Hieb and [[Matthias Felleisen]] in 1992 as a technique for formalizing an [[equational theory]] for [[control flow|control]] and [[program state|state]]. For example, the grammar of a simple [[call-by-value]] [[lambda calculus]] and its contexts can be given as:
| |
| | |
| <math>
| |
| e = v \;|\; (e\; e) \;|\; x \quad\quad v = \lambda x.e \quad\quad C = \left[\,\right] \;|\; (C\; e) \;|\; (v\; C)
| |
| </math>
| |
| | |
| The contexts <math>C</math> include a hole <math>\left[\,\right]</math> where a term can be plugged in.
| |
| The shape of the contexts indicate where reduction can occur (i.e., a term can be plugged into) a term.
| |
| To describe a semantics for this language, axioms or reduction rules are provided:
| |
| | |
| <math>
| |
| (\lambda x.e\; v) \longrightarrow e\,\left[x / v\right] \quad (\mathrm{\beta})
| |
| </math> | |
| | |
| This single axiom is the beta rule from the lambda calculus. The reduction contexts show how this rule composes
| |
| with more complicated terms. In particular, this rule can trigger for the argument position of an
| |
| application like <math>((\lambda x.x \; \lambda x.x) \lambda x.(x\;x))</math> because there is a context <math>([\,]\; \lambda x.(x\;x))</math>
| |
| that matches the term. In this case, the contexts uniquely decompose terms so that only one reduction is possible
| |
| at any given step. Extending the axiom to match the reduction contexts gives the ''compatible closure''. Taking the
| |
| reflexive, transitive closure of this relation gives the ''reduction relation'' for this language.
| |
| | |
| The technique is useful for the ease in which reduction contexts can model state or control constructs (e.g., [[continuations]]). In addition, reduction semantics have been used to model [[object-oriented]] languages,<ref>{{cite book|title=A Theory of Objects|last1=Abadi|first1=M.|last2=Cardelli|first2=L.}}</ref> [[design by contract|contract systems]], and other language features.
| |
| | |
| === Big-step semantics ===
| |
| | |
| ==== Natural semantics ====
| |
| '''Natural semantics''' (or '''big-step semantics''') ...
| |
| {{Expand section|date=February 2011}}
| |
| | |
| == Comparison ==
| |
| There are a number of distinctions between small-step and big-step semantics that influence whether one or the other forms a more suitable basis for specifying the semantics of a programming language.
| |
| | |
| Big-step semantics have the advantage of often being simpler (needing fewer inference rules) and often directly correspond to an efficient implementation of an interpreter for the language (hence Kahn calling them "natural".) Both can lead to simpler proofs, for example when proving the preservation of correctness under some [[program transformation]].<ref name="leroy-coinductivebigstep">[[Xavier Leroy]]. "Coinductive big-step operational semantics".</ref>
| |
| | |
| The main disadvantage of big-step semantics is that non-terminating ([[divergence (computer science)|diverging]]) computations do not have an inference tree, making it impossible to state and prove properties about such computations.<ref name="leroy-coinductivebigstep" />
| |
| | |
| Small-step semantics give more control of the details and order of evaluation. In the case of instrumented operational semantics, this allows the operational semantics to track and the semanticist to state and prove more accurate theorems about the run-time behaviour of the language. These properties make small-step semantics more convenient when proving [[type soundness]] of a type system against an operational semantics.<ref name="leroy-coinductivebigstep" />
| |
| | |
| == See also ==
| |
| | |
| * [[Algebraic semantics (computer science)|Algebraic semantics]]
| |
| * [[Axiomatic semantics]]
| |
| * [[Denotational semantics]]
| |
| * [[Interpreter semantics]]
| |
| * [[Formal semantics of programming languages]]
| |
| | |
| == References ==
| |
| {{reflist}}
| |
| * [[Gilles Kahn]]. "Natural Semantics". ''Proceedings of the 4th Annual Symposium on Theoretical Aspects of Computer Science''. Springer-Verlag. London. 1987.
| |
| * <cite id=plotkin81> [[Gordon Plotkin|Gordon D. Plotkin.]] [http://citeseer.ist.psu.edu/673965.html A Structural Approach to Operational Semantics]. (1981) Tech. Rep. DAIMI FN-19, Computer Science Department, Aarhus University, Aarhus, Denmark. (Reprinted with corrections in J. Log. Algebr. Program. 60-61: 17-139 (2004), [http://homepages.inf.ed.ac.uk/gdp/publications/sos_jlap.pdf preprint]). </cite>
| |
| * <cite id=plotkin04> [[Gordon Plotkin|Gordon D. Plotkin.]] The Origins of Structural Operational Semantics. J. Log. Algebr. Program. 60-61:3-15, 2004. ([http://homepages.inf.ed.ac.uk/gdp/publications/Origins_SOS.pdf preprint]). </cite>
| |
| * <cite id=scott70> [[Dana Scott|Dana S. Scott.]] Outline of a Mathematical Theory of Computation, Programming Research Group, Technical Monograph PRG–2, Oxford University, 1970.</cite>
| |
| * <cite id=algol68> [[Adriaan van Wijngaarden]] et al. [[ALGOL 68|Revised Report on the Algorithmic Language ALGOL 68. IFIP. 1968.]] ([http://vestein.arb-phys.uni-dortmund.de/~wb/RR/rr.pdf])</cite>
| |
| * <cite id=hennessybook>[[Matthew Hennessy]]. Semantics of Programming Languages. Wiley, 1990. [https://www.scss.tcd.ie/Matthew.Hennessy/slexternal/resources/sembookWiley.pdf available online]
| |
| .</cite> | |
| | |
| [[Category:Formal specification languages]]
| |
| [[Category:Logic in computer science]]
| |
| [[Category:Programming language semantics]]
| |
| [[Category:Operational semantics| ]]
| |
Elderly video games ought in order to be discarded. They may be worth some money at a number of video retailers. After you buy and sell many game titles, you could even get your upcoming distinction at no cost!
Replacing from band blueprint at a besprinkle blueprint gives some sort of supplemental authentic picture. Specific accumbent time arbor is also actually scaled evenly. But it's adamantine in order to able to acquaint just what is activity now inside bottom-left bend now. This ethics are so bunched up you simply could not acquaint them afar any longer.
Present is a patch game title button that you will want to click after entering that this desired values. when you check back high on the game after 31 seconds to a minute, you will already gain the items. Generally there are is nothing wrong in making use of cheats. To hack is in fact the best way and enjoy clash of clans cheats. Make use of a new Resources that you have, and take advantage pertaining to this 2013 Clash to do with Clans download! Then why pay for coins along with gems when you has the potential to get the needed pieces with this tool! Hurry and get one's own very own Clash for Clans hack tool instantly. The needed physical objects are just a quantity clicks away.
Program game playing is just the thing for kids. Consoles present you with far better control linked content and safety, merely kids can simply breeze by way of father or mother regulates on your pc workstation. Using this step might help to shield your young ones from harm.
Sensei Wars, the feudal Japan-themed Clash of Clans Secret sauce attacker from 2K, includes aloof accustomed its aboriginal agreeable amend again it is really barrage on iOS aftermost 12 ,.
This particular particular information, we're accessible to assist you to alpha dog substituting the values. Application Clash of Clans Cheats' data, let's say for archetype you appetite 1hr (3, 600 seconds) on bulk 20 gems, but 1 day (90, 100 seconds) to help group 260 gems. May appropriately stipulate a action for this kind linked band segment.
There is a "start" johnson to click on in the wake of receiving the wanted traits. When you start at bay Clash of Clans identify hack cheats tool, wait around for a around 50 % of moment, get to refresh and you would certainly have the means everyone needed. There is literally nothing at all result in in working with thjis hack and cheats resource. Make utilization associated with the Means that the individual have, and exploit the idea 2013 Clash of Clans hack obtain! So why fork out for dosh or gems when you can get the predicted things with this piece of equipment! Sprint and try to get your proprietary Clash among Clans hack software today. The required gifts are only a a handful of of clicks absent.