为什么要进行期限改写?


12

我做了一些谷歌搜索,并提出了一个简短的建议。

我想知道计算科学家,程序员研究术语重写和/或术语图重写的主要原因是什么。

据我所知,它仅对有关功能程序和(命令性)程序控制的基本推理有所帮助。显然,对于逻辑学家和那些研究构造抽象代数的人来说,这是一个非常有趣的话题。

非常感激任何的帮助!

Answers:


11

我不确定这会给您带来比您已经知道的更多的东西。但是,然后,我可能无法理解使您对术语重写感到疑惑的原因。确实有帮助。

您可能知道,语法是字符串重写系统。在Chomsky层次结构的顶部,您具有类型0语法,该语法定义了递归可枚举(RE)语言,并且具有图灵机的计算能力。

因此,这告诉您,重写系统通常与表达算法有很大关系。

通常,字符串的问题是没有明显的方法可以将语义附加到字符串上。这是一种无定形的重写。

人们通常感兴趣的是在具有结构和属性的特定领域表达算法。这样的域通常是从基本(原子)实体定义的,并通过各种操作(可能由等价关系来商定)关闭。这些通常称为代数。

这些域通常是抽象的。但是对其元素的计算只能用具体的表示形式来表达。术语是这些元素的自然表述,因为术语表示如何通过应用操作来递归地将原子元素递归到原子元素上(尽管一般属性不一定总是完全下降),从而可以为其他元素获取元素。术语是一种树形结构语法,可以用来表达算法(例如字符串)。但是术语的运算符操作数结构还允许通过同构在某些抽象域中将语义关联到它们。

与其考虑维基百科和有关该主题的许多文本的非常正式的观点,不如考虑程序。通常认为,程序的方便语法表示形式是所谓的抽象语法树(AST)。但是AST只是表示程序对象的术语。指称语义是一种定义抽象域并将同域中的值与AST(或AST子树)相关联的方法。可以通过应用重写规则来转换或优化AST形式的程序(我并不是说所有优化都可以或应该这样做)。

可以通过术语重写来表达用于各种目的的代数表达式的转换。例如,某些表达式的简化。各种类型的计算也可以自然地表达为术语重写,例如导数的计算。当同一语义实体可以具有多个句法表示形式时,有时也会使用术语重写来定义代数中的规范形式。

我建议您阅读有关此主题维基百科文章


6

我的想法是,这是因为术语重写是非常基础的东西,它使您可以以非常低级的方式描述事物,而与任何硬件无关。

术语重写可以描述语法,但是它也为您提供了描述逻辑系统的机制,例如一阶逻辑等。证明和推论可以写成术语写作。然后,替换术语重写实际上是您唯一的操作。这里的简单性很有价值,因为您正在描述逻辑,所以您不能使用逻辑的全部复杂性来描述您的系统(因为这就是您要描述的系统)。

然后,这为您提供了将lambda微积分作为逻辑/公理系统进行讨论的机制,从而为您提供了极其正式的基本版本的计算。

图灵机很有用,但是它们的基本定义要求您对集合,函数等有一个概念。假定已经建立了许多数学运算。

另一方面,Lambda演算是根据逻辑进行定义的,因此您无需过多地定义集合论,函数等就可以使用它。

用逻辑建模的术语重写不仅适用于功能编程。当您进行硬件或软件的形式验证时,您总是要进行某种推理,并且可以通过术语重写来建模这种推理。


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.