这种形式分数形式的“离散数学”式表示法是什么?


18

在论文“无冲突的JSON数据类型”中,我遇到了这种形式化定义“规则”的表示法:

文件中显示的一些“规则”] [1

这个符号叫什么?我该怎么读?

例如:

  • DOC规则的“分子”中没有任何内容-为什么不呢?
  • EXECGET规则似乎也行上述两个不同的术语,这是什么意思?
  • VAR规则也很引人注目,因为尽管许多其他规则在顶部使用某种箭头(我将其表示为“暗示”),但该规则似乎只是在说x是某物的元素。
  • 几乎所有内容都以首字母开头,Ap,其文字描述为“副本p的状态由Ap描述,是有限的部分函数” –精明的读者怎么会倾向于“看到”每条规则的那一部分?

该站点确实提出了一个相关的问题,该问题的注释看起来非常相似,在此问题上,smallB,s⟩->⟨B',s'⟩作为关于小步长问题的初始规则的意义是什么?语义?—这被标记为“ 操作语义”,这似乎是一个强有力的线索。确实是我解释这些数字所依据的框架吗?您能否以“速成课程”形式轻松地概括一下这一点,以便即使我无法验证他们的证明的正确性,我也至少可以对他们在本节中所说的内容有更多的了解?

Answers:


25

这是推理规则的标准表示法。前提位于水平线上方,结论位于该线下方。因此,它最终看起来像“分数”,但在该线上方具有一个或多个逻辑命题,而在该线下方具有单个命题。如果在其旁边看到标签(例如,示例中的“ LET”或“ VAR”),则该名称只是人类可读的名称,用于标识特定规则。

您可能还会看到这称为自然演绎Gentzen式自然演绎

这是编程语言文献中的常用符号。您会在整个地方看到它。对于该领域中出现的各种结论和递归结构的证明,这非常方便。

您将看到该表示法用于表达公理/规则。您可以将每个公理视为带有“元变量”的模板(例如expr);您可以使用编程语言中的某些语法(例如,在编程语言中有效的任何表达式)替换每个元变量,然后您将获得规则的一个实例。推理规则保证,如果所有命题都在该直线上方(对于模板的某些实例,您在整个规则中始终用相同的值替换每个元变量),那么该直线下方的命题也将成立。 。


2
一个值得注意的用途是指定Hindley-Milner类型推断:对“您不了解Milner-Hindley的哪一部分?”的回答遍历了如何阅读和使用该组规则。
DylanSp '16

一个小小的修正:前提和结论是判断,而不是命题。命题是一种特定的判断形式。沿着这些思路,判断是显而易见的,而不是真实的(因为真理的概念很难定义,并且对于编程语言的语义来说并不那么有趣)。
gardenhead

7

这是一个非常非正式的解释,可能有助于不熟悉正式表示法的人涉足。它不能代替正式定义!

是你的系统或运行的程序的状态。“状态”可能有很多含义,但在这种情况下,它似乎包括所有已定义局部变量及其值的列表。为什么Ap具有功能?因为这是表达变量分配的简便方法:Ap(x)给出变量x的值。

现在,以规则EXEC为例。它定义了执行命令cmd1后跟命令cmd2的语义,即执行cmd1后跟cmd2时系统状态Ap会发生什么。

  • 在线上方:这些是前提。他们说什么:“让cmd1成为命令。如果在系统处于Ap状态时执行cmd1命令,则系统将以新状态Ap'结束。”
  • 这行下面:规则描述了依次执行两个命令cmd1cmd2的含义。它说的是:“假设系统处于Ap状态,先执行cmd1然后执行cmd2意味着当系统处于Ap'状态时执行cmd2 ”(请记住,Ap'是执行cmd1之后获得的状态,如处所)。

其他规则描述了各个命令和表达式的语义。例如,VAR规则描述了“执行”变量的含义:如果x是局部变量(在行上方),那么评估/执行变量x意味着什么?这是写的线下:当你的程序处于状态,评估X为您提供的值X,即AP(X)

希望对您有所帮助。


谢谢,这对理解我正在寻找的东西很有帮助!但是,这的确使我的第一个问题没有得到答案:这种表示法是否在一般情况下和/或在此特定情况下具有名称?我的猜测是“操作语义”,但到目前为止,这里的另一个答案是它们只是简单的“推理规则”。我想如果我问一个两部分的问题,我应该得到分开的答案,但是现在我被其中一个要接受的问题撕裂了:-)
natevw

1
@natevw它们是推理规则。操作语义只是推理规则通常表达的众多事物之一。
吉尔斯(Gilles)'所以别再邪恶了'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.