逻辑推理与世界模型的技术解析
在知识表示与推理领域,存在着诸多关键的技术和方法,下面将对这些重要的内容进行详细解析。
世界模型中的连接查找
在世界模型里,查找两个符号间的路径是一项关键任务。这里有一个名为
FIND - PATH
的程序用于实现此功能:
FIND - PATH[x;y]:
(这里的 x 和 y 是世界模型中的符号。在模型中找出从 x 到 y 的所有最短路径。路径是一个序列 x (r1, y1) (r2, y2) … (rn, yn),其中 (ri, yi) 如下面 GET - ADJACENT 的描述所示。)
1. 令 P 为包含一条路径的集合,这条路径仅包含 x。
2. 反复将 P 赋值为 EXTEND[P] 的值,直到 P 为空集或者 P 中包含最后一项为 y 的路径。
3. 返回 P 中最后一项为 y 的元素(如果有的话)。
而
EXTEND
程序用于扩展路径:
EXTEND[P]:
(这里的 P 是一个路径集合。返回比 P 中的路径长一步的路径。)
返回所有由 p 后跟 (r, v) 组成的路径,使得:
1. p 是 P 的一个元素。
2. (r, v) 是 GET - ADJACENT[z] 的一个元素,其中 z 是 p 的最后一项。
3. v 不在集合 P 中的任何地方出现。
GET - ADJACENT
程序用于查找符号的邻居:
GET - ADJACENT[x]:
(这里的 x 是一个符号。在世界模型中查找 x 的邻居。)
返回所有满足列表 “x has y as an r” 在世界模型中的对 (r, y),以及所有满足 “y has x as an r” 在世界模型中的对 (r′, y)。
(这里的 r′ 表示连接涉及所讨论角色 r 的逆。)
下面用 mermaid 流程图展示
FIND - PATH
的流程:
graph TD;
A[开始] --> B[初始化 P 包含仅含 x 的路径];
B --> C{判断 P 是否为空或含最后一项为 y 的路径};
C -- 否 --> D[P = EXTEND[P]];
D --> C;
C -- 是 --> E[返回 P 中最后一项为 y 的元素];
E --> F[结束];
概念模型中的继承
在概念模型里,
GET - PARTS
程序用于执行带取消的继承操作:
GET - PARTS[c]:
(在概念模型中查找概念 c 继承的所有部分。这里的部分是表示角色、限制或注释的符号。)
1. 计算所有满足从概念 c 到某个概念 e 存在 “is a” 链接链(即 “x has y as a SUPERCONCEPT” 形式的句子),并且在概念模型中有 “e has p as a PART” 形式句子的项 p。将这个集合称为 P。
2. 反复执行以下操作:
找到 P 中的两个元素 x 和 y,其中 y 取消 x,并且 P 中不存在 z 使得 z 取消 y。然后从 P 中移除 x。
(注意:“y 取消 x” 意味着 “y is a CANCEL - ANNOTATION” 和 “y has x as a SUBJECT” 在概念模型的扩展版本中存在。)
3. 当无法再从 P 中移除元素时,P 中剩余的部分被认为是由 c 继承的。所以返回 P。
数字和序列的特殊符号
在表示语言 L 中,包含了常见的算术符号及其常规解释。例如,“t1 + t2” 可读作 “t1 和 t2 的和”,“t1 < t2” 可读作 “t1 小于 t2”。对于序列,包含特殊符号
[
、
]
和
|
。比如,“[t1,t2,t3]” 读作 “仅由 t1、t2 和 t3 组成的序列”,“t1 | t2” 读作 “由 t1 的所有元素后跟单个元素 t2 组成的序列”。
问题解答
在推理方面,有
TEST
和
FIND - ALL
两个程序:
TEST
程序用于判断无自由变量的公式在当前世界模型中是否为真:
TEST[p]:
(确定无自由变量的公式 p 在当前世界模型中是否为真。)
如果以下任何条件成立,则返回 TRUE(否则返回 FALSE):
1. p 是 “t is t” 的形式,其中 t 是某个常量。
2. p 是 “t is a c” 或 “t1 has t2 as an r” 的形式,并且 p 按原样存在于当前世界模型中。
3. p 是 “it is not the case that q” 的形式,其中 TEST[q] = FALSE。
4. p 是 “q1 and q2” 的形式,其中 TEST[q1] = TEST[q2] = TRUE。
5. p 是 “q1 or q2” 的形式,其中 TEST[q1] = TRUE 或 TEST[q2] = TRUE。
6. p 是 “there is a v where q” 的形式,其中 FIND - ALL[v;q] 不是空集。
FIND - ALL
程序用于查找使公式为真的常量:
FIND - ALL[v1, … , vn;p]:
(查找公式 p 中自由变量在 v1, … , vn 中的所有使公式为真的常量。)
返回世界模型中出现的所有常量组合 t1, … , tn 的集合,使得:
TEST[SUBST[v1;t1;SUBST[v2;t2; … SUBST[vn;tn;p] … ]]] = TRUE。
SUBST
程序用于在公式中替换自由变量:
SUBST[v;t;e]:
(在公式 e 中用项 t 替换自由变量 v。)
1. 如果 e 是 “p1 and p2” 的形式,则返回 “q1 and q2”,
其中 q1 = SUBST[v;t;p1] 且 q2 = SUBST[v;t;p2]。
2. 如果 e 是 “p1 or p2” 的形式,则返回 “q1 or q2”,
其中 q1 = SUBST[v;t;p1] 且 q2 = SUBST[v;t;p2]。
3. 如果 e 是 “it is not the case that p” 的形式,则返回公式 “it is not the case that q”,其中 q = SUBST[v;t;p]。
4. 如果 e 是 “there is a u where p” 的形式,则如果 u 是 v 则返回 e 不变,否则返回 “there is a u where q”,其中 q = SUBST[v;t;p]。
5. 如果 e 是由符号序列 “s1 s2 … sn” 组成的任何其他公式,则返回序列 “w1 w2 … wn”,其中当 si 是变量 v 时 wi 是 t,否则 wi 是 si。
下面用表格总结这几个程序的功能:
| 程序名 | 功能 |
| ---- | ---- |
|
TEST
| 判断无自由变量公式在当前世界模型中的真假 |
|
FIND - ALL
| 查找使公式为真的常量组合 |
|
SUBST
| 在公式中替换自由变量 |
处理派生属性
当存在合适的派生子句时,
TEST[p]
程序也应返回 TRUE。例如,若有派生子句 “e when q”,e 使用变量 v1, v2, … , vn,p 与 e 类似,只是用项 t1, t2, … , tn 代替变量:
p = SUBST[v1;t1;SUBST[v2;t2; … SUBST[vn;tn;e] … ]]。
那么当
TEST[q′] = TRUE
时,
TEST[p]
应返回 TRUE,其中:
q′ = SUBST[v1;t1;SUBST[v2;t2; … SUBST[vn;tn;q] … ]]。
狗品种作为派生属性
狗的品种属性可以作为派生属性处理,通过一个大的析取式涵盖所有情况:
Dog:d has Breed:b as a breed
when
Dog:d is a pugDog and Breed:b is “Pug” or
Dog:d is a bichonFriseDog and Breed:b is “Bichon Frise” or
Dog:d is a jackRussellDog and Breed:b is “Jack Russell Terrier”
or …
如果世界模型中有 “Dog#227 is a jackRussellDog”,使用
FIND - ALL
对 “Dog#227 has Breed:u as a breed” 进行操作,可得到 “Jack Russell Terrier” 作为答案。
动作结果的推理
假设世界模型包含三个门事件的表示:
Event#816 is a doorOpeningEvent.
Event#816 has Door#58 as an object.
Event#817 is a doorClosingEvent.
Event#817 has Door#58 as an object.
Event#818 is a doorClosingEvent.
Event#818 has Door#59 as an object.
通过
FIND - ALL
操作可以看到常识惯性定律的推理过程:
| 操作 | 结果 |
| ---- | ---- |
|
FIND - ALL[Door#58 has State:u as a doorState after []]
| “open” |
|
FIND - ALL[Door#58 has State:u as a doorState after [Event#817]]
| “closed” |
|
FIND - ALL[Door#58 has State:u as a doorState after [Event#818]]
| “open” |
|
FIND - ALL[Door#58 has State:u as a doorState after [Event#817,Event#816]]
| “open” |
|
FIND - ALL[Door#58 has State:u as a doorState after [Event#817,Event#816,Event#817]]
| “closed” |
|
FIND - ALL[Door#58 has State:u as a doorState after [Event#817,Event#816,Event#818]]
| “open” |
执行一系列动作
可以定义派生属性
possibleSequence
来表示代理可以使一系列事件发生:
Seq:s is a possibleSequence for Agent:x when Seq:s is [].
Seq:s|Event:e is a possibleSequence for Agent:x
when
Seq:s is a possibleSequence for Agent:x and
Event:e is possible for Agent:x after Seq:s.
这表明空动作序列总是可以执行,非空序列 t1 | t2 可以执行的条件是递归地 t1 可以执行,并且最后一个动作 t2 在序列 t1 执行后对代理是可能的。
推理可执行的动作
假设当前状态下,门 #58 打开,人 #17(John)不在门附近,但有一个移动事件
Event#357
他可以执行并使他靠近门:
TEST[Person#17 is near Door#58] = FALSE
TEST[Person#17 is near Door#58 after [Event#357]] = TRUE
TEST[Event#817 is possible for Person#17] = FALSE
TEST[Event#357 is possible for Person#17] = TRUE
TEST[Event#817 is possible for Person#17 after [Event#357]] = TRUE
TEST[[Event#357,Event#817] is a possibleSequence for Person#17] = TRUE
生动公式中的缩写
生动公式中有以下缩写:
- “The t1, t2, … , tn are distinct” 代表公式 “It is not the case that … or ti is tj or …”,析取项涵盖所有满足 i < j ≤ n 的索引对。
- “The pairs t1 t′1, t2 t′2, … , tn t′n are distinct” 代表公式 “It is not the case that … or ti is tj and t′i is t′j or …”,析取项涵盖所有满足 i < j ≤ n 的索引对。
- “There is at most n c (with the “is” and c possibly pluralized)” 代表公式 “It is not the case that there is a v1, … , a vn, and a v where the v1, … , vn, v are distinct, v1 is a c, … , vn is a c, and v is a c”。
- “There is at most n r (with the “is” and r possibly pluralized)” 代表公式 “It is not the case that there is a v1, a u1, … , a vn, a un, a v, and a u where the pairs v1, u1, … , vn, un, v, u are distinct, v1 has u1 as an r, … , vn has un as an r, and v has u as an r”。
常识逻辑的思考
从逻辑角度看,前面讨论的推理操作与经典(演绎)逻辑相关。经典逻辑从某些前提或假设开始,逻辑规则告诉我们哪些其他句子应被视为逻辑结果。而这里的推理从世界模型开始,而非一开始就给定为真的前提集合。
逻辑通常强调前提的绝对确定性,以保证结果的真实性,但常识并不一定需要这种确定性。那么,以世界模型作为知识表示的起点有多重要呢?既然我们有语言 L 的公式可用,能否直接用它们来表示已知信息而完全摒弃世界模型呢?
事实上,虽然可能用语言 L 的公式代替世界模型来表示知识,但有充分理由不这样做。从语言 L 的公式作为前提得出结论所需的计算通常过于复杂,不适合作为常识的基础。
世界模型作为生动公式
以一个包含七个项目的世界模型为例:
Person#17 is a person.
Person#17 has “John” as a firstName.
Person#17 has Event#23 as a birth.
TimePt#24 is a pointInTime.
TimePt#24 has 1979 as an enclosingYear.
Event#23 is a birthEvent.
Event#23 has TimePt#24 as a time.
它可以用一个公式表示,将常量替换为变量:
There is a Person:x, a TimePt:y, and an Event:z where
Person:x is a person,
Person:x has “John” as a firstName,
Person:x has Event:z as a birth,
TimePt:y is a pointInTime,
TimePt:y has 1979 as an enclosingYear,
Event:z is a birthEvent, and
Event:z has TimePt:y as a time.
但世界模型还有更多含义。例如,公式 “There is a Thing:u where Thing:u has “Harry” as a firstName” 根据世界模型(和
TEST
操作)被认为是假的,但上面的公式并未暗示这一点。
使用世界模型时,我们认识到它只是对世界某一状态的片段建模,采用 “封闭世界” 解释。这意味着它呈现了该片段中存在的所有事物和所有属性。世界模型与它所代表的世界片段有一对一的对应关系,就像模型飞机与真实飞机的对应关系一样。
基于这种理解,语言 L 中有一类特殊的公式可以捕捉世界模型表示的所有信息,称为生动公式,其一般形式为:
There is variables where distinct, middle, at most.
其中,变量部分对应世界模型中每个命名个体(除字符串、数字和序列外)的变量列表;不同部分是表示这些个体彼此不同的缩写;中间部分是与世界模型相同的原子公式序列,只是用变量代替常量;最多部分是一系列以 “there is at most” 开头的缩写,涵盖世界模型中使用的每个概念和角色,并考虑中间部分中提及该概念或角色的原子公式数量。
生动公式凸显了世界模型在表示能力上的局限性,它不允许存在除明确列出之外的事物或属性。当我们需要表示像 John 的出生年份未知,或可能存在其他人这样的知识时,就需要采用非生动的语言 L 公式来表示关于事物及其属性的信息。
逻辑推理与世界模型的技术解析
世界模型与逻辑推理的权衡
从前面的分析可知,世界模型和语言 L 的公式各有特点。世界模型以其直观的“封闭世界”解释,为我们提供了一种直接对应现实世界片段的表示方式。它通过符号与现实事物及属性的一一对应,使得我们能够方便地进行推理和查询,如通过
FIND - PATH
查找符号间路径、
GET - PARTS
执行概念继承等操作。
然而,语言 L 的公式虽然理论上可以表示知识,但在实际应用中,从这些公式作为前提得出结论所需的计算量巨大,难以满足常识推理的日常需求。例如,在处理复杂的逻辑关系和大量变量时,推理过程会变得极为繁琐且耗时。
下面用列表总结世界模型和语言 L 公式的优缺点:
| 表示方式 | 优点 | 缺点 |
| ---- | ---- | ---- |
| 世界模型 | 直观对应现实片段,便于推理和查询,计算相对简单 | 表示能力有限,难以表示不确定或未知信息 |
| 语言 L 公式 | 理论上表达能力强 | 计算复杂,不适合常识推理的日常应用 |
生动公式的进一步理解
生动公式作为世界模型的一种特殊表示形式,其独特的结构使其能够准确捕捉世界模型所包含的信息。它的变量部分明确了模型中涉及的个体,不同部分确保了个体的唯一性,中间部分保留了模型的基本属性关系,最多部分则对概念和角色的数量进行了限制。
以之前的七个项目世界模型为例,生动公式通过将常量替换为变量,并添加相应的限制条件,使得模型的信息更加精确和完整。这种表示方式不仅体现了世界模型的“封闭世界”特性,还为我们提供了一种统一的逻辑表达方式。
为了更清晰地理解生动公式的生成过程,下面给出一个简单的步骤列表:
1. 确定世界模型中的命名个体(除字符串、数字和序列外),生成对应的变量列表。
2. 构建表示这些个体彼此不同的缩写(不同部分)。
3. 将世界模型中的原子公式用变量替换常量,形成中间部分。
4. 根据世界模型中使用的概念和角色,以及中间部分中提及这些概念和角色的原子公式数量,生成以 “there is at most” 开头的缩写(最多部分)。
5. 将变量部分、不同部分、中间部分和最多部分组合成生动公式。
实际应用中的推理示例
在实际应用中,我们可以结合世界模型和相关的推理程序来解决各种问题。例如,在处理门事件和人物动作的场景中:
假设世界模型中有如下信息:
Door#58 is open.
Person#17 (John) is not near Door#58.
Event#357 is a moving event that can put John near Door#58.
我们可以进行以下推理操作:
1.
判断当前状态
:
-
TEST[Person#17 is near Door#58] = FALSE
,说明 John 当前不在门附近。
2.
预测动作结果
:
-
TEST[Person#17 is near Door#58 after [Event#357]] = TRUE
,表示 John 执行移动事件后会靠近门。
3.
判断动作可行性
:
-
TEST[Event#817 is possible for Person#17] = FALSE
,当前 John 无法关闭门。
-
TEST[Event#357 is possible for Person#17] = TRUE
,John 可以执行移动事件。
-
TEST[Event#817 is possible for Person#17 after [Event#357]] = TRUE
,John 移动到门附近后可以关闭门。
4.
判断动作序列的可行性
:
-
TEST[[Event#357,Event#817] is a possibleSequence for Person#17] = TRUE
,说明 John 可以执行先移动到门附近再关闭门的动作序列。
下面用 mermaid 流程图展示这个推理过程:
graph TD;
A[开始] --> B[判断 John 是否在门附近];
B -- 否 --> C[判断 John 是否能执行移动事件];
C -- 是 --> D[判断 John 移动后是否在门附近];
D -- 是 --> E[判断 John 移动后是否能关闭门];
E -- 是 --> F[判断 John 是否能执行移动 - 关门序列];
F -- 是 --> G[推理结束];
B -- 是 --> H[判断 John 是否能关闭门];
H -- 是 --> I[推理结束];
C -- 否 --> J[推理结束];
D -- 否 --> J;
E -- 否 --> J;
F -- 否 --> J;
H -- 否 --> J;
总结与启示
通过对世界模型、语言 L 公式、生动公式以及各种推理程序的分析,我们可以得出以下结论:
- 世界模型以其直观和简单的计算特性,在常识推理中具有重要的应用价值。它适合处理日常知识的表示和推理需求,能够快速得出结果。
- 语言 L 公式虽然表达能力强,但计算复杂度高,在实际应用中需要谨慎使用。在某些特定场景下,可以结合世界模型和语言 L 公式的优势,提高推理的准确性和效率。
- 生动公式为世界模型提供了一种统一的逻辑表示方式,有助于我们更好地理解世界模型的本质和局限性。当需要表示不确定或未知信息时,应考虑使用非生动的语言 L 公式。
在实际应用中,我们应根据具体问题的特点和需求,选择合适的表示方式和推理方法。同时,不断探索和优化这些技术,以提高知识表示和推理的性能,更好地满足各种应用场景的需求。
总之,知识表示和推理是一个复杂而又充满挑战的领域,世界模型和逻辑推理技术为我们提供了有力的工具。通过深入理解和合理应用这些技术,我们能够更好地处理现实世界中的各种信息和问题。
超级会员免费看
3285

被折叠的 条评论
为什么被折叠?



