首页 > 
				操作语义学
✍ dations ◷ 2025-11-01 04:10:14 #操作语义学
				操作语义学是计算机科学中的一个概念,它是使得计算机程序在数学上更加严谨的一种手段。其它类似的手段包括提供形式语义学,包括公理语义学和指称语义。一个计算机语言的操作语义描述一段合理的程序是怎样被理解为一系列计算机步骤的。这些步骤就是这个程序的意义。在函数编程语言中一段终结性的序列在最后一步的返回程序的值。(由于一个程序可能是非非决定的,一般来说一个程序能够有许多不同的计算步骤和许多不同的返回值。)操作语义最早被用来定义Algol 68的语义。下面这句话引用修正的ALGOL 68报告:一个使用严格语言编写的程序的意义是通过一个假设的计算机来执行该程序的组成部分时完成的行动来解释的。(Algol68,第二章)丹纳·司科特是第一个在今天的这个定义下使用操作语义这个概念的(Plotkin04b)。以下是司科特关于形式语义学的讲稿,其中他提到了语义的“操作”观点。把目光注意使得语义在更‘抽象’和更‘清晰’可以,但是假如把操作方面完全忽略的话这个计划毫无用处。(Scott70)戈登·普罗特金(Gordon Plotkin)在(Plotkin04a)中引入了结构操作语义的概念作为一个定义操作语义的逻辑方式。其基本主意是使用程序组成部分的行为来定义一个程序的行为,由此来提供一个对操作语义结构性的,即按照句法和归纳性的,分析。结构操作语义对一个程序的行为的说明是通过一(组)变化关系来表示的。其形式是一系列推理规则,这些推理规则通过一组句法的转换来定义该组的合理转换。比如我们考虑一个简单计算机语言的部分语义,在Plotkin04a和Hennessy90以及其它教科书中有相应的图像。设
  
    
      
        
          C
          
            1
          
        
        ,
        
          C
          
            2
          
        
      
    
    {displaystyle C_{1},C_{2}}
  
为该语言的程序域,
  
    
      
        s
      
    
    {displaystyle s}
  
是状态域(即函数的存储地址及值)。假如我们有表述(
  
    
      
        E
      
    
    {displaystyle E}
  
的域)、值(
  
    
      
        V
      
    
    {displaystyle V}
  
)和存储地址(
  
    
      
        L
      
    
    {displaystyle L}
  
),则一个存储更新指令的语义为:
  
    
      
        
          
            
              ⟨
              E
              ,
              s
              ⟩
              ⇒
              V
            
            
              ⟨
              L
              :=
              E
              
              ,
              
              s
              ⟩
              ⟶
              (
              s
              ⊎
              (
              L
              ↦
              V
              )
              )
            
          
        
      
    
    {displaystyle {frac {langle E,srangle Rightarrow V}{langle L:=E,,,srangle longrightarrow (suplus (Lmapsto V))}}}使用普通语言,这个公式说假如在
  
    
      
        s
      
    
    {displaystyle s}
  
状态的
  
    
      
        E
      
    
    {displaystyle E}
  
的值为
  
    
      
        V
      
    
    {displaystyle V}
  
则程序
  
    
      
        L
        :=
        E
      
    
    {displaystyle L:=E}
  
会通过
  
    
      
        L
        =
        V
      
    
    {displaystyle L=V}
  
更新
  
    
      
        s
      
    
    {displaystyle s}
  
的状态。系列的语义可以用下列规则来表达:
  
    
      
        
          
            
              ⟨
              
                C
                
                  1
                
              
              ,
              s
              ⟩
              ⟶
              ⟨
              
                C
                
                  1
                
                ′
              
              ,
              
                s
                ′
              
              ⟩
            
            
              ⟨
              
                C
                
                  1
                
              
              ;
              
                C
                
                  2
                
              
              
              ,
              s
              ⟩
              ⟶
              ⟨
              
                C
                
                  1
                
                ′
              
              ;
              
                C
                
                  2
                
              
              
              ,
              
                s
                ′
              
              ⟩
            
          
        
        
        
          
            
              ⟨
              
                C
                
                  1
                
              
              ,
              s
              ⟩
              ⟶
              
                s
                ′
              
            
            
              ⟨
              
                C
                
                  1
                
              
              ;
              
                C
                
                  2
                
              
              
              ,
              s
              ⟩
              ⟶
              ⟨
              
                C
                
                  2
                
              
              ,
              
                s
                ′
              
              ⟩
            
          
        
        
        
          
            
            
              ⟨
              
                s
                k
                i
                p
              
              ,
              s
              ⟩
              ⟶
              s
            
          
        
      
    
    {displaystyle {frac {langle C_{1},srangle longrightarrow langle C_{1}',s'rangle }{langle C_{1};C_{2},,srangle longrightarrow langle C_{1}';C_{2},,s'rangle }}quad {frac {langle C_{1},srangle longrightarrow s'}{langle C_{1};C_{2},,srangle longrightarrow langle C_{2},s'rangle }}quad {frac {}{langle mathbf {skip} ,srangle longrightarrow s}}}第一个规则说假如处于状态
  
    
      
        s
      
    
    {displaystyle s}
  
的程序
  
    
      
        
          C
          
            1
          
        
      
    
    {displaystyle C_{1}}
  
可以被简化为处于状态
  
    
      
        
          s
          ′
        
      
    
    {displaystyle s'}
  
的程序
  
    
      
        
          C
          
            1
          
          ′
        
      
    
    {displaystyle C_{1}'}
  
的话则处于状态
  
    
      
        s
      
    
    {displaystyle s}
  
的程序
  
    
      
        
          C
          
            1
          
        
        ;
        
          C
          
            2
          
        
      
    
    {displaystyle C_{1};C_{2}}
  
能被简化为处于状态
  
    
      
        
          s
          ′
        
      
    
    {displaystyle s'}
  
的程序
  
    
      
        
          C
          
            1
          
          ′
        
        ;
        
          C
          
            2
          
        
      
    
    {displaystyle C_{1}';C_{2}}
  
。第二个规则说假如处于状态
  
    
      
        s
      
    
    {displaystyle s}
  
的程序
  
    
      
        
          C
          
            1
          
        
      
    
    {displaystyle C_{1}}
  
以状态
  
    
      
        
          s
          ′
        
      
    
    {displaystyle s'}
  
结束的话,则处于状态
  
    
      
        s
      
    
    {displaystyle s}
  
的程序
  
    
      
        
          C
          
            1
          
        
        ;
        
          C
          
            2
          
        
      
    
    {displaystyle C_{1};C_{2}}
  
可以简化为处于状态
  
    
      
        
          s
          ′
        
      
    
    {displaystyle s'}
  
的程序
  
    
      
        
          C
          
            2
          
        
      
    
    {displaystyle C_{2}}
  
。这里的语义是结构化的,因为程序序列
  
    
      
        
          C
          
            1
          
        
        ;
        
          C
          
            2
          
        
      
    
    {displaystyle C_{1};C_{2}}
  
的意义是由
  
    
      
        
          C
          
            1
          
        
      
    
    {displaystyle C_{1}}
  
的意义和
  
    
      
        
          C
          
            2
          
        
      
    
    {displaystyle C_{2}}
  
的意义定义的。假如我们还有状态的布尔函数表示
  
    
      
        B
      
    
    {displaystyle B}
  
的话我们可以定义while指令的语义:
  
    
      
        
          
            
              ⟨
              B
              ,
              s
              ⟩
              ⇒
              
                t
                r
                u
                e
              
            
            
              ⟨
              
                w
                h
                i
                l
                e
              
               
              B
               
              
                d
                o
              
               
              C
              ,
              s
              ⟩
              ⟶
              ⟨
              C
              ;
              
                w
                h
                i
                l
                e
              
               
              B
               
              
                d
                o
              
               
              C
              ,
              s
              ⟩
            
          
        
        
        
          
            
              ⟨
              B
              ,
              s
              ⟩
              ⇒
              
                f
                a
                l
                s
                e
              
            
            
              ⟨
              
                w
                h
                i
                l
                e
              
               
              B
               
              
                d
                o
              
               
              C
              ,
              s
              ⟩
              ⟶
              s
            
          
        
      
    
    {displaystyle {frac {langle B,srangle Rightarrow mathbf {true} }{langle mathbf {while}  B mathbf {do}  C,srangle longrightarrow langle C;mathbf {while}  B mathbf {do}  C,srangle }}quad {frac {langle B,srangle Rightarrow mathbf {false} }{langle mathbf {while}  B mathbf {do}  C,srangle longrightarrow s}}}这样的定义允许对程序行为进行公式化的分析和研究程序间的关系。由于结构操作语义看上去非常易懂,结构简单,因此它获得了很大的欢迎,实际上成为定义操作语义的标准。结构操作语义最初的报告因此获得了约900次引用,成为计算机科学中被引用最多的技术报告之一。    
				相关
- 免疫学人体解剖学 - 人体生理学 组织学 - 胚胎学 人体寄生虫学 - 免疫学 病理学 - 病理生理学 细胞学 - 营养学 流行病学 - 药理学 - 毒理学免疫学(英语:Immunology)是生物医学的一
- NCBI国家生物技术信息中心(National Center for Biotechnology Information,简称NCBI)是美国国家医学图书馆(NLM)的一部分(该图书馆是美国国家卫生研究所的一部分)。NCBI位于美国马里兰
- 液泡液泡(拉丁语:vacuolum、 法语、英语、荷兰语:vacuole、 德语:vakuole),又称为液泡,是一种囊状的单层膜细胞器,其中含有细胞液,为酸性环境。液泡的作用在于存储并降解细胞中的废物和有
- 钩虫症钩虫症(ancylostomiasis)是一种由钩虫属寄生虫引起的病变。钩虫病又称为矿工贫血病,隧道病,砖瓦贫血症和埃及黄化病种等。视乎致病物种,不同物种所引起的病征及病况或有不同。 但
- 唾液唾液(亦称口涎、口水)是动物口腔内唾液腺分泌的无色且稀薄的液体,其在食物的消化过程中起到十分关键的作用。唾液主要由腮腺(英语:parotid gland)(英语:parotid gland)、颌下腺(英语:su
- 补体补体系统(英语:complement system)由一系列的蛋白质组成,属先天免疫系统的一部分。补体系统透过一连串的酵素(酶)相互切割启动,最终在目标微生物上形成类似孔洞的膜攻击复合物(Memb
- UniProtUniProt(联合的蛋白)是一个全面的,高质量的,免费使用的蛋白质序列与功能信息数据库,许多内容来自基因组计划,它还包含了大量来自研究文献的关于蛋白的生物学功能信息。UniProt共同
- 食品药物管理署卫生福利部食品药物管理署(简称食药署),是中华民国卫生福利部所属机关,成立于2010年1月1日,负责食品和药品的管理监督工作。区管中心从忠孝东路六段至昆阳街右转,沿昆阳街顺势再右
- 说话带鼻音鼻音是一种带有鼻腔共鸣的人声。鼻音可能由疾病造成或是与生俱来的一种特色。鼻音可分为低度鼻音(hypo-nasal)跟高度鼻音(hyper-nasal)。说话时带着低度鼻音或称为去鼻音化(英语:d
- 萨格勒布大学萨格勒布大学(克罗地亚语:Sveučilište u Zagrebu, 拉丁语:Universitas Studiorum Zagrabiensis)是克罗地亚最大的大学,同时也是维也纳以南的中欧地区及东南欧持续办学时间最长
