加载中...
合一是求解使两个符号表达式相等的变量替换的过程,是类型推断、逻辑编程和自动定理证明的核心机制。最一般合一子是所有解中最通用的一个,罗宾逊算法给出了它的经典求解方法。

| 提出者 | 埃尔布朗、罗宾逊 |
| 经典算法年份 | 1965年 |
| 核心概念 | 最一般合一子 |
| 关键步骤 | 出现检查 |
| 典型应用 | 类型推断、逻辑编程 |
合一是符号计算中的一种基本运算,指寻找一个变量替换,使得两个含变量的项在替换后变得完全相同,这样的替换称为合一子,而最通用的那个称为最一般合一子。
合一的概念由雅克·埃尔布朗(Jacques Herbrand)提出,并由约翰·艾伦·罗宾逊(John Alan Robinson)在1965年结合归结原理给出实用算法。它是许多推理系统的引擎,因为判断两个模式能否匹配、如何匹配,本质上都是合一问题。
合一是逻辑编程语言执行的核心,程序运行时通过合一匹配规则头部与查询目标。它也是 Hindley-Milner 类型推断的关键步骤,编译器用合一求解类型变量的约束。此外,自动定理证明、归结推理、项重写系统都离不开合一。
问:出现检查省略会怎样?答:若省略出现检查,遇到变量与包含自身的项合一时会构造出无限项,可能导致算法不终止或产生不合理的循环结构,某些系统为了效率默认省略并接受这种风险。
问:合一和模式匹配是一回事吗?答:模式匹配通常只允许一侧含变量,是合一的特例;合一则允许双方都含变量,需要同时确定两边变量的取值,因此更通用也更复杂。

| 提出者 | 埃尔布朗、罗宾逊 |
| 经典算法年份 | 1965年 |
| 核心概念 | 最一般合一子 |
| 关键步骤 | 出现检查 |
| 典型应用 | 类型推断、逻辑编程 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧