簡體   English   中英

操作語義、指稱語義和公理語義有什么區別?

[英]What is the difference between operational, denotational and axiomatic semantics?

在閱讀有關計算機科學和編程語言的論文時,我經常偶然發現術語指稱語義操作語義 有時,但很少,我也發現公理化的。 雖然我知道語義是什么,但我不明白這三者之間的區別——實際的分類是什么?

一些示例將非常有用。

這直接來自 Glynn Winskel(麻省理工學院出版社,1993 年)的精彩著作《編程語言的形式語義學》的序言:

操作語義通過指定編程語言在抽象機器上的執行方式來描述編程語言的含義。 我們專注於 Gordon Plotkin 在他在 Aarhus 的關於“結構操作語義”的講座中提倡的方法,其中評估和執行關系由規則以語法指導的方式指定。

指稱語義是一種定義編程語言含義的技術,由 Christopher Strachey 開創,並由 Dana Scott 提供了數學基礎。 它曾一度被稱為“數學語義”,它使用更抽象的數學概念,如完全偏序、連續函數和最小不動點。

公理語義試圖通過在程序邏輯中為其提供證明規則來修復編程構造的含義。 與此方法相關的主要名稱是 R.W.Floyd 和 C.A.R.Hoare。 因此,公理化語義從一開始就強調正確性的證明。

因此,這些是推理程序含義的不同方法,總體目標是能夠證明特定程序“正確”工作。 它們並不相互對立:每種技術都有其用途,並且通常可以一起用於研究各個方面。 例如,在推理 Haskell 時,通常使用純片段的指稱方法(本質上是遞歸函數),以及推理 IO 和並發的操作方法。 典型的命令式語言(Pascal 或 C 之類的)通常使用公理語義以最弱前提條件的形式推理正確性。

我強烈建議您閱讀 Winskel 的書,如果您能掌握它,因為它提供了對所有三種技術的詳細但非常易於理解的說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM