逻辑

上文我们知道了规则,那么我们是如何设计出一个系统,让其满足所有规则限制,同时满足我们的目标呢?这种设计、制造和使用工具的能力正是人类所拥有的独一无二的能力——我们可以综合根据已知规则,设计各类工具来满足我们的目标。为了研究这种思维能力,我们需要具化以研究这种能力,最常见的手段就是使用语言描述的过程来模拟思维过程——尤其在理性辩论时,我们称其为“思辩”。“逻辑”一词,源自于古典希腊语,最初的意思是“词语”或“言语”,因此,逻辑研究的主体是思维的内在规律,为了方便研究,通过研究思辩过程中,语言描述的内部规律,这种外部表现形式来研究的。让我们先来看看逻辑的发展历史。

我们都对未来有自己的认知,如何说服别人接受自己的观点,是很早就有的需求。在彼此辩论时,人们发现,规则的组合、演绎以及归纳是有规律的,满足这些规律,预测就是正确的,反之就是错误的,而这些规则之间的组合规律就是逻辑学研究的成果。换言之,你的思考过程(根据已知规则设计系统)与辩论过程一致,称为思辩,而逻辑就是研究思辩过程的。中国的“墨辩”、印度的因明与希腊的亚里士多德逻辑开启了逻辑之门。到了后来的文艺复兴时期,西斯·培根、约翰·穆勒、康德、黑格尔....一大群璀璨的学者不断推进着逻辑学的进展。这里我们不需要进入逻辑的细节,只需要用一个简单的例子来了解下逻辑是什么即可。苏格拉底是人,人都会死,所以苏格拉底会死。这就是一个最基础的演绎逻辑,如果事实与规则都正确,那么结论必然正确。当然,您并不需要知道什么是演绎逻辑,什么是归纳逻辑,更不需要去明白什么是三表法,排除法,什么是穆勒五法,因为到了今天,计算机可以协助我们处理逻辑了,您只需要了解逻辑学有这么一个阶段:寻找到很多适合人类使用的方法,来辅助人类的思辩行为。了解了上面的描述,请尝试理解日常生活中非常容易误用的两个词汇:“逻辑”与“关系”,逻辑与关系都可以描述为:A现象可以引发B结果,关系的关注重心就是A可以产生B这样一个事实/规则;而逻辑关注的是A现象关联了哪些关系/规则,演绎之后可以产生B这种内部的产生这种关系的推演过程。你不需要对这些概念深究,让我们先继续看看逻辑学的发展。

德国哲学家莱布尼兹提出一个概念,是否可以用数学来描述逻辑,把推理过程变成计算过程。虽然莱布尼兹没有解决这个问题,但是因为他提出了这个问题,被公认为数理逻辑的奠基人。这个问题直到19世纪才被英国数学家布尔通过“逻辑代数”(即布尔代数)所解决。随后,弗雷格、罗素和怀德海等人在布尔的基础上继续发展数理逻辑,直到霍恩通过霍恩子句完成了完整的计算推演步骤。后续就是可决策问题(decidability)被提出——这个问题被另一个伟大学者艾伦·图灵所解决,然后就是工程家约翰·冯·诺依曼设计了我们今天的计算机。

然后,可以自动进行逻辑计算的人造机器诞生了,并且开始反过来帮助我们设计新的机器——这就是人工智能(严格来说,是专家系统,神经元网络作为对规则层面的辅助工具,是人工智能另外一个重要组成部分,也被WIDE所支持)。这个系统是如何帮助我们处理逻辑问题的呢? 很简单,我们只需要将规则与事实列出来,以构成一个逻辑层面的虚拟世界,然后我们就可以咨询计算机,在这个虚拟世界里,是否存在满足给定条件的解决方案?计算机会自动回答,并可以告诉你应该一步步如何推演,以得到结果。例如,我们将已知的物理规则录入构成一个虚拟世界,然后就可以补充一些事实(例如小明的速度是XXX,火车的速度XXXX...),然后可以问火车多长时间超过小明..... 如果可以超过,那么计算机就会回答是的,并可以告诉你使用了哪些公式,是一步步如何计算的。因此,程序员所需要做的事情,就变成了从专家那里采集规则,按照WIDE格式(或者其它类似系统)输入计算机,剩下的事情就交给计算机了。

实际上,整个WIDE就是以这样一个理念构造的,先明确所需要的结果(页面),通过标注将页面中的信息抽取出来,整理为“当A条件时,B元素做C效果”这样的语句,然后开始针对A、B、C的信息做反向解析获取。这里有一个工作量平衡的话题,由于定义逻辑世界,罗列全部已知规则,很多时候不如直接指定获取信息过程简单。又由于我们对表格十分熟悉,因此WIDE中通过不断指定表格之间的逻辑关系来指明如何获取相应的信息。如果信息之间逻辑关系足够复杂,我们才会在WIDE中定义“逻辑世界”,类似上面的描述,交由计算机自动寻找可能的答案。执行效率问题由WIDE通过编译的方式解决。因此,在使用WIDE时,不要去考虑规则之间的关联关系,只需要将焦点集中在当前的一条规则上,逻辑组合的问题被WIDE编译所解决(严格来说,部分细节尚未达到理想目标,使得有时会有错误出现,但是这类错误在调试模式下,WIDE都尽可能给出友好提示,因此,请牢记,不同于传统开发环境,使用WIDE时,不要考虑整体,只考虑当前处理的规则即可——换言之,使用WIDE,需要重规则轻逻辑)

 有了逻辑概念之后,我们再去看规则(在WIDE中以代码段方式体现)就简单了。其实,对于日常生活中所接触到的常识性逻辑(主要就是填表经验),WIDE中允许你直接控制,复杂逻辑,可以通过定义“逻辑世界”来自动寻找答案——例如模拟医生,对一个病人一年来的检查结果做分析,通过医学专家配合定义“逻辑世界”,可以快速实现一个医疗辅助决策系统。

逻辑在20世纪80年代,在计算机科学和人工智能领域获得了基础性地位。从此以后,现代逻辑学与哲学、语言学、计算机科学与技术、人工智能等学科不断交叉与融合,进一步推动了经典逻辑理论的应用和发展,促进了哲学逻辑、自然语言逻辑、人工智能逻辑、现代归纳逻辑等新兴逻辑分支学科的发展。

通俗来讲,逻辑可以描述成计算方法,得到计算结果的方式。传统的开发方式中使用的多是命令式语言,如C,C++,Java,Python等,需要理解语言的实现方式进而映射到逻辑的具体实现,与之相对的WIDE强调的是了解逻辑即可实现某个程序,强调的是对构建了规则的逻辑本身理解,通过提供的已有的实现方式,完成一段可用的程序甚至系统。

WIDE中需要了解的是对数据的分类,针对不同的数据类型,选择合适的处理方式,使用已有的方法甚至人工智能等自动生成可用的代码。将这些代码排列组合才是WIDE程序员的主要工作。通过给出已知的数据,训练WIDE,使之能够根据公式得到需要的结果,才是WIDE的真正意义。通过这些公式最终得到结果,构建了一系列的规则,而规则则构成了一套完整的系统。那么如何选择数据类型?WIDE提供了四种基本类型的处理方式,科学计算器,决策树,神经元网络,分类。

  • 已知输入输出类型为数值,有精确的数学公式可以使用就可以选择科学计算器,
  • 已知一组输入,需要输出状态值,选择决策树,
  • 已知数值,并不清楚具体实现过程,选择神经元网络
  • 已知数据有布尔类型则选择分类器

WIDE中并不推荐程序员自行书写代码,使用现有处理方式可以大幅度减少程序员对逻辑的梳理时间,减少实现时的bug。依据现有流程完成逻辑,组合逻辑实现规则,通过规则完成系统功能,才是WIDE的理想工作规范。