游戏,全抽象和完整的完整性(一)
计算机程序是特殊的文本。 因此,自然地问程序的含义是什么,或者更一般地,我们如何建立编程语言的正式语义帐户。
这些问题有许多可能的答案,每个问题都是由某些特定方面的程序而激励。 因此,例如,在某些计算机机上执行程序的事实产生了操作语义,而数学逻辑的正式语言的编程语言的相似性具有激励解释计划及其成分的指示方法通过设定理论模型。
这些帐户中的每一个都会引起自己的编程语言的短语的同义词关系:简而言之,完整抽象属性指出表示和操作方法定义相同的关系。 这是编程语言的语义账户的基准属性,并且基于Lambda-Calmulus的简单语言的直观表示的直观表示的失败最终导致了在游戏中最终引起的语义语义的技术工具的改进由Lorenzen及其学校的直觉逻辑语义中使用的对话游戏部分启发了语义,后来延伸到幻想和其他人的解释,以解释Girard的线性逻辑。 建设性逻辑和编程之间的这一桥梁还建议了语义和校验理论之间的形式更强大,其中完全完整性的概念可能是最显着的实例。
1.简介
1.1编程语言的解释
1.2合成性
1.3程序等价和全抽象
2.顺序高阶计算:PCF的全抽象问题
2.1 PCF语法
2.2运行语义
2.3表示语义
2.3.1类型作为域
2.3.2高级可计算功能的抽象理论
2.3.3 PCF的连续语义
2.4有关操作和表示语义
2.5朝向连续语义
2.5.1稳定性
2.5.2顺序函数
2.5.3混凝土数据结构和顺序算法
2.6历史记录和进一步读数
3.游戏语义
3.1完整的完整性
3.2互动
3.3游戏和策略
3.3.1游戏
3.3.2策略及其构成
3.4特殊策略
3.5历史记录和进一步读数
参考书目
学术工具
其他互联网资源
相关条目
1.简介
1.1编程语言的解释
从Scott-Strachey方法概念到编程语言的语义分析(Scott&Strachey 1971; Strachey 1966,1967)的语义分析,也称为指示性语义。 一个编程语言L表示语言的一个基本目的L是给出L作为抽象数学结构(域)D的元素的程序短语的组成解释M:L→D.
我们可以根据其执行选择另一种赋予程序意义的方法。 该操作解释仅在L的程序集中定义,并且涉及适当的程序值集的定义,这些程序值是L的可观察。如果程序E的执行终止于价值V,则表示e⇓v表示的情况,那么v是e的运作含义。 这将程序的操作解释定义为从程序到值的部分函数o,其中o(e)= v时e⇓v。
这两种解释都诱导了对方案短语的自然等效关系。 在其其中一个配方中,全抽象指出了由操作语义引起的语言的指示当量的巧合。 Robin Milner(1975)首先首先在纸上定义了全部抽象,这也暴露了必不可少的语义语义:构思性的基本概念成分,以及观察性和方案的指示性等同物之间的关系。 出于这个原因,可以将完整抽象作为有利的编程语言语义景观中的有利度,因此与编程语言哲学(2004年)和计算机科学(Turner 2016)的核心问题非常相关。
1.2合成性
合成性(Szabó2013)是对编程语言的语义分析的理想特征,因为它允许人们计算程序的含义作为其成分的含义。 实际上,在Milner的账户中(特别是1975年:SEC。1,4),通过适当的组合操作,组成更普遍地应用于从较小的计算器组装的计算代理。 除了程序之外,这些代理可以包括依次由存储器组成的计算机等计算机,以及所有组件是计算代理的计算机组成的计算机。 这允许其中包括在一个由硬件组成的一个框架系统中,软件甚至两者兼而有之。 现在,定义局部定义的语法规则的编程语言的各类短语允许我们将L视为程序短语的代数,其签名由这些规则决定。 一个特别适用于现在的环境的合成性(Szabó2013:秒2)识别与该代数从该代数的同态的方案的组成解释,以与计划A的代数的每一个操作相关联关于表示的相应语义操作。
例如,考虑一种简单的命令语言,其程序C表示状态变换M(c):σ→σ。 在这种语言的程序中的操作中,有程序组成,建立程序C1; C2来自程序C1和C2。 该程序的预期操作含义是,如果从状态σ∈σ开始执行C1;我们首先执行C1起始形式状态σ。 如果执行终止我们获取状态σ',则从中开始执行C2的执行,如果执行终止,则σ“。 后一个状态是通过执行C1的状态达到; C2从状态σ。 从一个表示的角度来看,我们在函数σ→σ上的运作,通过以下身份给出了我们的程序的组成解释,通过诱导程序的归纳作为M的定义的条款:
是(c1,c2的)=是(c2的)∘m(c1)
或者,更明确地,对于任何州σ:
是(c1,c2的)(σ)=是(c2的)(是(c1)(σ))。
由于大多数编程语言有几个类别的短语(例如表达式,声明,指示)程序的代数通常将多排序,每个类别的短语都有一个。 表示语义语义系统地追求与每个节目短语联合关联的想法,该词组是匹配排序的表示(参见STOY 1977进行早期账户)。
1.3程序等价和全抽象
对编程语言L的解释的存在以标准方式引导了程序短语的等价性:
定义1.1(表示当量)。 给定任何两个程序短语e,e',它们是表示性的,当m(e)= m(e')时,它们表示相同的,写入e≃me'。
如果m是组成的,则≃m是在程序的代数上的同时,其导出的操作,通过签名的操作组成而获得的那些称为上下文。 背景C []表示具有“孔”的程序短语,该程序短语可以由适当类型的程序短语e填充以产生程序短语C [E]。 通过上下文,我们可以轻松地描述语义映射的组成性:
命题1.1。 如果m是组成,则为所有短语e,e'和所有上下文c []:
e≃me'⇒c[e]≃mc[e']。
该配方突出了组成性的另一个有价值的方面,即所有上下文的借述透明度,同等地,它们的扩展性:表示等同的短语可以在任何上下文中被替换,留下不变的表示结果的表示。 特别地,暗示(1)≃m是一致的。 因此,为了比较表示和运营的一致性,我们必须在通过设置e e_e'且仅当O(e)= O(e')来雕刻出来的同时。 这可以通过利用程序上下文C []来完成,表示具有“孔”的程序,该程序可以由合适类型的程序短语e填充,以产生完整的程序C [E]。
定义1.2(观察等价物)给定任何两个程序短语e,e',它们是观察到的等价物,写入e≃oe',何时,对于所有程序上下文c []和所有程序值v:
C [e]⇓v如果才能且仅在c [e']⇓v。
观察等价物然后是在程序短语的代数上的同时,实际上它是〜〜。 从Milner(1975)账户的一般角度来看,我们正在紧跟以下,计算代理的上下文代表其可能的环境之一。 如果我们采用“公开行为构成了计算代理的整个含义”的原则(Milner 1975:160),则上下文表示我们可以对计算代理的行为所构成的观察结果。 在程序的情况下,可观察到是值,因此观察等价识别不能通过观察结果来区分的短语,其结果是不同的价值。 Milner的方法原则的一种后果是计算代理人成为一个
传感器,其输入序列由其环境的询问或其环境的响应组成,其输出序列包括对其环境的查询或回复。 (Milner 1975:160)
计算代理的行为是代理及其环境之间对话的形式,这是一个隐喻,这是在第3节中讨论的游戏理论方法的核心。这种行为姿态,其在有限的工程师工作中有其根源状态设备也被Milner扩展到模拟并发系统的方法,目的
要描述一个并发系统,可以完全通过外部观察者确定或经历的行为。 因此,这种方法是彻底的宽; 如果我们不能分开,两个系统就无法区分,而不会将它们分开。 (Milner 1980:2)
此外,系统和观察者的角色是对称的,在这种程度上
我们想将观察者代表为机器,然后将复合观察者/机器代表为机器,然后了解这台机器的行为如何用于新观察者。 (Milner 1980:19)
虽然观察等价是对计算剂的内部细节视而不见,但仅观察其与其环境的可能相互作用,其中它采用部分,指向计算代理的内部结构以及以组成方式合成其内部部件的描述。 完全抽象的概念精确旨在捕捉这些双重视角的巧合:
定义1.3(完整抽象)。 如果诱导的等效性≃m和≃o重合,则表示语义语义m是针对操作语义o的完全摘要。
作为调查程序属性的工具,可以将完整抽象视为表示语义的完整性属性:可以通过表示手段来证明可以在操作中证明的每种等价性。 等效地,两个术语不等同的指示证明就足以表明它们在每个程序上下文中都不可互换。
完全抽象还用作评估从语言L1到(不一定不同)语言L2的转换θ的标准,只要这两种语言都具有相同的可观察名称,例如OB(Riecke 1993)。 然后,如果e,e'111的观察等价(定义的观察等价(相对于Obs定义)相当于L2中的θ(e),θ(e')的观察等价,则θ是完全抽象的。 语言之间完全抽象的翻译的存在可以使用(Mitchell 1993; Riecke 1993):如果L1进入L2的完全摘要翻译,则L1没有比L2更具表现力的表达的表现力。
在继续前进之前,在编程语言中的全部抽象和相关概论介绍语言语言中,为了展示这些概念的广泛相关性,有趣的是观察有一个非常普遍的设置,其中有可能研究完整的抽象属性,最近建议Hodges(2001)和其他人的自然和人造语言组成性的调查。 在这个设置中,全抽象是通过Frege的上下文原则查找语言X的语义X的语义解释的语义解释的问题的问题,并通过Frege的上下文原则(在此上看詹森2001),说明了一个Y中的表达是它对包含它的X表达式的含义的贡献。 在由Frege X的原始制定中是一组句子和y的所有表达式,而在编程理论x中是一组程序,y为所有程序短语的集。
对全抽象的定义的弱化代表了一种语言解释的基本充分要求:
定义1.4(计算充足性)。 对于所有程序E和所有值v,如果为操作语义o计算,则表示语义语义m是适当的
o(e)= v IF且仅if(e)= m(v)。
等效配方的计算充足率允许突出显示其与全抽象的关系:
命题1.2。 假设M是组成表示的解释,使得O(E)= V意味着M(e)= M(v)。 以下两个陈述是等效的:
m在计算上相对于o提供足够的;
对于任何两个程序e,e'∈prog,
e≃me'of of,只有e≃oe'
虽然完整抽象属性的定义是简单的,但全抽象模型对于非常自然的编程语言示例已经难以捉摸,从而产生了完整的抽象问题。 在我们对全抽象的讨论中,我们将主要专注于语言PCF的全部抽象问题(可计算功能的编程语言,Plotkin 1977),简单地键入的λ-微积分,具有算术基元和所提出的所有类型的固定点组合器斯科特1969B。 这种语言很重要,因为它包括大多数编程功能语义分析必须应对:高阶函数,类型和递归,减少规则,为试验有几种评估策略提供抽象设置。 此外,PCF也是用于实验用于试验编程特征的简单类型λ-commulus的其他扩展的模型,如雷诺的理想化藻类(1981)。 为PCF提供全抽象问题的努力,作为副作用,作为副作用,系统开发一组数学分析的数学技术,其有用性超出其原始应用。 我们将在第2节中描述其中一些,致力于基于部分有序的结构的PCF的语义分析,Dana Scott(1970)引入的域,我们在第2.3节中检查。 领域的技术发展以及在新的研究领域侧重讲的新研究面积,专注于Girard线性逻辑(Girard 1987)导致了游戏语义(Abramsky,Jagadeesan,Malacaria 2000; Hyland&Ong 2000),现在被认为是基于域的标准表示语义的可行替代品。 这是这种方法,我们将致力于在广泛且仍在不断增长的文献中向读者提供足够的细节,以记录游戏的应用来解释广泛的编程语言特征。
2.顺序高阶计算:PCF的全抽象问题
完全抽象问题已经证明,对于简单类型的λ-微积分,具有名为PCF的算术基元(具有可计算功能的编程)(Plotkin 1977),一种基于Scott(1969)的可计算功能的玩具编程语言,和Milner(1973)。 在本节中,我们介绍(一种版本)的语言,具有其运行和表示语义,并概述了这种语言的全抽象问题如何。 该问题一直是大约二十年来编程语言的理论调查的主要问题之一,从地标论文(Milner 1977; Plotkin 1977)到1993年提出的第一个解决方案(Abramsky等人。2000; Hyland&Ong 2000)使用游戏语义,参见第3节。
2.1 PCF语法
PCF是一种基于简单类型的λ-微积分的语言,扩展了算术和布尔原语,其类型系统相应地定义:
定义2.1(PCF类型)。 PCF的设置类型的类型如下所定义
地面类型数量(用于代表自然数的术语),BOOL(用于代表布尔值的术语)是类型的,
如果σ,τ是类型,则(σ→τ)也是一种类型。
随时将省略括号,与右侧相关的惯例,使得类型σ1→⋯σn→τ等效于(σ1→(Σ2→(Σn→τ)⋯)))
PCF术语是简单地键入的λ-calculus的术语,其中指示类型的以下算术常数扩展:
型号的常数0,表示自然数0;
Num→Num的恒定SAM表示继承人函数的自然数;
数字→Num类型的常数pred,其代表了基于自然数的前任函数;
BOOL类型TT和FF;
Bool类型→Num→Num→Num→Num和Bool→Bool→Bool→Bool分别为类型的类型和类型Bool的条件结果;
恒定零? 对于Type Num→Bool的零测试;
用于固定点组合器的一元函数符号Y(⋅),其中y(e):σ用于任何e:σ→σ。
术语根据允许推断b⊢e:σ的判断的规则进行电感地构建:术语E在假设下,在e中自由发生的变量以基于形式的唯一类型提供典型的类型
{的x1:σ1,...,xk:σk}。
因此,构建PCF术语的规则是此类判断的推断规则。 特别地,有于键入的常量规则,例如在任何基础上都有一个判断b⊢zero?:num→bool,我们有键入的λ - 抽象的规则
b,x:σ⊢e:τ
b⊢λx:σ.e:σ→τ
和应用程序
b⊢e1:σ→τb⊢e2:σ
b⊢e1e2:τ
以及固定点运算符的规则:
b⊢e:σ→σ
b⊢y(e):σ
。
2.2运行语义
PCF程序是接地类型的闭合项。 我们指定如何通过在封闭项E和值v之间定义评估关系e⇓v来执行节目的方式,其中值是表单λx:σ.e的常量和抽象。 特别地,地面BOOL的值是TT,FF和地面类型的值为0和所有形式的条款
n =
succ(... succ
⏟
n
(0)...)。
评估是根据术语结构的案件定义,通过推理规则进行e⇓v判决。 这些规则说明评估术语的结果如何取决于其他术语的评估结果,唯一的v⇓v的唯一公理v。例如有规则
e⇓v
SUCCe⇓succv
那么,如果E的评估结果是v,那么Succ E评估的结果是Sucm v。类似地,我们可以描述对其他常数的评估。 评估E1 E2形式的术语如下所述:第一个E1评估; 如果评估终止于值V',则E1 E2的评估与V'E2的评估进行; 如果这终止于值V,则这是e1 e2,正式的值
e1⇓v'v
E1e2⇓v
对于表单λx:σ.e1的值,其对术语E2的施用具有通过通过从E2代替e1中的所有自由发生的X术语来评估术语E1 [E2 / X]而获得的值(如果有的话):
素e1 [e2的/ x]⇓v
(λx:σ.e1)e2⇓v
。
这些实现呼叫名称呼叫评估策略:在一个应用程序中,必须在参数位置中的术语之前完全进行函数位置中的术语,然后将其作为实际参数传递。 固定点组合器对递归定义的编码至关重要。 其评估由规则描述
e(y(e))⇓v
y(e)⇓v
这是唯一的规则,其主题涉及评估大学的评估而不是被评估的术语:这就是为什么评估关系的定义不能降低到结构诱导。
当术语E的评估没有价值时,我们将特别感兴趣; 在这些情况下,我们说e发出,并写作e⇑。 它存在不同的术语,即曝光评估过程的因果结构。 最初的例子实际上是一个在非常强烈的意义上发散的术语:
定义2.2(未定义)。 对于任何地面γ,定义ω:γa
y(λx:γ.x)
通过检查评估规则,我们看到唯一可能的评估过程会产生无限的回归,因此ω⇑。
我们可以通过条件运算符定义通常的布尔操作,如以下示例所示:
和。=λx:bool,y:bool.if x然后y els ff。
或。=λx:bool,y:bool.if x然后tt y
与通常的真相表。 但是,我们现在已经考虑了评估过程的发散的可能性,例如在一个术语中或(ω,tt)中,我们通过添加新的布尔值来扩展通常的真理表,表示没有信息,⊥(读为“未定义”)到TT和FF,作为术语ω的值。 这里,要评估的第一个参数是左侧的参数,如果对这一发散的评估,那么整个评估过程发散。 现在考虑桌面给出的解释的操作员POR
上电复位tt ff⊥
tt tt tt tt
ff tt ff⊥
⊥tt⊥⊥
在这种情况下,POR(TT,Ω)= POR(ω,TT)= TT:这是并行 - 或在PCF的完整抽象问题中起作用的核心作用。 它将结果是任何PCF术语都不能定,正是因为它的平行性质。 为了执行PCF的语义分析,我们需要一个数据类型的理论,其中包括通过固定点方程支持递归定义的抽象形式的功能:这是斯科特的域理论,原始数学基础在斯科特的域名,原始数学基础。Strachey构思的编程语言的语义(1966,1967)。