演绎推理的几种形式

本文参考自百度百科https://baike.baidu.com/item/%E6%BC%94%E7%BB%8E%E6%8E%A8%E7%90%862016-08-26。

一、三段论。
一般原理 + (所研究的)特殊情况 -> 特殊情况的原理
基于特殊情况和一般原理的 共同点 ,利用一般原理推导出特殊情况的性质。
例如:知识分子都是应该受到尊重的,人民教师都是知识分子,所以,人民教师都是应该受到尊重的。

二、假言推理。
有基于充分条件和基于必要条件的。
命题:充分条件演绎推理。
->逆否命题->结论
命题:必要条件演绎推理。
->逆命题/否命题->结论

这是基于充分条件的命题和逆否命题等价,必要条件的命题和否命题、逆命题等价来得出结论。

三、选言推理。
选言推理是以选言判断为前提的推理。选言推理分为相容的选言推理和不相容的选言推理两种。

1.相容的选言推理的基本原则是:大前提是一个相容的选言判断,小前提否定了其中一个(或一部分)选言支,结论就要肯定剩下的一个选言支。
例如:这个三段论的错误,或者是前提不正确,或者是推理不符合规则;这个三段论的前提是正确的,所以,这个三段论的错误是推理不符合规则。

2.不相容的选言推理的基本原则是:大前提是个不相容的选言判断,小前提肯定其中的一个选言支,结论则否定其它选言支;小前提否定除其中一个以外的选言支,结论则肯定剩下的那个选言支。
例如:一个词,要么是褒义的、要么是贬义的,要么是中性的。“结果”是个中性词,所以,“结果”不是褒义词,也不是贬义词。

这些和OI关系其实不大。

归结演绎推理是一种基于逻辑推理的方法,它通过逻辑演绎推理来判断某个命题是否成立。下面是一个简单的Python实现归结演绎推理的例子: 假设我们有一个知识库,其中有以下两条命题: - 所有人都是动物 - 猫是人 我们希望通过归结演绎推理来判断“猫是动物”这个命题是否成立。 首先,我们需要将这些命题转换成逻辑形式。对于第一条命题,我们可以使用如下的逻辑表示: ∀x (person(x) → animal(x)) 其中∀x表示对于所有的x,person(x) → animal(x)成立,即所有人都是动物。 对于第二条命题,我们可以使用如下的逻辑表示: person(cat) 其中person(cat)表示猫是人。 接下来,我们需要使用归结规则来进行推理。归结规则的基本思想是将两个命题进行合并,并消去相同的谓词,从而得到一个新的命题。 对于我们的例子,我们可以使用如下的归结规则: - 如果有一个命题P1,其中包含一个谓词A,并且有另一个命题P2,其中包含谓词¬A,那么就可以得到一个新的命题P3,其中包含除了A和¬A之外的所有谓词。 - 如果P3中包含一个谓词B,那么就可以得到一个新的命题P4,其中包含除了A、¬A和B之外的所有谓词。 使用上述归结规则,我们可以将第一条命题和第二条命题进行归结,从而得到新的命题: animal(cat) 可以看出,这个新命题证明了“猫是动物”这个命题成立。 下面是Python代码实现: ```python def unify(x, y, theta): if theta is None: return None elif x == y: return theta elif isinstance(x, str): return unify_var(x, y, theta) elif isinstance(y, str): return unify_var(y, x, theta) elif isinstance(x, list) and isinstance(y, list): if len(x) != len(y): return None else: return unify(x[1:], y[1:], unify(x[0], y[0], theta)) else: return None def unify_var(var, x, theta): if var in theta: return unify(theta[var], x, theta) elif x in theta: return unify(var, theta[x], theta) elif occur_check(var, x, theta): return None else: theta[var] = x return theta def occur_check(var, x, theta): if var == x: return True elif isinstance(x, str) and x in theta: return occur_check(var, theta[x], theta) elif isinstance(x, list): return occur_check(var, x[0], theta) or occur_check(var, x[1:], theta) else: return False def standardize_apart(sentence, dic): if not isinstance(sentence, list): if sentence[0].islower(): if sentence in dic: return dic[sentence] else: dic[sentence] = sentence + '1' return dic[sentence] else: return sentence else: return [standardize_apart(x, dic) for x in sentence] def fol_fc_ask(kb, alpha): inferred = {} agenda = [(alpha, None)] while agenda: (q, parent) = agenda.pop() if q in inferred: continue inferred[q] = parent for r in kb: theta = {} if r[0] == 'not': if unify(r[1], q, theta) is not None: continue else: if unify(r, q, theta) is None: continue r = standardize_apart(r, {}) q = standardize_apart(q, {}) r = substitute(r, theta) q = substitute(q, theta) if len(r) == 1: agenda.append((r[0], q)) else: new_rule = r[1:] new_rule.append(q) agenda.append((new_rule, q)) return inferred def substitute(s, theta): if isinstance(s, list): return [substitute(x, theta) for x in s] elif s in theta: return theta[s] else: return s kb = [ ['person', 'x'], ['person', 'cat'], ['animal', 'x'], ['not', ['animal', 'cat']], ['not', ['person', 'dog']], ['not', ['person', 'fish']], ['not', ['animal', 'bird']], ['not', ['animal', 'insect']], ['not', ['animal', 'reptile']], ['not', ['animal', 'amphibian']], ['not', ['animal', 'bacteria']], ['not', ['animal', 'virus']], ['not', ['animal', 'plant']], ['not', ['animal', 'fungus']] ] alpha = ['animal', 'cat'] result = fol_fc_ask(kb, alpha) if alpha in result: print("命题成立") else: print("命题不成立") ``` 在这个代码中,我们首先定义了几个辅助函数,包括unify、unify_var、occur_check、standardize_apart和substitute。其中unify函数用于统一两个表达式,unify_var函数用于统一一个变量和一个表达式,occur_check函数用于检查一个变量是否出现在一个表达式中,standardize_apart函数用于将表达式标准化(以避免变量名冲突),substitute函数用于对表达式进行替换。 接下来,我们定义了一个fol_fc_ask函数,它接受一个知识库kb和一个命题alpha,并使用归结演绎推理来判断命题是否成立。在这个函数中,我们使用了一个inferred字典来记录已经推出的命题,以避免重复推理。我们还使用了一个agenda列表来保存待推理的命题,每次从agenda中取出一个命题q,然后遍历kb中的所有命题r,尝试使用unify函数对q和r进行归结,从而得到一个新的命题。如果新命题是一个原子命题,那么我们将其加入到agenda中,否则我们使用新命题和q创建一个新的命题,并将其加入到agenda中。最后,如果alpha在inferred中出现,那么我们认为命题成立,否则命题不成立。 在上面的例子中,我们使用了一个简单的知识库,其中包含一些关于人和动物的命题。我们希望判断“猫是动物”这个命题是否成立,于是我们将它转化成了一个原子命题,并将其作为alpha参数传递给fol_fc_ask函数。函数返回一个包含所有推出的命题的字典result,如果alpha在result中出现,那么我们认为命题成立,否则命题不成立。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值