归纳定义是学习编程语言不可缺少的工具。在这一章中,我们将发展归纳定义的基本框架,并给出一些使用它们的例子。归纳定义由一组规则组成,用于派生各种形式的判断或断言。判断是关于一个或多个某种抽象绑定树的语句。这些规则规定了判断有效的必要和充分条件,从而充分确定了判断的意义。
2.1. 判断
我们从抽象绑定树的判断或断言的概念开始。我们将使用许多形式的判断,包括这些例子:
一个判断表明一个或多个抽象的约束树具有某种属性或彼此之间存在某种关系。属性或关系本身被称为判断形式,而判断一个或多个对象具有该属性或处于该关系中,则被称为该判断形式的一个实例。判断形式也叫做谓词,构成一个实例的对象就是它的主语。我们写一个或
,来表示
持有
的判断。相应地,我们有时以符号表示的判断形式
,或
,用破折号表示缺乏论证
.当它并不重要强调的主题的判断,我们写
代表一个未指明的判断,也就是说,一些判断形式的实例。对于特定的判断形式,我们可以自由地使用前缀、中缀或混合固定表示法(如上面的示例所示),以增强可读性。
2.2. 推理规则
判断形式的归纳定义由判断形式的规则集合构成
其中和
是所有被定义的形式的判断。横线以上的判断称为定则的前提,横线以下的判断称为定则的结论。如果一个规则没有前提(也就是说,当
时),这个规则就称为公理;否则,它被称为一个适当的规则。
推理规则可以被理解为,前提对于结论是充分的:为