-- 作者:duxiong
-- 发布时间:7/10/2008 8:19:00 AM
-- 知识表示(学习笔记3) 用逻辑表示知识
逻辑(II):用逻辑表示知识 初次发表于:http://hi.baidu.com/sunnybill/blog/item/2287cdc4dc1937ce38db49d6.html 来本尼兹在逻辑方面的努力是试图发明一种基于数学原理的通用语言,目标是精确地矫正人们的推理,而且足够全面,能够表达和平息人们的争论。虽然来本尼兹没有能够实现他的目标,但现代逻辑已经能够表达其它任何语言(包括自然语言和人工语言,natural or artificial)中所能精确表达的信息。在能够被表达的知识中,自然语言展现的范围最为广阔,逻辑使得其中能够被精确公式化的子集被表达成可以计算的形式。也许有些知识还不能够用逻辑表达,但是如果有这样的知识存在的话,那一定也不能够被任何其他的符号表示,不能够在任何数字计算机上表达和操作。逻辑的力量在于它囊括了所有能够在计算机上存储和编程的信息。 命题逻辑(Propositional Logic) 为了说明语言转换成逻辑的问题,考察下面这个可以被映射到多种逻辑符号中的英文句子: The trailer truck has 18 wheels. 最简单的知识表达语言是命题逻辑(Propositional Logic),它是布尔代数的现代变体,上述句子在命题逻辑中表达时只有一个字母: p 这是表达这个句子可能的最简单的形式,但不能够呈现细节,比如拖车、轮子、轮子的数量18,以及其相互关系等。但对于那些只关心命题之间的蕴含模式而不关心命题细节的应用来说却十分有利。对于这些应用,细枝末节的缺失使得命题逻辑成为逻辑表达时的诱人选择。 主题与谓词(Subject and Predicate) 为了显示命题的内部结构,句子必须被分成独立表达的小部分。在三段论中,亚里斯多德把句子分成两个部分:主题和谓词。在Darii实例中,拖车的句子可以用作大前提: A: All trailer trucks are eighteen wheels. I: Some Peterbit is a trailer truck. I: Therefore, some Peterbilt is an eighteen wheeler. 在每一项陈述中,动词前边的短语如“all trailer trucks”都是主题,其余部分连同动词,都是谓词。两个前提通过中项(middle term)“trailer truck”连接。中项作为一个前提的主题,同时出现在另一个前提的谓词中。这时,将剩下的术语(称为大小前提—extrems)结合就可以得到结论。 在三段论中的前提和结论转换成谓词逻辑之前,其语法形式必须重新组织。谓词逻辑的特殊性在于连接动词“is”或“are”在A类和I类陈述中以不同的方式表达。全称量词“∀”与蕴含“⊃”连用,存在量词“∃”与合取“∧”连用。 A: For every x, if x is a trailertruck, then x is an eighteenwheeler. (∀x)(Trailertruck(x) ⊃ Eighteenwheeler(x)) I: Some Peterbilt is a trailer truck. (∃x)(Peterbilt(x) ∧ Trailertruck(x)) I: Therefore, some Peterbilt is an eighteen wheeler. (∃x)(Peterbilt(x) ∧ Eighteenwheeler(x)) 谓词逻辑和自然语言之间的语法差异一直以来都是哲学家争论的焦点。弗雷格和罗素就看不上普通语言。弗雷格认为谓词逻辑揭示了语言使用产生的“错误概念”,其他的人则认为语言有其自身的逻辑传承,像汉斯坎普(Hens Kamp)开发的“论述表达结构”(Discourse representation structure)就更多地支持从自然语言到逻辑的直接映射。 除了众所周知的人为因素难以确定之外,不同的知识表达支持不同的推理规则(Inference rules),其效果可以由计算机方便地测度。对三段论来说,结论可以从前提中一步推出,而对谓词逻辑则需要六步相关证明才能得出结论。为了提高这类推理的处理效果,许多AI系统都把继承(inheritance)当作特殊的推理规则,以便从三段论中一步推出结论。 谓词的选择(Choice of Predicate) 把句子分成主体与谓词只是第一步,轮子与拖车,18与轮子数之间如何关联则需要更多的细节。用谓词逻辑表达亚里斯多德的“三段论”的最大好处就是可以在任何细度水平上表达和分析命题。句子中的重要信息也可以通过选择适当的谓词来加以强调。 比如:可以通过替换谓词EighteenWheeler(x)来明确地表达18与轮子的关系,可以用二元谓词numberofWheels来表达,numberofWheels(x, n)的意思是x的轮子数是n。 句子:Every trailer truck has 18 wheels可以表达为 (∀x)(Trailertruck(x) ⊃numberofWheels(x, 18)) 上式中,x是truck,18是轮子数,但并没有trailer wheel的信息。trailerTruck numberofWheels中的trailer和wheel对人的阅读、记忆和理解来说都很明确,但对于计算机却毫无用处,如果要呈现这些细节,还需要选择必要的谓词,比如: truck(x) x is a truck; trailer(x) x is a trailer; wheel(x) x is a wheel; part(x,y) x has y as a part, 即y是x的一部分; set(x) s is a set, s 是一个集合; count(s, n) The count of element in s is n; 集合s种元素的个数是n; member(x,s) x is a member of s; x是s的一个成员。 用这些谓词把句子展开为: (∀x)((truck(x) ∧ trailer(y) ∧ part(x,y))⊃ (∃s)(set(s) ∧ count(s,18) ∧ (∀w)(member(w,s)⊃(wheel(w) ∧part(x,w) ) ) ) ) 上式翻译成自然语言为: 对所有x,如果x是卡车,y是拖车,y是x的一部分, 那么, 存在集合s,其元素是18, 并且对所有w,如果w是集合s的成员, 那么w是轮子,并且w是x的一部分。 变量x, y, s, w等都可以事先定义,这样计算机就能够理解。 逻辑和本体(Logic and Ontology) 上式显示的细节正好说明了康德的“我们就会对知识中包含的宝藏感到无比惊讶”的说法。但从报纸中任意挑选一个句子,如果仔细分析,都会面临这样的细节问题。这些分析可以归结于关于逻辑和本体的几个观点: 1. 谓词逻辑难以阅读,困难来自于大量的细节; 2. 大量零散的细节来源于连接公式各个部分的变量; 3. 逻辑本身非常简单,只有6个基本符号,但细节水平取决于谓词的选择,这严格来说不属于逻辑,而是代表了主体或应用中存在的相关事物的本体(ontology),不同的谓词选择代表了不同的本体约定(ontological commitments)。 4. 本体中的谓词可分为两类,领域依存的(domain dependent)和领域独立的(domain independent)。领域依存的只适用于特定的应用,领域独立的则可适用于不同的应用。 这些问题与所有的知识表达语言都相关,逻辑与本体的区别非常重要。有些符号模糊了两者的区别,把谓词组合内置成语言的一部分,并经常用特殊符号来代替这些谓词。如x∈s与谓词member(x,s)。 音乐的表示(Representing Music) 虽然逻辑是所有声明性语言(declarative language)中最基本、最精确的语言,但决不是唯一的。在科学、工程、商务和艺术领域不断有新的符号出现,无论是带形状的图形还是线条。音乐符号就与逻辑有同样的历史。符号和音阶的数学关系在古希腊时就被毕达哥拉斯(Pythagoras)及其追随者所发现。现代带音符、五线谱、谱号的符号是中世纪修道士开发的。音乐符号与其他特定的符号并不冲突,他们都是逻辑的有益补充,都是逻辑的一个子集,带有内置的适合特定领域的本体。 对于音乐来说,节拍、小节、音调、音阶等是其本体元素,可以引入三个谓词来表示一段音乐: C 4/4 1 1 2 3 | 1 3 2 5 | ...... tone(x,t) 音符x的音调为t dur(x,d) 音符x的音长为d next(x,y) 音符x的下一个音符为y。 用谓词逻辑表示上面一段音乐: (∃x1) (∃x2) (∃x3) (∃x4)...... (tone(x1,C) ∧dur(x1, 1) ∧ next(x1,x2) ∧ tone(x2,C) ∧dur(x2, 1) ∧ next(x2,x3) ∧ tone(x3,D) ∧dur(x3, 1) ∧ next(x2,x3) ∧ tone(x4,E) ∧dur(x4, 1) ∧ next(x3,x4) ∧ ......) EC逻辑(Existential-Conjunctive Logic) 通过另一个观察可以接触到逻辑的本质:在一些公式中,只有存在量词(∃)和合取量词(∧),尽管复杂和细致的乐谱有时需要引入mf(t1,t2)这样的谓词,但全称量词(∀)和其他布尔操作符永远也不会用到。这种仅包含存在量和合取量词的逻辑子集,就叫做存在-合取逻辑(Existential-Conjuntive Logic),也叫做EC逻辑。它是许多不同领域符号转换、关联和分析的通用子集,也是用于表达存储在商业数据库(包括关系数据库和面向对象的数据库)中所有信息的一个子集。因此,EC逻辑是一个极其重要的子集,但它也有严重的局限:不能够表达泛化(generalizations)、否定(非)(negations)、蕴含(implications)和替换(alternatives),表达这些关系需要∀, ~, ⊃, ∨等操作符。 一个非常有用的泛化实例是如何用公式表达避免音乐中的某些不和谐音程,特别是三全音(tritone):对C调,B到F和F到B,对G调,F#到C和C到F#等。用下面的公式可以排除从B直接到F的变调(量词用到了泛化): (∀x)(∀y)((tone(x,B)∧next(x,y))⊃ ~ tone(y,F)) 意思是说,对所有的x和y,如果x是B调,y是x的下一个音,那么y一定不是F调。 还可以引入一个三全音谓词,表达所有三全音: tritone(x,y) 即:x与y构成一个三全音。 于是,可以用一个公式排除音乐中的所有三全音: (∀x)(∀y)(∀z)(∀w)((next(x,y)∧tone(x,z)∧tone(y,w) )⊃ ~tritone(z,w)) 意思是对所有x,y,z,w,如果y是x的下一个音,x的音调是z,y的音调是w, 那么,z和w不能是三全音。 定义(Definitions) 对于一段音乐,如果用三重唱的话,意味着每一个声音会从旋律的不同部分开始。这时,可以定义一个旋律谓词来表达整段旋律。以前面提到的一段旋律为例,定义Happy(x): Happy(x)= (∃x1) (∃x2) (∃x3) (∃x4)...... (tone(x1,C) ∧dur(x1, 1) ∧ next(x1,x2) ∧ tone(x2,C) ∧dur(x2, 1) ∧ next(x2,x3) ∧ tone(x3,D) ∧dur(x3, 1) ∧ next(x2,x3) ∧ tone(x4,E) ∧dur(x4, 1) ∧ next(x3,x4) ∧ ......) 这个定义相当于编程语言中的宏或子程序。其中的变量不受量词的约束,叫做形式变量(formal parameter)其他变量相当于子程序中的局部变量(local variables)。 如果第二个声音从第8拍开始唱,第三个声音从第12拍开始唱,那么这个三重唱就可以写成公式: (∃x) (∃y) (∃z)(Strat(x,0)∧Happy(x)∧Start(y,8)∧Happy(y)∧Start(z)∧Happy(z)) 式中谓词Start(x,t)可以定义为声音x从t时间开始唱,公式的意思是: 有x,y,z,x从0时间开始,唱旋律Happy(x); y从8时间开始,唱旋律Happy(y); x从12时间开始,唱旋律Happy(z); x,y,z这三个变量由开始的三个量词限定,相当于编程语言中的全局变量(global variables),每个Happy中都有旋律所含的全部变量。在执行Happ(x),Happy(y),Happy(z)的时候,变量都会用扩展内嵌子程序或宏那样的编程技术进行重新命名。
|