命题从句逻辑是相当粗粒度的,因为它以命题【propositions】(即任何可以被赋予真值的事物)作为其基本构建块。例如,在命题逻辑中不可能形成以下论点:

Peter likes all his students
Maria is one of Peter’s students
Therefore, Peter likes Maria

为了使这种类型的推理形式化,我们需要讨论像 Peter 和 Maria 这样的个体,像 Peter 的学生这样的个体集合,以及个体之间的关系,比如 “喜欢”。命题分句逻辑的这种改进将我们引向关系分句逻辑。

Syntax

个体的名称称为常量【constants】;我们遵循 Prolog 约定,将它们写为以小写字符开头的单个单词(或用单引号括起来的任意字符串,例如 'this is a constant' )。任意个体由变量【variables】表示,变量【variables】是以大写字符开头的单个单词。常量【constants】和变量【variables】共同表示为项【terms】。基本项【ground term】指的是没有变量【variables】的项【term】。

个体之间的关系由谓词【predicates】抽象表示(遵循与常量相同的符号约定)。原子【atom】是一个后面紧跟许多项【term】的谓词【predicates】,其中,这些项【term】用括号括起来,用逗号分隔,例如 likes(peter,maria)。括号之间的项【term】称为谓词【predicates】的参数【arguments】,参数【arguments】的数量就是谓词的元【arity】。假定一个谓词【predicates】的元【arity】是固定的,那么同名但不同元的谓词被认为是不同的(类比为编程语言中的方法重载)。基本原子【 ground atom】是一个没有变量的原子。

与命题从句逻辑的语法有关的所有其余定义,特别是文字【literal】、从句【clause】和程序【program】的定义,都保持不变。因此,下面的从句【clauses】是用来表示上述语句的:

likes(peter,S):-student_of(S,peter).
student_of(maria,peter).

这些从句的本意分别是:

  • “如果 S 是 Peter 的学生,那么 Peter 喜欢 S”
  • “Maria 是 Peter 的学生”
  • “Peter 喜欢 Maria”

很明显,我们希望可以在前两个从句的基础上,在逻辑上得出第三个从句,并且我们希望能够通过归结【resolution】来证明它。因此,我们必须扩展语义【semantics】和证明理论【proof theory】,以处理变量。

Logical variables

子句逻辑中的变量与数学公式中的变量非常相似:它们都是占位符,可以由来自赫布兰德宇宙【Herbrand universe】的任意基本项【ground term】替换。需要注意的是,逻辑变量在从句【clause】中是全局的(例如,如果变量出现在从句中的多个位置,它应该被相同的项【term】替换),但在程序中不是这样(即变量在程序内并不需要全局)。这可以从关系从句逻辑的语义中清楚地看出这一点,其中基本替换【grounding substitutions】应用于从句【clause】而不是程序。因此,根据定义,两个不同从句【clause】中的变量是不同的,即使它们有相同的名称。重命名子句中的变量有时会很有用,这样就不会有两个子句共享同一个变量;这被称为从句标准化【standardising the clauses apart】。

Semantics

程序 P 的赫布兰德宇宙【Herbrand universe】是出现在程序中的基本项(即常量)集【set of ground terms】。对于上述程序,赫布兰德宇宙【Herbrand universe】是  { petermaria }。 赫布兰德宇宙【Herbrand universe】是我们在从句中所讨论的所有个体【individuals】的集合。程序 P 的赫布兰德基【Herbrand base 】是一组基本原子集【set of ground atoms】,其中基本原子【ground atoms】是由程序 P 中的谓词和赫布兰德宇宙【Herbrand universe】中的基本项【ground terms】来构建组成。这个集合代表了我们能说的关于赫布兰德宇宙【Herbrand universe】中个体的所有事情。

上述程序的赫布兰德基【Herbrand base 】是:

{ likes(peter,peter), likes(peter,maria),likes(maria,peter), likes(maria,maria),student_of(peter,peter), student_of(peter,maria),student_of(maria,peter), student_of(maria,maria) }

如前所述,赫布兰德解释【Herbrand interpretation】是赫布兰德基【Herbrand base】的子集,其元素被赋真值 true。例如:

{ likes(peter,maria), student_of(maria,peter) }

这就是上述程序的赫布兰德解释【Herbrand interpretation】。

显然,我们希望这种解释是程序的一个模型,但现在我们必须处理程序中的变量。替换是从变量【variables】到项【terms】的映射。例如, { S → maria } 和 { S → X } 就是替换。替换可以应用于从句【clause】,这意味着在替换中,出现在左边的所有变量【variables】都被替换为右边的项【terms】。例如,如果 C 是一个子句:

likes(peter,S):-student_of(S,peter).

然后上述的替换产生了下面的从句:

likes(peter,maria):-student_of(maria,peter).
likes(peter,X):-student_of(X,peter).

注意第一个从句【clause】是一个基本从句【ground clause】;它被称为从句 C  的一个基本实例【ground instance】,并且替换  { S → maria }  被称为一个基本替换【grounding substitution】。基本从句【ground clause】中的所有原子【atom】都出现在赫布兰德基【Herbrand base】中,因此使用基本从句【ground clauses】进行推理就像使用命题从句【propositional clauses】进行推理一样。如果一个解释是该从句的每个基本实例【ground instance】的模型,则它是该非基本从句【non-ground clause】的模型。因此,为了证明

M = { likes(peter,maria), student_of(maria,peter) }

是上面从句 C 的一个模型,我们必须构造赫布兰德宇宙【Herbrand universe】 { petermaria }上的基本实例集【set of the ground instances】,即:

{ likes(peter,maria):-student_of(maria,peter),likes(peter,peter):-student_of(peter,peter) }

并证明 M 是这个集合中每个元素的模型。


Exercise 2.6 

子句 C 在赫布兰德宇宙【Herbrand universe】 { petermaria } 上有多少个模型?

likes(peter,S):-student_of(S,peter).

Answer 2.6

该从句的基本实例集【set of ground instances】是:

{ likes(peter,maria):-student_of(maria,peter),likes(peter,peter):-student_of(peter,peter) }

其赫布兰德基【Herbrand base】是:

{ likes(peter,peter),      likes(peter,maria),likes(maria,peter),      likes(maria,maria),student_of(peter,peter), student_of(peter,maria),student_of(maria,peter), student_of(maria,maria) }

只有四个基本原子【ground atom】与确定解释是否为模型有关。对这些基本原子【ground atom】的  个真值赋值中,有 9 个会产生出一个模型。因为有 4 个不相关的基本原子【ground atom】,这就产生了  个模型。请注意,对于这样一个适度的赫布兰德宇宙【Herbrand universe】,这是一个相当大规模的模型,而且是这样一个简单的从句【clause】!这说明更少的知识会导致更多的模型。

{ likes(peter,peter),      likes(peter,maria),student_of(peter,peter), student_of(maria,peter)}
likes(peter,peter)
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
likes(peter,maria)
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
student_of(peter,peter)
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
student_of(maria,peter)
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
从句 1 0 0 0 1 1 0 0 1 0 1 0 1 1 1 1

Proof theory

因为使用基本从句【 ground clauses】进行推理就像使用命题从句进行推理一样,关系从句逻辑中的朴素证明方法将在应用归结【resolution】之前对程序中的每个从句应用基本替换【grounding substitutions】。这种方法是幼稚的,因为一个程序有许多不同的基本替换【grounding substitutions】,其中大多数不会导致归结证明。例如,如果赫布兰德宇宙【Herbrand universe】包含四个常量【constant】,则具有两个不同变量【variables】的从句【clause】就拥有  个不同的基本替换【grounding substitutions】,而由三个此类从句组成的程序就拥有  个不同的基本替换【grounding substitutions】。

在尝试应用归结【resolution】之前,我们不会应用任何基本替换【grounding substitutions】,而是由从句本身推导出所需的替换。会想一下,为了应用命题归结【propositional resolution】,被归结【resolved】的文字【literal】应该出现在两个输入从句【clause】中(在一个从句中是正文字,在另一个从句中是负文字)。在关系从句逻辑中,原子【atoms】可以包含变量【variables】。因此,我们不要求两个从句中出现完全相同的原子【atom】;相反,我们要求有一对原子可以通过替换(即用项替换变量【substituting terms for variables】)而使其相等。例如,假设程序 P 如下所示:

likes(peter,S):-student_of(S,peter).
student_of(maria,T):-follows(maria,C),teaches(T,C).

第二个子句的意思是:“ Maria 是任何教授她所学课程的老师的学生”。从这两个从句我们应该能够证明“如果 Maria 学习 Peter 教授的课程,那么 Peter 喜欢 Maria”。这意味着我们通过 student_of 文字归结这两个从句。

student_of(S,peter) 和 student_of(maria,T) 这两个原子可以通过替换 { S → mariaT → peter } ,用 maria 替换 S ,用 peter 替换 T ,就可以变得相等。这个过程称为合一【unification】,而替换则称为合一子【unifier】。应用此替换会产生以下两个从句:

likes(peter,maria):-student_of(maria,peter).
student_of(maria,peter):-follows(maria,C),teaches(peter,C).

请注意,第二个子句不是基本从句!!!

我们现在可以以通常的方式构造归结式【resolvent】,通过删除被归结的文字,并组合剩余的文字,从而产生所需的从句【clause】:

likes(peter,maria):-follows(maria,C),teaches(peter,C).

Exercise 2.7  

写一个子句,表示 Peter 教授所有一年级的课程,并将归结【resolution】应用于该从句和上述的归结式【resolvent】。

Answer 2.7

下面是表示 Peter 教授所有一年级的课程的从句:

teaches(peter,C):-first_year_course(C).

然后将该从句与前面的归结式【resolvent】进行归结【resolution】,得到如下归结式【resolvent】:

likes(peter,maria):-follows(maria,C),first_year_course(C).

换句话说:“如果 Maria 上了一年级的课程,Peter 就会喜欢她。”


考虑下面的程序 P'

likes(peter,S):-student_of(S,peter).
student_of(X,T):-follows(X,C),teaches(T,C).

它与前面的程序 的不同之处在于第二个从句中的常量  maria  已被一个变量【variable】替换。由于这将这一从句的适用性【applicability】从  maria  推广到 Peter 的任何学生,因此程序 P' 在赫布兰德宇宙【Herbrand universe】(包括  maria  )上的模型,也是程序 的模型,因此 P′⊨P。

特别的是,这意味着 P' 的所有逻辑结论【logical consequences】也是 P 的逻辑结论【logical consequences】。例如,我们可以从程序 P' 中通过 合一子【unifier】 { S → mariaX → mariaT → peter } 推导【derive】出如下从句:

likes(peter,maria):-follows(maria,C),teaches(peter,C).

合一子【Unifiers】不一定需要是基本替换【grounding substitutions】: { X → ST → peter }  这一替换【substitution】也合一【unifies】了两个 student_of 文字,然后这两个从句【clause】归结为:

likes(peter,S):-follows(S,C),teaches(peter,C).

第一个合一子【unifier】用项【term】替换了比严格必要的变量更多的变量(译注:简而言之,就是替换了一些本可以无需替换的变量,这些无需替换的变量并不影响归结),而第二个则只包含合一输入从句中的两个原子所必需的替换。因此,第一个归结式【resolvent】是第二个归结式【resolvent】的特殊情况,第二个归结式【resolvent】可以通过附加替换 { S → maria } 得到。因此,第二个归结式【resolvent】据说比第一个更通用。同样地,第二个合一子【unifier】被称为比第一个更通用的 最广合一子/最一般合一子【most general unifier (mgu)】

可以说,最广归结式/最一般归结式【more general resolvents】概括了许多不那么一般的归结式【resolvent】。因此,在将归结【resolution】应用于带有变量的子句时,只导出【derive】那些尽可能一般的归结式【resolvent】是有意义的。这意味着我们只对两个文字的 最广合一子/最一般合一子【most general unifier (mgu)】感兴趣。这样的 mgu,如果存在,除了任意重命名变量(例如,我们可以决定保留变量 ,并用 替换 S )之外,总是唯一的【unique】。如果一个合一子【unifier】不存在,那么我们就说两个原子是不可合一【unifiable】的。例如,原子 student_of(maria,peter) 和原子 student_of(S,maria) 就是不可合一【unifiable】的。

正如我们之前看到的,从句逻辑中的实际证明方法是通过反证【proof by refutation】。如果我们成功地导出【deriving】了空子句【empty clause】,那么我们已经证明了在足以合一【unification】从句中的文字所需的替换【substitutions】下,子句集是不一致【inconsistent】的。例如,考虑程序:

likes(peter,S):-student_of(S,peter).
student_of(S,T):-follows(S,C),teaches(T,C).
teaches(peter,ai_techniques).
follows(maria,ai_techniques).

如果我们想知道 Peter 是否有喜欢的人,我们在程序中添加对这个陈述【statement】的否定,即“Peter 不喜欢任何人”或 :-likes(peter,N);该从句【clause】被称为一个查询【query】或一个目标【goal】。然后,我们尝试通过归结【resolution】找到不一致来反驳这个查询【query】。图 2.3 给出了一个反驳证明。在这个被称为证明树【proof tree】的图中,一行上的两个从句是归结【resolution】步骤的输入从句,它们通过直线连接到它们的归结式【resolvent】,然后它又是下一归结【resolution】步骤的输入从句,以及另一个程序从句。mgu 也在图中显示出来了。由于推导出了空子句【empty clause】,因此该查询【query】确实被反驳了,但仅在替换 { N → maria } 下,这构成了查询【quey】的答案。

通常,一个查询【query】可以有多个答案【answer】。例如,假设 Peter 不仅喜欢他的学生,还喜欢他的学生喜欢的人(以及那些人喜欢的人,以及……):

likes(peter,S):-student_of(S,peter).
likes(peter,Y):-likes(peter,X),likes(X,Y).
likes(maria,paul).
student_of(S,T):-follows(S,C),teaches(T,C).
teaches(peter,ai_techniques).
follows(maria,ai_techniques).

查询【query】 ?-likes(peter,N) 现在将有两个答案【answer】。


Exercise 2.8 

画出答案 { N → paul } 的证明树。


Meta-theory

与命题归结【propositional resolution】一样,关系归结【relational resolution】也是健全的(即它总是产生输入子句的逻辑结论【logical consequence】),驳斥完备【refutation complete】的(即它总是能检测到一组从句中的不一致),但却不是完备的(即它并不总是产生输入子句的每个逻辑结论【logical consequence】)。关系从句逻辑的一个重要特征是,赫布兰德宇宙【Herbrand universe】(我们可以进行推理的个体集合)总是有限的。因此,这也意味着模型也是有限的,对于任何程序,不同模型的数量总是有限的。这意味着,原则上,我们可以通过列举 P 的所有模型,并检查它们是否也是 C 的模型,来回答这个问题“ C 是程序 P 的逻辑结论吗?”赫布兰德宇宙【Herbrand universe】的有限性将确保这个过程总是可以终止。这表明关系从句逻辑是可判定的【decidable】,因此(原则上)如果找不到更多答案,则可以防止解析归结。正如我们将在下一节中看到的,这不适用于全从句逻辑【full clausal logic】。

constant(peter).
constant(maria).% rel_atom(A,L) <- A is a relational atom with arguments L
rel_atom(likes(X,Y),[X,Y]).
rel_atom(student_of(X,Y),[X,Y]).% Constants are the ground terms in relational clausal logic
ground_term(T):-constant(T).ground_terms([]).
ground_terms([T|Ts]):-ground_term(T),ground_terms(Ts).% An atom is ground if its arguments are ground terms
ground_atom(A):-rel_atom(A,Args),ground_terms(Args).

关系从句逻辑【Relational clausal logic】相关推荐

  1. scala运算符_Scala运算符–算术,关系,逻辑,按位,赋值

    scala运算符 Today we will look into various types of scala operator. An operator tells the compiler to ...

  2. 对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 PAI事件的触发、屏幕元素Function Code设置 屏幕流逻辑Screen Flow Logic 对话屏幕中的字段命名大小写问题

    对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 l  屏幕序号(Screen number).四个数字组成的序列号,用于在程序中确定屏幕,该序号在同一个ABAP程序内部是唯一的. l  屏幕类型 ...

  3. 通过CC逻辑控制芯片(CC Logic)HUSB320,简单实现接口升级

    目前,USB Type-C接口已渐渐成为手机和笔记本电脑等移动设备.便携式设备.物联网设备.智能家居.通信和安防设备.汽车和医疗等领域电子产品的标配.如何在不重新设计这些电子设备系统的前提下,低成本实 ...

  4. 【沃顿商学院学习笔记】领导力——Business Impact:09 逻辑模型四 Logic Model4

    领导力--逻辑模型第四层 本章从逻辑模型第四层来进行学习. 逻辑模型第四层 Logic Model Level 4 模型内容 逻辑模型第四层,您有结果变化的证据,并且您有因果关系证明. 您已经完成了真 ...

  5. C++ 笔记(10)— 运算符(算术、关系、逻辑、位运算、赋值和其它运算符)

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号. C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其它运算符 1. 算术运算符 ...

  6. java 位运算符赋值_java-运算符(算术、赋值 =、关系、逻辑、三元、位运算符)...

    基本运算符与位运算符 算术运算符:两个操作数进行计算 + 加 - 减 * 乘 / 除(取整) % 取余 例子: class ArrayTest{ public static void main(Str ...

  7. Java02-day02【运算符(赋值、关系、逻辑、三元、算数、自增自减)、分支语句(顺序结构、if语句)】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料:[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] &qu ...

  8. 【算术、关系、逻辑、位、复合赋值、带副作用的、自增、自减、其它】运算符(学习笔记4--C语言运算符)

    前言: 如果你正在学习C语言而又不知道从何处开始学,你可以跟着我一起学习C语言,在寒假期间我每天都会发一篇博客,里面有各种C语言的知识点,如果你想学习下去,想进步,就来每天跟着我一起打卡吧,期待我们能 ...

  9. 写给学生看的系统分析与验证笔记(十五)——计算树逻辑(Computation tree logic,CTL)

    目录 介绍 计算树 线性时间和分支时间的对比 CTL的语法 CTL的语义 CTL状态公式的语义 CTL路径公式的语义 CTL在TS上的语义 CTL等价的定义 CTL公式的性质 介绍 在前面我们已经介绍 ...

最新文章

  1. 【C++ STL】Map库使用方法
  2. 信息学奥赛一本通 1071:菲波那契数 | OpenJudge NOI 1.5 17:菲波那契数列
  3. 沃尔玛正测试货架扫描机器人,并称不会取代人类员工
  4. python代码中添加环境变量
  5. ubuntu安装vsftpd遇到的问题
  6. pytorch学习笔记(三十四):MiniBatch-SGD
  7. Hinton领衔谷歌大脑新研究,拯救被认成步枪的乌龟
  8. 如果REST应用程序应该是无状态的,那么如何管理会话?
  9. 基于发起源判断CSRF***的方法
  10. VirtualBox安装Windows 98步骤
  11. kudu底层存储引擎的数据组织方式
  12. 解析微信小程序码的地址scene
  13. 2021信息管理与信息系统专业保研(情报学|管理科学与工程)
  14. 上海相会 | 冒志鸿与丁磊畅谈ArcBlock未来宏图
  15. TM1650芯片驱动四位数码管
  16. VMware vRealize Operations Manager download
  17. dcdc电源 拓扑 分析
  18. Hi3516EV200进行H264/H265视频编码要点注意
  19. 精通matlab神经网络.pdf,精通MATLAB神经网络 (朱凯、王正林) PDF_人工智能教程...
  20. 下载亚马逊Amazon页面产品视频办法(亚马逊视频下载解决方案)

热门文章

  1. 创业板面世对本土微电子界的影响
  2. Cubist software
  3. 【分享NVIDIA GTC 23大会干货】加速生成式AI在生物学和医疗领域的应用
  4. 学编程太枯燥太难怎么办?
  5. ssh localhost免密登录
  6. html中文章列表制作,HTML布局排版之制作个人网站的文章列表
  7. HTTP接口GET方式调用实例
  8. APP软件项目开发流程
  9. 1012 - 曼哈顿距离切比雪夫距离
  10. Linux安装Redis6.0.10步骤