Answers:
我不确定这会给您带来比您已经知道的更多的东西。但是,然后,我可能无法理解使您对术语重写感到疑惑的原因。确实有帮助。
您可能知道,语法是字符串重写系统。在Chomsky层次结构的顶部,您具有类型0语法,该语法定义了递归可枚举(RE)语言,并且具有图灵机的计算能力。
因此,这告诉您,重写系统通常与表达算法有很大关系。
通常,字符串的问题是没有明显的方法可以将语义附加到字符串上。这是一种无定形的重写。
人们通常感兴趣的是在具有结构和属性的特定领域表达算法。这样的域通常是从基本(原子)实体定义的,并通过各种操作(可能由等价关系来商定)关闭。这些通常称为代数。
这些域通常是抽象的。但是对其元素的计算只能用具体的表示形式来表达。术语是这些元素的自然表述,因为术语表示如何通过应用操作来递归地将原子元素递归到原子元素上(尽管一般属性不一定总是完全下降),从而可以为其他元素获取元素。术语是一种树形结构语法,可以用来表达算法(例如字符串)。但是术语的运算符操作数结构还允许通过同构在某些抽象域中将语义关联到它们。
与其考虑维基百科和有关该主题的许多文本的非常正式的观点,不如考虑程序。通常认为,程序的方便语法表示形式是所谓的抽象语法树(AST)。但是AST只是表示程序对象的术语。指称语义是一种定义抽象域并将同域中的值与AST(或AST子树)相关联的方法。可以通过应用重写规则来转换或优化AST形式的程序(我并不是说所有优化都可以或应该这样做)。
可以通过术语重写来表达用于各种目的的代数表达式的转换。例如,某些表达式的简化。各种类型的计算也可以自然地表达为术语重写,例如导数的计算。当同一语义实体可以具有多个句法表示形式时,有时也会使用术语重写来定义代数中的规范形式。
我的想法是,这是因为术语重写是非常基础的东西,它使您可以以非常低级的方式描述事物,而与任何硬件无关。
术语重写可以描述语法,但是它也为您提供了描述逻辑系统的机制,例如一阶逻辑等。证明和推论可以写成术语写作。然后,替换术语重写实际上是您唯一的操作。这里的简单性很有价值,因为您正在描述逻辑,所以您不能使用逻辑的全部复杂性来描述您的系统(因为这就是您要描述的系统)。
然后,这为您提供了将lambda微积分作为逻辑/公理系统进行讨论的机制,从而为您提供了极其正式的基本版本的计算。
图灵机很有用,但是它们的基本定义要求您对集合,函数等有一个概念。假定已经建立了许多数学运算。
另一方面,Lambda演算是根据逻辑进行定义的,因此您无需过多地定义集合论,函数等就可以使用它。
用逻辑建模的术语重写不仅适用于功能编程。当您进行硬件或软件的形式验证时,您总是要进行某种推理,并且可以通过术语重写来建模这种推理。
一个非常实际的原因是,它导致了程序转换系统的构建,即使人们可以使用表面语法重写将程序代码作为术语(抽象语法树)进行操作的工具。
我的系统的一个示例是DMS Software Reengineering Toolkit,它已用于各种程序分析和大量转换任务。您可以看到DMS如何表达重写。这些重写由在幕后操作的关联-可交换术语重写系统应用。