谓词逻辑归结原理源代码

合集下载

人工智能第6章 谓词逻辑与归结原理

人工智能第6章 谓词逻辑与归结原理

• 当量词仅对谓词的个体(变量)起限定作用,即谓词名视
为常量时,称其为一阶谓词(First Order Predication
Logic ).
• 若量词对个体和谓词都有限定作用时,称其为高阶谓词。 – 例如: Qy Q(y) 是二阶谓词; xyP( x, y) 是一阶谓词。 • 通常我们约定连接词和量词的优先级为:~, , 最高; 次
–连接 词: –量词:
全称量词
~ 否定(非); 合取(与); 析取(或); 蕴涵(IF......TH EN); 等价(双条件)
表示所有的,例如,对于所有个体x, 谓词F(x)均成立时,可表示为 x F ( x ) 表示存在某一些,例如,若存在某些个体x, 使谓词F(x)成立时,可表示为 x F ( x )
由于事先不知道哪两个子句可以进行归结更不知道通过对哪些子句对的归结可以尽快地得到空子句因而必须对子句集中的所有子句逐对地进行比较对任何一对可归结的子句对都进行归结这样的效率是很低的
第六章 谓词逻辑与归结原理
• 6.1 一阶谓词逻辑基础 • 6.2 归结法(消解Resolution) • 6.3 归结反演系统
4. 若A是合式公式,x是个体变量,则x(A)、
x(A)是合式公式。

所有合式公式都是有限次应用规则1~4得到的。
(1)谓词公式的解释
• 在应用谓词逻辑解决问题时,必须对谓词公式进行解释,即 人为地给谓词公式指派语义。
• 一阶谓词公式P的解释可有多种,其中一些解释可使P为真,
而另一些解释则可使P为假。
• 推理过程:反复使用谓词演算的基本等价式及推理规则, 对已知谓词公式进行变换,得到所需逻辑结论的过程。
6.1.6 谓词公式的规范化
为了方便使用WFF进行定理证明和逻辑推理,需要把 WFF变换为便于使用的规范形式,称为WFF范式。典型的 范式包括:前束范式,SKOLEM范式。

第三章_谓词逻辑与归结原理

第三章_谓词逻辑与归结原理

例:P∨~P

矛盾式或永假式 contradictory

设A为任一命题公式,若A在它的各种赋值下取值均为假,则称 A是永假式。
例: P∧~P
3.1 命题逻辑

可满足式 satisfiable


设A为任一命题公式,如果存在一组取值使A为真,则A为可满 足式。 即:对于命题公式A,若A不是矛盾式,则称A是可满足式。
3.1 命题逻辑

命题公式的赋值

对命题公式中的所有的命题变量各赋给一个值0,1。
真值表 p 0 0 1 1 q 0 1 0 1 ~p p∧q p∨q p→q p ↔q
1 1 0 0
0 0 0 1
0 1 1 1
1 1 0 1
1 0 0 1
3.1 命题逻辑

复合命题的真值
例:
p: 周杰伦是一个流行歌手 q: 人工智能是计算机科学的一个分支 r: 牛在天上飞 求下列复合命题的真值

将命题从语言表述转换为命题公式
step1、找出简单命题,并用符号表示 step2、分析简单命题间的逻辑关系,用联结符号进行描述

4、只要不下雨,我就骑自行车上班 令p表示“天下雨”,q表示“骑自行车上班” 2、教室里有30名男生和10名女生 1、3不是偶数 3、如果天下雨,出门带伞 ~p→q 令:p表示“教室里有30名男生”, 令:p表示“3是偶数”,~p 令p表示“天下雨”,q表示“出门带 q表示“教室里有10名女生” 伞” 5、只有不下雨,我才骑自行车上班 p∧q p→q 令p表示“天下雨”,q表示“骑自行车上班” q →~p
怪物洞穴

智能体行动的关键是要 根据获得的信息推理, 从而判断那个房间有怪 物,那个房间有陷阱, 那个房间是安全的 房间[4,2]和[2,3]有陷阱, 房间[3,4]有怪物,房间 [4,3]有金子

5-谓词逻辑与归结原理

5-谓词逻辑与归结原理
❖若天气凉,则小王就不去游泳。天气凉,所 以小王没去游泳 ❖如果我上街,我一定去书店。我没上街,所 以我没去书店 ❖如果我上街,我一定去书店。我没去书店, 所以我没上街
31
sspu 王帅
32
sspu 王帅
主要内容
▪概述 ▪命题逻辑的归结法 ▪谓词归结子句形 ▪归结原理 ▪归结过程的策略控制 ▪Herbrand定理
(1)根据归结原理,将待证明公式转化成待归结命题公式:
(P → Q) ∧~(~Q → ~P) (2)分别将公式前项化为合取范式:
P → Q = ~P ∨ Q 结论求~后的后项化为合取范式:
~(~Q → ~P)= ~(Q∨~P) = ~Q ∧ P 两项合并后化为合取范式: (~P ∨ Q)∧~Q ∧ P (3)则子句集为:
(2)x Q(x), 其中Q(x)表示x活到一百岁以上。
在个体域D是全总个体域时,
引入特殊谓词R(x)表示x是人,可符号化为:
(1)x(R(x) → P(x)),
其中,R(x)表示x是人;P(x)表示x是要死的。
而例如:1. 快点走吧!
2. 到那去?
3. x+y>10
等等句子,都不是命题。
17
sspu 王帅
命题表示公式(1)
将陈述句转化成命题公式。 如:设“下雨”为p,“骑车上班”为q,, 1.“只要不下雨,我骑自行车上班”。~p 是 q的充分条件, 因而,可得命题公式: ~p → q 2.“只有不下雨,我才骑自行车上班”。~p 是 q的必要条件, 因而,可得命题公式:q → ~p
▪ 冲突消解策略
❖若同时出现多条可匹配知识时,系统必须按一定策略解决冲突, 从中挑选出一条知识用于当前推理
▪ 求解策略

用python做归结演绎推理

用python做归结演绎推理

用python做归结演绎推理归结演绎推理是一种常用的逻辑推理方式,可以用Python实现。

下面我们将介绍Python如何实现归结演绎推理。

归结演绎推理基于逆否命题原理,即若一个命题的逆否命题成立,则该命题也成立。

首先,我们需要定义元素和谓词。

元素是指所涉及的对象,谓词则是描述元素的属性。

例如,元素可以是“苹果”,谓词是“红色”。

接下来,我们需要定义规则集合。

规则是对元素和谓词之间的关系进行描述的语句。

例如,“苹果是红色的”可以表示为规则。

规则集合由多个规则组成,它们共同描述一个问题的特征。

下一步是定义问题的查询语句。

查询语句是指用户想要得出结论的问题。

例如,查询“这个苹果是否是红色的?”就是一个查询语句。

最后,我们将使用Python实现归结演绎推理算法。

该算法通过对规则进行逆否命题,从而向前推导并验证查询语句。

具体实现过程如下:1. 定义元素和谓词:```element = ['苹果', '橙子', '白菜']predicate = ['红色', '橙色', '绿色']```2. 定义规则集合:```rules = [('苹果', '红色'), ('橙子', '橙色'), ('白菜', '绿色')] ```3. 定义逆否命题函数:```def inverse(pred):if "不" in pred:pred = pred[1:]else:pred = "不" + predreturn pred```4. 定义归结函数:```def resolution(goal):new_goal = inverse(goal)while True:flag = Falsefor rule in rules:if rule[1] == new_goal:new_goal = rule[0]flag = Trueif not flag:breakif new_goal == goal:return Trueelse:return False```5. 最终推理过程:```# 查询“这个苹果是否是红色的?”goal = ("苹果", "红色")if resolution(goal):print("是的,这个苹果是红色的!") else:print("不是的,这个苹果不是红色的!") ```至此,我们已经成功实现了用Python进行归结演绎推理的过程。

人工智能第三章谓词逻辑与归结原理

人工智能第三章谓词逻辑与归结原理
• 如P(x) ∨ Q(y)与~P(a) ∨ R(z)
• 所以要考虑置换与合一。即对变量 作适当的替换。
《人工智能》第三章 谓词逻辑与归结原理
置换
• 置换:可以简单的理解为是在一个谓词公式中用 置换项去置换变量。
• 定义: 置换是形如{t1/x1, t2/x2, …, tn/xn}的有限集合。其 中,x1, x2, …, xn是互不相同的变量,t1, t2, …, tn是 不同于xi的项(常量、变量、函数);ti/xi表示用ti 置换xi,并且要求ti与xi不能相同,而且xi不能循环 地出现在另一个ti中。
例如: {a/x,c/y,f(b)/z}是一个置换。 {g(y)/x,f(x)/y}不是一个置换。
《人工智能》第三章 谓词逻辑与归结原理
置换的合成
• 设={t1/x1, t2/x2, …, tn/xn}, ={u1/y1, u2/y2, …, un/yn},是两个置换。 则与的合成也是一个置换,记作·。它是从集合
• 最一般合一求取方法
– 令W={F1,F2} – 令k=0,W0=W, σ0=ε – 如果Wk已合一,停止, σk=mgu,否则找Dk – 若Dk中存在元素vk和tk,其中,vk不出现在tk中,转下一
步,否则,不可合一。 – 令σk+1= σk.{tk/vk},Wk+1=Wk{tk/vk}=W σk+1 – K=k+1转第3步。
《人工智能》第三章 谓词逻辑与归结原理
谓词归结子句形
• 子句与子句集
– 文字:不含任何连接词的谓词公式。 – 子句:一些文字的析取(谓词的和)。 – 空子句:不含任何文字的子句。记作NIL或
□ – 子句集:所有子句的集合。 – 对于任何一个谓词公式G,都可以通过

人工智能导论课件:第四章 谓词逻辑与归结原理

人工智能导论课件:第四章 谓词逻辑与归结原理
5
谓词逻辑
是一种形式语言,具有严密的理论体系 是一种常用的知识表示方法, 例:
City(北京) City(上海) Age(张三,23) (X)(Y)(Z)(father(X, Y)father(Y,
Z)gf(X, Z)
6
归结原理
归结原理是一种定理证明方法,1965年由 J.A.Robinson提出,从理论上解决了定理证明 问题。当时被认为是人工智能领域的重大突破。
例如:令E为p(x,y,f(a))
={b/x,f(x)/y},则 E= ?
E=p(b,f(x),f(a)) 此例显示了同时置换的含义. 可以看到E是
在E上的作用,也就是将E中的(i=1, ,n)同时换成相 应的ti所得到的公式.
34
ห้องสมุดไป่ตู้
置换乘法
定义 令 ={s1/y1,,sm/ym}, ={t1/x1,,tn/xn},则与的复合是
32
置换
定义: 置换是形如{t1/x1,,tn/xn}的有限集,其中xi是 互不相同的变量,ti是不等于xi的项,且xi与ti互不循环 出现. 如果ti都是不含变量的项(基项),称该置换为基置换. 若={ },则称为空置换(表示不做置换),记为.
例如:1) {a/x,g(y)/y,f(g(b))/z}是一个置换? (是, 但不是基置换).
F1F2…Fn~W为永假,可以通过证明F所 对应的子句集S=S0∪{~W}是不可满足的。
22
命题: P|=F P{F}是不可满足的。 证明: ① 若P {~F}是不可满足的,则 P|= F ② 若P|=F 则 P {~F}是不可 满足的。(反证法)
23
归结原理
基本思想 将待证明的逻辑公式的结论(F),通过 等值公式转换成附加前提,再证明该逻 辑公式是不可满足的。

谓词逻辑与归结原理2

谓词逻辑与归结原理2

开始: (1)消去蕴涵符号 只应用∨和~符号,以~A∨B替换AB。
16/57
(2) (x){~P(x)∨{(y)[~P(y)∨P(f(x,y))]
∧(y)[Q(x,y)∧~P(y)]}}
(2) 减少否定符号的辖域 每个否定符号~最多只用到一个谓词符号上,并 反复应用狄· 摩根定律。
(3) (x){~P(x)∨{(y)[~P(y)∨P(f(x,y))]
20/57
谓词归结子句形( Skolem 标准形)


量词消去原则: 消去存在量词“”,略去全程量词 “”。
注意:左边有全程量词的存在量词,消去
时该变量改写成为全程量词的函数;如没有, 改写成为常量。
21/57
谓词归结子句形( Skolem 标准形)



( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x) ( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x)
文字:不含任何连接词的谓词公式。 子句:一些文字的析取(谓词的和)。 子句集S的求取: G → SKOLEM标准形 → 消去存在变量 → 以“,”取代“Λ”,并表示为集合形式 。

谓词演算及应用

谓词演算及应用

命题逻辑基础
基本等值式(1) 摩根率: ~ (p∨q) <=> ~ p Λ ~ q ; ~ (p Λq) <=> ~ p ∨ ~ q 吸收率: p∨(pΛq ) <=> p ; p Λ(p∨q ) <=> p 同一律: p∨0 <=> p ; pΛ1 <=> p 蕴含等值式:p → q <=> ~ p∨q 假言易位式: p → q <=> ~ p → ~ q
消去量词等值式:设个体域为有穷集合(a1, a2, …an)
( x ) P(x) <=> P( a1 ) Λ P( a2 ) Λ …Λ P( an )
( x )P(x) <=> P( a1 ) ∨ P( a2 ) ∨ …

P( an )
谓词归结原理基础
量词辖域收缩与扩张等值式:
( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x) ( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x)
命题表示公式(1)
将陈述句转化成命题公式。 如:设“下雨”为p,“骑车上班”为q,, 1 .“只要不下雨,我骑自行车上班”。~ p 是 q的充分条件, 因而,可得命题公式: ~p → q 2.“只有不下雨,我才骑自行车上班”。~ p 是 q的必要条件, 因而,可得命题公式:q → ~p

使用XML的一阶谓词逻辑归结原理

使用XML的一阶谓词逻辑归结原理

谢铉 洋 , 谢荣 传 ( 徽 大学 计 算机 科 学与 工程 系, 安 安徽 合肥 ,30 9 20 3 )
X E X a —a g X E R n —h a ( e t o o ue S i n n . A h i i. I u n y n , I o gc u n D p . f mp tr c.a d E g , n u Unv ,He i H 3 0 9 C ia C f 203 , h ) eA n 中国分 类号: P 8 T 11 rslt r c e是计算机 自动推理 的重 o i p
要原理 之一。将 XML加入到 使 用归结 原理 的 证 明过程 中, 利用 XML结构 与语义 自描述 的特性, 简化 归结 过程 的计算 机实现。 并给 出相应基 于 XML的算法。 关键 词 : 可延伸标示语 言; 归结 原理 ; 不一致集
不可满足的。证 明的步骤是 首先将 A1 ^A2^A3^B 化为 S OL M 标 准型, K E 进而 建立 字 句集, 后使 用归 最
结原理证 明。 对 于 给 定 的谓 词 公 式 G = A】^ A2^ A3^ B,
收稿 日期 :0 2 2 6 2 0 一O 一O
首先将其化成 与其等 值的前束范式
Ab ta t Re o u in p n i l so ft e mo ti o t nt rn i sr c : s l t r cp e i neo h s mp ra i c— o i p pe n a t ma i e c i n.I e a e XM L i t h sp o e u e is i u o tcd du t o ntgr t n o t i r c d r . By u i zn hes r c u e a d s ma tc s l — d s rp in fa u e tl i g t t u t r i n e n i ef eci t e tr s o o f XM L, we c n s h t t e r s l t n p o e s a d c mp t a e ta h eoui r s o c n o ui ng

谓词逻辑与归结原理

谓词逻辑与归结原理

处理机:能执行软件、具有计算能力的结点,如主机、服务器、 客户机等; 设备:没有计算能力的结点,如打印机、传感器、终端等。
构件图概念

构件



构件是定义了良好接口的物理实现单元,是系统中可替 换的物理部件。它把系统的实现打包,并提供一组接口 的实现 构件具有确定的接口,相互之间可以调用,构件之间存 在依赖关系。 在UML中,构件用一个左侧带有突出两个小矩形的矩 形来表示。
构件图概念

构件

构件的类型(UML2.0)


为了从物理层面描述软件开发过程中的用到的构件和结点, 也经常使用构件图和部署图
构件图概念

构件与构件图


构件(component): 是一个相对独立的可装配的物理块, 一般作为一个独立的文件存在,也翻译为组件。 构件图则表示一组构件以及它们之间的相互关系,包括 编译、链接或执行时构件之间的依赖关系
部署图概念

部署图的用途

显示系统结点的拓扑结构和通信路径、结点上执行 的软件构件、以及硬件设备的配置

部署图的组成元素


结点(Node) 关联关系(Association)
部署图概念

结点


结点(node) 是运行时代表计算资源的物理元素。结点通 常有内存及处理能力,它可以是物理设备及运行在该设 备上的软件系统. 结点分为处理机(processor)和设备(device)两类。
square类 (square.obj)
main类 (main.cpp) 依赖
main类 (main.obj)
主执行程序 (main.exe)
构件

谓词逻辑与归结原理1

谓词逻辑与归结原理1
– 只要p,就q
p
q 1 0 1 0
p →q 1 0 1 1
q是p的必要条件有许多不同的叙述方式
– 因为p,所以q
– p仅当q – 只有q才p
– 除非q才p
– 除非q,否则非p
14/52
例 将下列命题符号化,并指出其真值
(1) (2) (3) (4)
如果3+3=6,则雪是白的。 如果3+3≠6,则雪是白的。 如果3+3=6,则雪不是白的。 如果3+3≠6,则雪不是白的。
解:令p:3+3=6,p的真值为1。 q:雪是白色的,q的真值也为1。 (1) p→q 1 1 0 1
15/52
(2)┐p→q
(3) p→┐q
(4) ┐p→┐q
例 将下列命题符号化,并指出其真值
以下命题中出现的a是一个给定的正整数: (5) 只要a能被4整除,则a一定能被2整除。 (6) a能被4整除,仅当a能被2整除。 (7) 除非a能被2整除, a才能被4整除。 (8) 除非a能被2整除,否则a不能被4整除。 (9) 只有a能被2整除, a才能被4整除。 (10)只有a能被4整除, a才能被2整除。
9/52
例 将下列命题符号化
(1) (2) (3)
(4)
(5)
吴颖既用功又聪明。 p: 吴颖用功。 q: 吴颖不仅用功而且聪明。 吴颖聪明。 r: 张辉是三好学生。 吴颖虽然聪明,但不用 s: 王丽是三好学生。 功。 t: 张辉与王丽是同学。 张辉与王丽都是三好学 生。 张辉与王丽是同学。 (1)p∧q
22/52
赋值举例



在公式(┐p1∧┐p2∧┐p3)∨(p1∧p2)中, 000(p1=0,p2=0,p3=0), 110(p1=1,p2=1,p3=0)都是成真赋值, 001(p1=0,p2=0,p3=1), 011(p1=0,p2=1,p3=1)都是成假赋值。 在(p∧┐q)→r中, 011(p1=0,p2=1,p3=1)为成真赋值, 100(p1=1,p2=0,p3=0)为成假赋值。 重要结论: 含n(n≥1)个命题变项的公式共有2n个不同的赋 值。

人工智能 谓词逻辑与归结原理

人工智能 谓词逻辑与归结原理

人工智能
命题逻辑归结方法
吉林大学珠海学院计算机科学与技术系
命题归结式 设 c1, c2是两个子句, c1=L1∨D1, c2=L2∨D2 , 其中L1 =~ L2, L1 , L2也 称作互补文字, D1和D2 为子句. 则 D1∨D2称作c1, c2的归结式, 记为R(c1, c2), c1, c2称做是归结式的亲本子句。 • 例如, 设 c1, c2是两个子句, c1 = ~P∨Q, c2 = P∨R∨~ S, 则~P和P为互补文 字, c1, c2的归结式是Q∨R∨~ S.
人工智能
命题逻辑归结方法
吉林大学珠海学院计算机科学与技术系
• 一个命题逻辑公式可以采用如下方式转换 成等价的子句的合取形式, 即合取范式: • 1. 利用等价公式 P←→ Q =( P→Q)∧ (Q←P)和P→Q=~P∨Q删去公式中的←→ 符号和→符号. • 2. 利用De Morgan 律把所有的否定符号移 到每个原子之前. • 3. 利用分配律得到子句的合取形式
定义:满足, 模型, 有效, 不一致
如果一个解释 I 使语句 s 取值为真, 则称解释I满足s, 也称I是s的模型,如果语句s对所有解释都取值为真,则s称 为是有效的(valid),如果语句s对所有解释都取值为假,则 s称为是不一致的(inconsistent),
定义:证明过程
利用逻辑蕴涵推出新语句的过程,推导出的结果称为推导 结果
定义: 命题逻辑公式(Well-formed formula, WFF) 利用命题演算符号, 真值符号和逻辑连接词组成
的合法符号串。
人工智能
合取项(conjunct) 析取项(disjunct)
吉林大学珠海学院计算机科学与技术系
蕴涵式(implication)

谓词逻辑归结原理源代码

谓词逻辑归结原理源代码

#include<iostream.h>#include<string.h>#include<stdio.h>#define null 0typedef struct{char var;char *s;}mgu;void strreplace(char *string,char *str1,char *str2) {char *p;while(p=strstr(string,str1)){int i=strlen(string);int j=strlen(str2);*(string+i+j-1)='\0';for(int k=i-1;(string+k)!=p;k--)*(string+k+j-1)=*(string+k);for(i=0;i<strlen(str2);i++)*(p++)=*(str2+i);}}void sort(mgu *u,int count){int j=count;int k=j;if(count==1)return;for(int i=1;i<count;i++){if(!((u+i)->s))continue;if((u+i)->var==(u+j)->var){delete (u+j)->s;(u+j)->s=null;k--;j=i;}if(((u+i)->s)&&((u+i)->var==*((u+i)->s))) {delete (u+i)->s;(u+i)->s=null;k--;}}j=count;if(k==j)return;count=k;for(int i=1;i<j&&k>0;i++){if((u+i)->s)continue;while(!((u+j)->s))j--;(u+i)->var= (u+j)->var;(u+i)->s= (u+j)->s;(u+j)->s=null;k--;}cout<<"gjvjkhllknkln";}class unifier{char *string;mgu unit[50];int count;public:int num;unifier();void input();int differ(int n);int change(int i,int j,int n);void print();~unifier(){delete string;}};unifier::unifier(){count=0;unit[0].s=null;}void unifier::input(){cout <<endl<< "请输入原子谓词公式的个数(输入0退出) "; cin>>num;string=new char[num*50];cout<<"请注意:公式的输入不能出错!"<<endl;for(int j=1;j<=num;j++){cout << "请输入第" << j << "个原子谓词公式(字符个数不超过50个)" <<endl; cin>>(string+(j-1)*50);}}int unifier::change(int i,int j,int n){char temp[2][10];temp[0][0]=string[i++];temp[1][0]=string[j++];if(string[i]!='(')temp[0][1]='\0';else{int k=1,flag=1;temp[0][k++]=string[i++];while((flag!=0)&&k<10){if(string[i]=='(')flag++;else if(string[i]==')')flag--;temp[0][k++]=string[i++];}temp[0][k]='\0';}temp[1][1]='\0';if(strlen(temp[1])==1){if(strstr(temp[0],temp[1]))return 2;strreplace(string+n*50,temp[1],temp[0]);strreplace(string+(n+1)*50,temp[1],temp[0]);count++;int m=count;unit[m].var=temp[1][0];char *p=new char[strlen(temp[0])+1];unit[m].s=p;strcpy(p,temp[0]);}return 1;}int unifier::differ(int n){int i=n*50,j=(n+1)*50;while((string[i]!='\0')&&(string[j]!='\0')&&(string[i]==string[j])) {i++;j++;}if(string[i]=='\0'||string[j]=='\0')return 1;int k;if(string[i+1]=='(')k=change(i,j,n);else if(string[j+1]=='(')k=change(j,i,n);else if(string[j]=='x'||string[j]=='y'||string[j]=='z'||string[j]=='u'|| string[j]=='v'||string[j]=='w')k=change(i,j,n);elsek=change(j,i,n);if(k==2)return k;j=count;char c[2],*p;for(i=1;i<j;i++){c[0]=unit[j].var;c[1]='\0';if(!strstr(unit[i].s,c))continue;p=new char[strlen(unit[j].s)+strlen(unit[i].s)+1];strcpy(p,unit[i].s);strreplace(p,c,unit[j].s);delete unit[i].s;unit[i].s=p;}sort(unit,count);return 0;}void unifier::print(){cout <<"The MGU is ";for(int i=1;i<count+1;i++){cout <<(unit[i]).s<<"/"<<unit[i].var;if(i<count)cout<<",";}}int once(){unifier form;form.input();if(form.num<2){cout<<"The MGU is empty!"<<endl;return form.num;}int k=form.differ(0);if(k==1&&form.num==2){cout<<"The MGU is empty!"<<endl;return form.num;}if(k==2){cout<<"The MGU is not exist!"<<endl;return form.num;}else if(k==0&&form.num==2){while(k!=1){k=form.differ(0);if(k==2){cout<<"The MGU is not exist!"<<endl;return form.num;}}form.print();return form.num;}for(k=0;k<form.num-1;k++){if(form.differ(k)==2){cout<<"The MGU do not exist!"<<endl;return form.num; }}form.print();}int main(){int i=once();while(i!=0)i=once(); return 0;}。

离散数学谓词逻辑python

离散数学谓词逻辑python

离散数学谓词逻辑python离散数学是计算机科学的基础学科之一,而谓词逻辑是离散数学中的重要内容之一。

谓词逻辑是一种描述事物之间关系的形式化语言,它使用谓词和变量来表达命题和推理关系。

在计算机科学中,谓词逻辑常用于描述和推理程序的正确性和性能等问题。

在本文中,我们将介绍如何使用Python来处理谓词逻辑。

在Python中,我们可以使用一些库来处理谓词逻辑。

其中一个常用的库是`pyDatalog`,它提供了一种简洁而强大的语法来表示和计算谓词逻辑。

让我们通过一个例子来说明如何使用`pyDatalog`来处理谓词逻辑。

假设我们有一个谓词逻辑的知识库,其中包含了一些事实和规则。

我们可以使用`pyDatalog`来定义这些事实和规则,并进行查询。

首先,我们需要导入`pyDatalog`库:```pythonfrom pyDatalog import pyDatalog```然后,我们可以定义一些谓词和变量。

例如,我们可以定义一个叫做`father`的谓词,它接受两个参数,表示父亲和儿子之间的关系:```pythonpyDatalog.create_terms('father, X, Y')```接下来,我们可以定义一些事实和规则。

例如,我们可以定义一个事实,表示“Tom是John的父亲”:```python+father('Tom', 'John')```我们还可以定义一个规则,表示如果A是B的父亲,那么B是A的儿子:```pythonfather(X, Y) <= father(Y, X)```现在,我们可以对这个谓词逻辑进行查询。

例如,我们可以查询谓词`father`,找出所有的父子关系:```pythonprint(father(X, Y))```运行上述代码,我们可以得到结果`father('Tom', 'John')`,表示Tom是John的父亲。

人工智能谓词逻辑及归结原理

人工智能谓词逻辑及归结原理
消解反演
反演求解的正确性 设公式L在逻辑上遵循公式集S,那么按照定义 满足S的每个解释也满足L。决不会有满足S的 解释能够满足~L的,所以不存在能够满足并 集S∪{~L}的解释。如果一个公式集不能被 任一解释所满足,那么这个公式是不可满足的 。因此,如果L在逻辑上遵循S,那么S∪{~ L}是不可满足的。可以证明,如果消解反演 反复应用到不可满足的子句集,那么最终将要 产生空子句NIL。因此,如果L在逻辑上遵循S
消解反演求解过程
消解反演
反演求解的步骤
给出一个公式集S和目标公式L,通过反证或反 演来求证目标公式L,其证明步骤如下: (1)否定L,得~L; (2)把~L添加到S中去; (3)把新产生的集合{~L,S}化成子句集; (4)应用消解原理,力图推导出一个表示矛盾 的空子句NIL。
消解反演求解过程
反演求解的举例
"菲多在哪里"例题的反演树
从消解求取答案例题的反演树 修改证明树
修改证明树
"菲多在哪里"例题的修改证明树
反演求解的举例
已知:①会朗读的人是识字的; ②海豚都不识字; ③有些海豚是很机灵的。
证明:有些很机灵的东西不会朗读。
把问题用谓词逻辑描述如下: 已知: ①( x)(R(x)→L(x))
化成子句集
①~ pass(x,computer)∨~ win(x,prize)∨happy(x) ②~ study(y)∨pass(y,z) ③~ lucky(u)∨pass(u,v) ④~ study(zhang) ⑤lucky(zhang) ⑥~ lucky(w) ∨ win(w,prize) ⑦~happy(zhang)
谓词逻辑与归结原理
消解原理基本知识
• 合取范式:仅由有限个简单析取式构成的合取式,

谓词演算与消解(归结)原理-图文

谓词演算与消解(归结)原理-图文

3.3.3 合一的一个例子
在此基础上又调用: unify (((father bill) (mother bill)), ((father bill) Y )) 导致调用: (1) unify((father bill),(father bill)) unify (father, father) unify (bill, bill) unify (( ), ( )) 所有的调用都成功,返回空代入集 { }。 (2) unify ((mother bill), Y)
与谓词相关的一个正整数称为元数或“参数数目”, 具有相同的名但元数不同的谓词是不同的。
真值true和false也是原子命题。
任何原子命题都能够用逻辑操作符将其变成谓词演 算的命题。用的联结词也和命题演算一样: ∨,∧, ~, => 和=。
当一个变元在一个命题中作为参数出现时,它代表 的是域中不特定的对象。谓词演算包括两个符号, 量词(全称量词)和彐(存在量词), 用于限定 包含变元的命题的含义。
3.2.2 谓词演算的语义
谓词演算表达式的真值 设有表达式E和在非空论域D上对E的一个解释I,E的
真值按以下规律决定: 1)一个常元的值是根据I指派给它的D的一个元素。 2)一个变元的值是根据I指派给它的D的一个元素集合
。 3)一个函词的值是根据由I指派给它的参数值计算得
到的D的元素。 4)真值符号true的值是T,false的值是F。 5)原子命题的值或者为T,或者为F,取决于解释I。 6)如果一个命题的值为F,则其否定式为T,否则为F

~ (P∧Q) = (~P∨~Q)
▪分配律:P∨(Q∧R) = (P∨Q)∧(P∨R)
▪ 分配律:P∧(Q∨R)=(P∧Q)∨(P∧R)

第3.3节 谓词逻辑的归结原理共63页

第3.3节  谓词逻辑的归结原理共63页

复杂的谓词公式可以分而治之,化整为零。
2008-2009学年第1学期
3.3节 谓词逻辑的归结原理
10
4. 置换与合一
置换
{t1/x1, t2/x2, …, tn/xn}称为对谓词公式的一个置换,表示 将谓词公式中的xi替换为ti。
辖域扩展
x y z w ( P ( a , x , y ) Q ( w , b ) R ( z ))
辖域扩展
4)求 skolem 标准型
x y z w ( P ( a , x , y ) Q ( w , b ) R ( z ))
x z w ( P ( a , x , f ( x )) Q ( w , b ) R ( z ))
2008-2009学年第1学期
3.3节 谓词逻辑的归结原理
4
归结原理的基本思想
证明(用谓词公式表达的)定理
就是要证明“前提→结论”是永真式; 即对任一种解释,谓词公式都为真; 直接对每个解释,求证谓词公式为真,然后归纳,这是
很麻烦的,甚至是不可能的; 要证明“前提→结论”是永真式,等同于证明; 若“前提∧~结论”真的是永假式,则寻找合适算法,
就可在有限步内判定。归结方法就是这样的算法。
2008-2009学年第1学期
3.3节 谓词逻辑的归结原理
5
Skolem标准型
前束范式
公式中的所有量词都在最左边,且每个量词的辖域都 延伸到公式末端。
形如:Q1x1Q2x2…QnxnM(x1, x2, …, xn)
例:
w x y z ( P ( w ) Q ( x , y , z ) R ( x , y , z , u ))
Miller给Robinson一篇60年的关于谓词演算证明过程的 论文,当时没有计算机程序实现,让他在IBM704上实现 该演算。

第四章 归结法原理

第四章 归结法原理

• • • •
x(R(x) Q(x)), x(R(x) Q(x)), R(b) Q(b) {R(b), Q(b)}
计算机学院
计算机学院
21 21
(4) 构造子句集S= SA∪SB∪SC (5) 构造以下反驳: • C1 = P(c) • C2 = R(x) S(c, x) • C3 = P(y) Q(z) S(y, z) • C4 = R(b), • C5 = Q(b) • C6= Q(z) S(c, z) C1, C3 ├res C6 计算机学院 • C7= S(c, b) C2, C4 ├res C7 • C8= Q(b) C6, C7 ├res C8 • C9= □ C5, C8 ├res □ 证毕。
归结子句不唯一
计算机学院 1Leabharlann 10反驳 定义:设S是子句集合,如果子句序列C1, …, Cn满足
如下条件,则称子句序列C1,…,Cn为子句集合S的一
个反驳。 (1) 对于每个1≤k<n, • CkS,或者 • Ck是Ci和Cj的归结子句,i<k,j<k。
(2) Cn是□。
计算机学院
计算机学院

计算机学院
计算机学院
5 5
定义
子句集:子句的有限集合称为子句集.
• 子句集{{P1,1, …, P1,m}, … , {Pn,1, …, Pn,m}},
表示公式(P1,1 … P1,m) … (Pn,1 … Pn,m)的 闭包 • 子句集合{{P(x), Q(y)}, {P(c),计算机学院 Q(z)}}表示Skolem 范式xyz((P(x)Q(y)) (P(c) Q(z)))
• yz(P(y) R(z) L(y,z)) • {P(y) R(z) L(y,z)}
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<iostream.h>#include<string.h>#include<stdio.h>#define null 0typedef struct{char var;char *s;}mgu;void strreplace(char *string,char *str1,char *str2) {char *p;while(p=strstr(string,str1)){int i=strlen(string);int j=strlen(str2);*(string+i+j-1)='\0';for(int k=i-1;(string+k)!=p;k--)*(string+k+j-1)=*(string+k);for(i=0;i<strlen(str2);i++)*(p++)=*(str2+i);}}void sort(mgu *u,int count){int j=count;int k=j;if(count==1)return;for(int i=1;i<count;i++){if(!((u+i)->s))continue;if((u+i)->var==(u+j)->var){delete (u+j)->s;(u+j)->s=null;k--;j=i;}if(((u+i)->s)&&((u+i)->var==*((u+i)->s))) {delete (u+i)->s;(u+i)->s=null;k--;}}j=count;if(k==j)return;count=k;for(int i=1;i<j&&k>0;i++){if((u+i)->s)continue;while(!((u+j)->s))j--;(u+i)->var= (u+j)->var;(u+i)->s= (u+j)->s;(u+j)->s=null;k--;}cout<<"gjvjkhllknkln";}class unifier{char *string;mgu unit[50];int count;public:int num;unifier();void input();int differ(int n);int change(int i,int j,int n);void print();~unifier(){delete string;}};unifier::unifier(){count=0;unit[0].s=null;}void unifier::input(){cout <<endl<< "请输入原子谓词公式的个数(输入0退出) "; cin>>num;string=new char[num*50];cout<<"请注意:公式的输入不能出错!"<<endl;for(int j=1;j<=num;j++){cout << "请输入第" << j << "个原子谓词公式(字符个数不超过50个)" <<endl; cin>>(string+(j-1)*50);}}int unifier::change(int i,int j,int n){char temp[2][10];temp[0][0]=string[i++];temp[1][0]=string[j++];if(string[i]!='(')temp[0][1]='\0';else{int k=1,flag=1;temp[0][k++]=string[i++];while((flag!=0)&&k<10){if(string[i]=='(')flag++;else if(string[i]==')')flag--;temp[0][k++]=string[i++];}temp[0][k]='\0';}temp[1][1]='\0';if(strlen(temp[1])==1){if(strstr(temp[0],temp[1]))return 2;strreplace(string+n*50,temp[1],temp[0]);strreplace(string+(n+1)*50,temp[1],temp[0]);count++;int m=count;unit[m].var=temp[1][0];char *p=new char[strlen(temp[0])+1];unit[m].s=p;strcpy(p,temp[0]);}return 1;}int unifier::differ(int n){int i=n*50,j=(n+1)*50;while((string[i]!='\0')&&(string[j]!='\0')&&(string[i]==string[j])) {i++;j++;}if(string[i]=='\0'||string[j]=='\0')return 1;int k;if(string[i+1]=='(')k=change(i,j,n);else if(string[j+1]=='(')k=change(j,i,n);else if(string[j]=='x'||string[j]=='y'||string[j]=='z'||string[j]=='u'|| string[j]=='v'||string[j]=='w')k=change(i,j,n);elsek=change(j,i,n);if(k==2)return k;j=count;char c[2],*p;for(i=1;i<j;i++){c[0]=unit[j].var;c[1]='\0';if(!strstr(unit[i].s,c))continue;p=new char[strlen(unit[j].s)+strlen(unit[i].s)+1];strcpy(p,unit[i].s);strreplace(p,c,unit[j].s);delete unit[i].s;unit[i].s=p;}sort(unit,count);return 0;}void unifier::print(){cout <<"The MGU is ";for(int i=1;i<count+1;i++){cout <<(unit[i]).s<<"/"<<unit[i].var;if(i<count)cout<<",";}}int once(){unifier form;form.input();if(form.num<2){cout<<"The MGU is empty!"<<endl;return form.num;}int k=form.differ(0);if(k==1&&form.num==2){cout<<"The MGU is empty!"<<endl;return form.num;}if(k==2){cout<<"The MGU is not exist!"<<endl;return form.num;}else if(k==0&&form.num==2){while(k!=1){k=form.differ(0);if(k==2){cout<<"The MGU is not exist!"<<endl;return form.num;}}form.print();return form.num;}for(k=0;k<form.num-1;k++){if(form.differ(k)==2){cout<<"The MGU do not exist!"<<endl;return form.num; }}form.print();}int main(){int i=once();while(i!=0)i=once(); return 0;}。

相关文档
最新文档