Loading AI tools
来自维基百科,自由的百科全书
在電腦科學中,指稱語意(英語:Denotational semantics)是通過構造表達其語意的(叫做指稱(denotation)或意義的)數學對象來形式化電腦系統的語意的一種方法。程式語言的形式語意的其他方法包括公理語意和操作語意。指稱語意方式最初開發來處理一個單一電腦程式定義的系統。後來領域擴充到了由多於一個程式構成的系統,比如網絡和並行系統。
指稱語意起源於 克里斯托弗·斯特雷奇 和 Dana Scott 在1960年代的工作。在 Strachey 和 Scott 最初開發的時候,指稱語意把電腦程式的指稱(意義)解釋為對映輸入到輸出的函數。後來證明對於允許包含遞歸定義的函數和數據結構,這樣的元素的程式的指稱(意義)定義太受限制了。為了解決這個困難,Scott 介入了基於域的指稱語意的一般性方法(Abramsky and Jung 1994)。後來的研究者介入了基於冪域的方法,來解決並行系統的語意的問題(Clinger 1981)。
粗略的說,指稱語意關注找到代表程式所做所為的數學對象。這種對象的搜集叫做域。例如,程式(或程式段)可以被偏函數,或演員事件圖想定,或用環境和系統之間的博弈表示: 它們都是域的一般性例子。
指稱語意的一個重要原則是「語意應當是複合性的」: 程式段的指稱應當建立自它的子段的指稱。最簡單的例子是: 「3 + 4」的意義確定自「3」、「4」和「+」的意義。
指稱語意最初被開發為把函數式和順序式程式建模為對映輸入到輸出的數學函數的框架。本文第一節描述在這個框架內開發的指稱語意。後續章節處理多型、並行等問題。
在本節中我們概覽作為指稱語意的最初主題的函數式遞歸程式的語意。
問題如下。我們需要給予程式如階乘函數的定義以語意
這個階乘程式的意義應當是在自然數上一個函數,但是由於它的遞歸定義,如何以複合方式理解它是不明白的。
在遞歸的語意中,域典型的是偏序,它可以被理解為已定義性(definedness)的次序。例如,在自然數上的偏函數的集合可以給出為如下次序:
通常假定這個域的某個性質,比如鏈的極限的存在性(參見cpo)和一個底元素。偏函數的偏序有一個底元素,完全未定義函數。它還有鏈的最小上界。各種額外性質經常是合理的和有用的: 在域理論條目中有更詳盡細節。
我們特別感興趣於在域之間的「連續」函數。它們是保持次序結構和保持最小上界的函數。
在這種設置下,類型被指示為域,而域的元素粗略的擷取了類型的元素。給予帶有自由變數的一個程式段的指稱語意,依據它從它的環境類型的指稱到它的類型的指稱的連續函數。例如,段落 n*g(n-1) 有類型 Nat,它有兩個自由變數: Nat 類型的n 和 Nat -> Nat 類型的 g。所以它的指稱將是連續函數
在這個偏函數的次序下,可以如下這樣給出階乘程式的指稱。首先,我們必須開發基本構造如 if-then-else, ==, 和乘法的指稱。還必須開發函數抽象和應用的指稱語意。程式段
可以接着被給予作為在偏函數的域之間的連續函數的一個指稱
階乘程式的指稱被定義為函數 F 的最小不動點。它因此是域 的一個元素。
這種不動點存在的原因是 F 是連續函數。一種版本的Tarski不動點定理聲稱在域上的連續函數有最小不動點。
證明不動點定理的一種方式給出了為什麼以這種方式給出遞歸的語意合適的直覺認識,所有在域 D 的帶有底元素 ⊥ 的連續函數 F:D→D 都有不動點,它給出自
這裏的符號 Fi 指示 F 的 i 次應用。符號「⊔」意味着「最小上界」。
把這個鏈的構件認為是「迭代」的有益的。在上述階乘的情況下,我們有在偏函數的域上的函數 F。
所以這個鏈的最小上界是完全定義的階乘函數(它湊巧是全函數)。
通過研究程式語言的更精細的構造和不同的計算模型,指稱語意已經發展起來了。
狀態(比如堆)和命令特徵可以直接用上述指稱語意來建模。下面列出的所有教科書都有詳情。關鍵想法是把命令當作在某個狀態域上的偏函數。「x:=3」的指稱是使一個狀態成為帶有 3 被賦值給 x 的狀態。順序算符「;」被指示為函數複合。不動點構造被用來給予迴圈構造如「while」的語意。
在建模有局部變數的程式的時候事情變得更加困難。一種途徑是不在使用域,轉而把類型解釋為從世界的範疇到域的範疇的函子。程式被指示為在這些函子之間的自然連續函數。[1][2]
很多程式語言允許用戶定義遞歸資料類型。例如,數的列表的類型可以指定為
本節只處理不能變更的泛函數據類型。常規程式語言將典型的允許這種遞歸列表的元素被變更。
另一個例子: 無類型 lambda 演算的指稱為
「解域方程」問題關注找到建模這類資料類型的域。有一種途徑,粗略的說把所有域的搜集自身當作一個域,並接着在這裏解這個遞歸定義。下面的教科書給出詳情。
多型資料類型是定義時帶有參數的資料類型。比如 α lists 的類型被定義為
數的列表,接着是有類型 Nat list,而字串的列表有類型 String list。
一些研究者開發了多型性的域理論模型。其他研究者還在構造性集合論內建模了參數化多型。詳情可見下面列出的教科書。
一個新近研究領域已經涉及了基於程式語言的對象和類的指稱語意。[3]
隨着基於線性邏輯的程式語言的開發,指稱語意已經被給予了線性使用(參見 證明網、一致空間)和多項式時間複雜性的語言[4]。
要給出非確定性程式順序程式指稱語意,研究者已經開發出了冪域理論。對冪域構造寫上 P,域 P(D) 是指示為 D 的類型的非確定性計算的域。
在非確定性域理論模型中在公正性和無界性上有困難。[5]參見非確定性的冪域。
很多研究者爭論說域理論模型不擷取並行計算的本質。為此介入各種新模型。在 1980 年代早期,人們開始使用指稱語意的方式給予並行語言以語意。例子包括Will Clinger 關於演員模型的工作;Glynn Winskel 關於事件結構和petri網的工作 [6];和 Francez, Hoare, Lehmann 和 de Roever (1979) 關於CSP 的跟蹤語意的工作。對所有這些工作的質詢仍在研究中。
順序程式語言 PCF 的完全抽象問題是在指稱語意中長時間的重要的開放問題。PCF 的困難在它是絕對的順序語言。例如,在 PCF 中無法定義並列或函數。為此如上述介紹的使用域的方式,產生了不是完全抽象的指稱語意。
把一個程式語言轉換成另一個語言經常是有用的。例如一個並行程式語言可被轉換成行程演算;高階程式語言可以被轉換成位元組碼(實際上,常規指稱語意可以被看作把程式語言解釋成域的範疇的內部語言)。
完全抽象的概念關心程式的指稱語意是否精確的匹配它的操作語意。完全抽象的關鍵性質有:
我們希望在操作語意和指稱語意之間的額外想要的性質有:
在指稱語意中長期存在的重點是完全抽象存在於歸納類型中,特別是自然數的類型,作為接受用做遞歸的一種方法的類型。這個問題的傳統解釋是作為系統 PCF語言的語意。在 1990年代成功的用博弈語意為 PCF 提供了完全抽象模型,導致了對指稱語意的工作在方式上的根本改變。
依據 Dana Scott [1980]:
依據 Clinger [1981]:
如前面提到過的,這個領域最初由 Christopher Strachey 和 Dana Scott 在 1960年代,接着由 Joe Stoy 在 1970年代於「Oxford University Computing Laboratory」的「Programming Research Group」開發。
Montague文法是英語的理想片段的某種形式的指稱語意。
某些指稱語意的著作把類型解釋為域理論意義上的域,因而可以被看作模型論的分支,導致了同類型論和範疇論的聯絡。在電腦科學內與抽象釋義、程式驗證和函數式程式設計有聯絡,參見函數式程式設計語言中的單子(monad)。特別是,指稱語意使用了續體(continuation)來依據函數式程式設計語意表達順序編程中的控制流。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.