||
用数形结合的方法研究应用逻辑学
数缺形时少直观,形少数时难入微,数形结合百般好,隔离分家万事休——华罗庚。
一引论
数形结合是数学教学过程中非常重要的思想方法之一,遗憾的是,这种思想在逻辑学中使用的还是不多——准确的说,是数用的不多。或者说,主流的认识还是期望为数学寻找逻辑学的基础而不是相反。
事实上,如果把数学看作基础工具,逻辑学仅是数学的一门应用分支,正如数理逻辑所做的那样——似乎具有更大的优势,下面结合三段论,谈谈逻辑的数学化处理。
首先谈谈三段论的几种图形化处理方案:
1 欧拉圈的表示方法:
欧拉圈的基本形式以圆表示非空非全的类,圆中的点是类中的元素——用两个圆的包含、排斥和交叉等拓扑性质来表示概念之间的包含、相异和相交关系。如下
全称肯定命题(A)用一个圆包含另一个圆表示,
全称否定命题(E)用两个互不相交的圆表示,
特称肯定命题(I)用两个交叉的圆表示——把表示主词的字母写在交叉的区域;
否定命题(O)也用两个交叉的圆表示——把交叉区域留空,以此表示主词外延与谓词外延的交为空集。
欧拉圈有一些缺陷:不能表示全类、空类,也不能表示补运算,同时,也不能表示复杂的推理关系。
2 文恩图的表示法
文恩图的基本形式以矩形表示论域,矩形中的圆表示非空类;每一个圆把矩形分成两个类:任意一个类及其补类。文恩采用了一种“初始图”的办法,用初始图表示所涉及的类之间所有可能的关系,并且也不假定这些类一定都是非空的。如下图所示:
除了初始图外,文恩还利用在图的区域中加上阴影的语形办法来表示相应的类为空类。
文恩图跟欧拉圈一样,同样难以表示特称命题。
3 皮尔士-文恩图以及相关的发展
为了表示特称命题,以及选言的和联言的复合命题。皮尔士(C.S. Peirce,1839~1914)接受文恩对欧拉图的改进,并作了进一步的处理,经过皮尔士改进的图称为“皮尔士-文恩图”:皮尔士在一个区域中画上符号“x”来表示该区域不空,并且用符号“o”代替文恩图中的阴影来断定一个区域为空区域。符号“x”和“o”可以用短线连接起来表示析取。单独一个“x”或者“o”表示一条链。而在同一个皮尔士-文恩图中,由“x”和“o”组成的不同的链表示各条链的合取。如下图,表示布尔表达式: $s{p}'\neq \O " style="line-height:24px;text-indent:28px;$ $\vee$ ${s}'p= \O " style="line-height:24px;text-indent:28px;$
后来,皮尔士运用自己在拓扑和图论中的研究,又提出了自己的逻辑图式系统——存在图。存在图的初始指号只有三个:一条表示否定的封闭曲线、一条既表示个体变元又表示存在量词的恒等线和一条表示“可能不”的封闭虚线。两个图的并置表示两者的合取。存在图系统是可以在其上进行逻辑转换运算的一类表示方式,存在图系统由Alpha图、Beta图和Gamma图三个部分组成,各个部分都有自己初始的构图符号以及操作这些图的保真的图形转换规则,从而各自形成了一个证明系统——或者说,形成了与经典命题演算、带等词的一阶谓词演算以及模态逻辑和高阶逻辑相同的表达能力。
事实上,无论哪种表示法,对于五个以上的变量,很难在一副图中清晰有效的表示不出来。或许,在皮尔士看来,逻辑的目的并不是发展一种有效的演算使得结论可以迅速而容易地从前提得出,逻辑的准确任务是尽可能逼真地、以一种“镜像(icon)”的方式来清楚地把推理的最基本的、元素性的构成成分分析并展示出来——然而,对于今天逻辑学及计算机科学发展来说,这种认识无疑是滞后于时代发展的——我们真的需要快速的逻辑演算算法——显然,传统的图示表达已经不能满足我们的期望。
二 问题及解决思路
让我们再次回到主题:
我们知道,数形结合的特点在于:或者借助于数的精确性来阐明形的某些属性,或者借助形的几何直观性来阐明数之间某种关系。显然,逻辑学在数形结合的问题上走入了一个误区:
试图用简单的图形取代精确的数字,阐述复杂的逻辑关系。
因此,一个自然的想法就是,如何在逻辑中引入数字符号处理,同时,用一个简单的图形表示。事实上,早在古希腊时代,斯多亚学派就已经提出,亚氏三段论具有如下形式,“第一大于第二,第二大于第三,结论:第一大于第三”,显然,这种类比并不适应于复杂的命题判断(用今天的观点看,自然数是线性序列,而概念是一种偏序结构),但是,只要适当的加以修改,还是可以用类似的方式来处理相关概念逻辑的。
下面我们先简单讨论一下基本原理,然后再给出一个基本的系统实现:
首先,我们认为一个数字序列顺序本身也是一种图形;
其次,我们用一种精确的数字来表示逻辑含义,引入如下三个符号:0,1,#。其中,0与1表示两种本质属性,为互斥属性;#表示一种无关属性(注意,“无关”不是“不确定”,是一种无关紧要,不需要关心的含义,这决定了系统是一个确定性三值推理而不是模糊系统)。
简单的运算规则如下:0^1 = null; 0^# = 0; 1^#= 1;
再次,我们假定每一个概念都有一个本质属性,用1或者0表示。
有了以上的假设,我们就可以处理三段论的四种命题了——换句话说,在任意一个系统内(小到一个趣味推理题,大到整个自然界的概念体系),我们可以对任意一个概念X赋予一个数值 x(称之为概念码),并让概念码x完全表示概念X在整个体系中的逻辑结构(当我们想判断两个概念X、Y的逻辑关系的时候,只需要比较他们的概念码x、y的数值关系)。
显然,这样的概念码在处理效率上会是十分高效的,而且可以完全抛开各种复杂的形式化公里系统——更重要的是,可以证明,任意概念之间的包含关系都可以处理——没有不可判定的问题。
三 基本原理的讨论
下面,我们从最简单的问题开始讨论,直至最后给出一个完整的推理系统。
全称肯定命题(A): 因为(11)^(#1) =(11) 所以s是p。
s 1 1
p # 1
全称否定命题(E): 因为(11)^(#1) =(null) 所以s不是p。
s 1 # 0
p # 1 1
特称肯定命题(I):
s 1 # #
p # 1 #
q 1 1 1
因为(111)^(1##) =(11l) 所以q是s;
因为(111)^(#1#) =(111) 所以q是p;
所以,存在q是S也是p.
特称否定命题(O):
s 1 # #
p # 1 0
q 1 1 1
因为(111)^(1##) =(11l) 所以q是s;
因为(111)^(#10) =(null) 所以q不是p;
所以,存在q是S但不是p.
事实上,我们还可以在以上的系统中,做出如下两个处理:
⑴ 增加互斥的概念表示
⑵ 可以把上面探讨的几个符号用2位二进制来表示,
0 –01, 1= 10 ,# =11,null = 00.
如此处理之后,我们构建一个优良的自动推理系统:
第一, 数字编码的构造可以机械化的实现;
第二, 两个概念之间的逻辑关系比较可以高效的实现,事实上,只是一个位运算而已;
第三, 可以进行复杂的推理,理论上可以进行无限个变量之间的关系推导;
第四, 推理不存在不可判定性问题,任意结论的判断一定能够得到结果;
第五, 可以针对某个具体的领域,构建语义标签系统,每个概念都有一个数字编码(我们称之为概念码),利用概念码,我们可以真正的实现语义网系统(自动推理+语言无关性)。
三 系统的实现与测试
下面我们来介绍下实现如上功能的一个系统,语义逻辑计算器 并给出系统的使用方法介绍。整体上看,系统有两个基本方法:
第一,概念语义分析函数,通过输入一个领域系统(使用类似三段论的AEIO结构,外加互补结构),返回所有概念的内涵逻辑概念码;
第二,概念码关系推理函数,可以判断任意一个概念是否是一组概念的逻辑子概念。
分别讨论如下:
⑴ getSuperCode :
该API的输入是具体的领域描述参数,输出是所有输入概念参数的概念编码。
使用注意事项:所有的概念都必须是独立概念,不能是若干概念的外延集合(见后文解释)。
该API有五个输入参数,解释如下:
n_info:描述了领域内满足全局互斥的概念对,其中,positive与negtive给出的id对是一组全局互补的概念。
a_info :描述了领域内满足全称肯定命题的概念组,其中, child 与 parent 给出的id是一组父子概念关系描述。
e_info :描述了领域内满足全称否定命题的概念组,其中, node与neighbor给出的id是一组全称否定关系描述;
i_info:描述了领域内满足特称肯定命题的概念组,其中,child与parent_a,parent_b给出的id是一组特称肯定命题关系描述;
o_info:描述了领域内满足特称否定命题的概念组,其中,child与parent,neighbor给出的id是一组特称否定命题关系描述;
注意:由于该系统输出都是16进制,所以计算的时候需要把16进制转换为2进制便于观察。
先让我们看下几个简单的推理案例:
例1:所有的S是M,所有的M是P,结论:所有的S是P 。
输入参数计算过程如下(浏览器地址栏中直接输入):
http://www.supercode.org.cn/getcode?n_info=[]&a_info=[{"child":"s","parent":"m"},{"child":"m","parent":"p"}]&e_info=[]&i_info=[]&o_info=[]
其中,n_info, e_info,i_info,o_info四个参数为空;
a_info参数有两组值:
所有的S是M :{"child":"s","parent":"m"}
所有的M是P:{"child":"m","parent":"p"}
输出结果:
{"status":0,
"message":"正常处理结束",
"result":{"s":"57","m":"d7","p":"f7"}
}
编码是16进制编码(二进制编码长度相同,前面需要补0),结果是:
s : 0101 01 11
m:1101 01 11
p: 1111 01 11
运算过程:SAM,MAP
显然,s = s^m; s=s^p; m=m^p;
即:s是m的子概念,s是p的子概念,m是p的子概念,
例2:所有的P都是M, 有些S不是M,结论:有些S不是P
引入概念Q, 满足有些S不是M,,
输入参数计算过程如下(浏览器地址栏中直接输入):
http://www.supercode.org.cn/getcode?n_info=[]&a_info=[{"child":"p","parent":"m"}]&e_info=[]&i_info=[]&o_info=[{"child":"q","parent":"s","neighbor":"m"}]]
其中,n_info, e_info,i_info 三个参数为空;
a_info参数有一组值:
所有的s是m :{"child":"s","parent":"m"}
o_info参数有一组值:
q是s不是m所有的:[{"child":"q","parent":"s","neighbor":"m"}]
计算输出结果如下:
{"status":0,
"message":"正常处理结束",
"result":{ "q":"5fdf",
"s":"dfff",
"m":"f7ef",
"p":"f5ef"}
}
编码是16进制编码(二进制编码长度相同,前面需要补0,由于整字节对齐的关系,后面多出来几个bit),结果是:
q: 01 01 1111 11 01 11 11
s: 11 01 1111 11 11 11 11
m 11 11 01 11 11 10 11 11
p: 11 11 0101 11 10 11 11
显然:q^s = q; q^p=null;
即q是s,不是p.
其他的关系验证也可以很容易得到。
例3:已知概念id1,id2,id3,id4……id11,关系描述如下:
⑴ id1与id2互补概念
⑵所有的id3都是id0,所有的id4都是id1,所有的id5都是id2。
⑶所有的id3都不是id6,所有的id4都不是id7
⑷概念id3是id7的子概念,也是id8的子概念;概念id5是id7的子概念,也是id8的子概念。
⑸概念id9是概念id1的子概念,但是不是id10的子概念;概念id5是概念id10的子概念,但是不是id11的子概念
问题:是否存在概念,既是id3的子概念,也是id5的子概念。
这是一个复杂的系统,使用各种图例推理是不容易处理的。
输入参数计算过程如下(浏览器地址栏中直接输入):
http://www.supercode.org.cn/getcode?n_info=[{"positive":"id1","negtive":"id2"}]&a_info=[{"child":"id3","parent":"id0"},{"child":"id4","parent":"id1"},{"child":"id5","parent":"id2"}]&e_info=[{"node":"id3","neighbor":"id6"},{"node":"id4","neighbor":"id7"}]&i_info=[{"child":"id3","parent_a":"id7","parent_b":"id8"},{"child":"id5","parent_a":"id7","parent_b":"id8"}]&o_info=[{"child":"id9","parent":"id1","neighbor":"id10"},{"child":"id5","parent":"id10","neighbor":"id11"}]]
结果输出:
{"status":0,
"message":"正常处理结束",
"result":
{"id9":"5ffffffd","id1":"dfffffff",
"id10":"f7fffffe","id5":"e5f5fffa",
"id11":"ff7fffff","id3":"ffd5f7db",
"id7":"fff7fffb","id8":"fffdffff",
"id6":"ffff7fef","id4":"dfffdff7",
"id0":"fffff7ff","id2":"efffffff"
}
}
容易知道:
id3: 11 11 11 11 1101 01 01 11 11 01 11 11 01 10 11
id5: 11 10 01 01 1111 01 01 11 11 11 11 11 11 10 10
11 10 01 01 1101 01 01 11 11 01 11 11 01 10 10
显然,id3^id5 = 11 10 01 01 11 0101 01 11 11 01 11 11 01 10 10
即存在一个概念,是id3,也是id5.
⑵ iskindof
如前文所述,两个概念之间的逻辑关系可以通过位运算直接判断,但是,多个概念之间的逻辑关系判断需要借助标准集的概念(标准集的概念将在另一篇文中单独讨论,这里先知道可以直接使用就可以了)。
该API有两个参数:
code:一个独立的概念码。
set:一个概念码集合。
输出结果是code是否是set的逻辑子概念的分析结果。
例1:判断ff55是ff53的子概念(此时set中只有一个概念)。
输入参数计算过程如下(浏览器地址栏中直接输入):
http://www.supercode.org.cn/iskindof?code="ff55"&set=[{"code":"ff53"}]
因为是单个概念比较,set中只有一个参数,可以直接比较,也可以调用API分析,
API输出结果JSON形式如下:
{
"status":0,
"message":"正常处理",
"result":
{
"isKindOf":0
}
}
即ff55不是ff53的子概念;
例2:判断ff55是否是{ FD57, FE75}的子概念(此时set中有2个概念)。
输入参数计算过程如下(浏览器地址栏中直接输入):
http://www.supercode.org.cn/iskindof?code="ff55"&set=[{"code":"FD57"},{"code":"FE75"}]
API输出结果JSON形式如下:
{
"status":0,
"message":"正常处理",
"result":
{
"isKindOf":1
}
}
即ff55是set = { FD57, FE75}的子概念;kerning:0'>语言无关性)。
五展望
本文到此已经结束了,希望能够为各位专业领域内有研究的朋友提供一个工具,共同构建领域内的语义标签。也期待有一天,可以构建一个真正的语义网系统。
另外:如果有朋友希望获得更好的服务,可以共同研究学习,服务地址如下:
备注:
下面解释下概念的独立性问题:
所有的概念都必须是独立,即概念不能是其他若干个概念的外延组合,举例:假设a,b全局互补的概念,则其他概念描述中,不能出现a或者b的父概念。a与b全局互补,意味着a或者b的父概念只能是全集概念。
另一个需要注意的问题是:并不是所有的概念都有一个否定概念(事实上,有的概念的否定概念可能是多个独立的概念)。传统的外延逻辑,我们把否定概念看作一个概念,这是有问题的,因为许多概念的否定概念是多个概念的外延集合,比如说,一个概念是白马,他的否定概念包括(但不限于):黑马,白驴,黑狗。而对于这些概念的组合,是不能用一个概念来表达的。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-29 13:15
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社