一阶逻辑和猜想范式

时间:2019-06-24 04:00:21

标签: logic artificial-intelligence

请考虑以下段落,请在下面回答这些问题

“任何吃垃圾食品或喝碳酸饮料的人都是癌症的受害者。并非有些人吃垃圾食品,但他们很健康。每个癌症受害者都不健康。 Bimal是一个健康的人”

以一阶逻辑写上一段并将其转换为合取范式。通过考虑第(d)部分中的段落,检查Bimal是否喝碳酸饮料。

1 个答案:

答案 0 :(得分:0)

第一句话:

\forall x,y,z Person(x) \land JunkFood(y) \land CarbonatedBeverage(z) \land (eat(x,y) \lor drink(x,z)) \implies CancerVictim(x)

第二句:

\lnot [\forall y \exists x JunkFood(y) \land Person(x) \land eat(x,y) \land Healthy(x)]

第三句话:

\forall x Person(x) \land CancerVictim(x) \implies \neg Healthy(x)

第四句:

Healthy(Bimal)


首先要转化为CNF,您应该删除通用量词,并用skolem变量替换现有量词:

  • Person(x) \land JunkFood(y) \land CarbonatedBeverage(z) \land (eat(x,y) \lor drink(x,z)) \implies CancerVictim(x)
  • \lnot [\exists x JunkFood(y) \land Person(x) \land eat(x,y) \land Healthy(x)]

\equiv \forall x \neg JunkFood(y) \lor \neg Person(x) \lor \neg eat(x,y) \lor \neg Healthy(x)

\equiv \neg JunkFood(y) \lor \neg Person(x) \lor \neg eat(x,y) \lor \neg Healthy(x)

  • Person(x) \land CancerVictim(x) \implies \neg Healthy(x)
  • Healthy(Bimal)

现在您可以使用逻辑规则将其转换为CNF。

第一句:

\lnot [Person(x) \land JunkFood(y) \land CarbonatedBeverage(z) \land (eat(x,y) \lor drink(x,z))] \lor CancerVictim(x)

\equiv \neg Person(x) \lor \neg JunkFood(y) \lor \neg CarbonatedBeverage(z) \lor (\neg eat(x,y) \land \neg drink(x,z)) \lor CancerVictim(x)

\equiv [\neg Person(x) \lor \neg JunkFood(y) \lor \neg CarbonatedBeverage(z) \lor \neg eat(x,y) \lor CancerVictim(x)] \land [\neg Person(x) \lor \neg JunkFood(y) \lor \neg CarbonatedBeverage(z) \lor \neg drink(x,z) \lor CancerVictim(x)]

\equiv [\neg Person(x) \lor \neg JunkFood(y) \lor \neg eat(x,y) \lor CancerVictim(x)] \land [\neg Person(x) \lor \neg CarbonatedBeverage(z) \lor \neg drink(x,z) \lor CancerVictim(x)]

我从不相关的变量范围(垃圾食品和碳酸饮料)中删除了谓词。您还可以在一开始就通过使用两个通用量词来实现此目的,一个用于食物,一个用于饮料。

第二句话:

\neg JunkFood(y) \lor \neg Person(x) \lor \neg eat(x,y) \lor \neg Healthy(x)

第三句话:

Person(x) \land CancerVictim(x) \implies \neg Healthy(x)

\equiv \neg[Person(x) \land CancerVictim(x)] \lor \neg Healthy(x)

\equiv \neg Person(x) \lor \neg CancerVictim(x) \lor \neg Healthy(x)

第四句话:

Healthy(Bimal)


现在尝试删除相应的句子。我们假设Bimal饮料为碳酸饮料:

\exists x CarbonatedBeverage(x) \land drink(Bimal,x)

\equiv CarbonatedBeverage(f(x)) \land drink(Bimal,f(x))

,我们知道: Person(Bimal)

所以现在我们将这些句子作为CNF子句:

  1. \neg Person(x) \lor \neg JunkFood(y) \lor \neg eat(x,y) \lor CancerVictim(x)
  2. \neg Person(x) \lor \neg CarbonatedBeverage(z) \lor \neg drink(x,z) \lor CancerVictim(x)
  3. \neg JunkFood(y) \lor \neg Person(x) \lor \neg eat(x,y) \lor \neg Healthy(x)
  4. \neg Person(x) \lor \neg CancerVictim(x) \lor \neg Healthy(x)
  5. Healthy(Bimal)
  6. Person(Bimal)
  7. CarbonatedBeverage(f(x))
  8. drink(Bimal,f(x))

我们正在寻找一个矛盾:

  • 从4,5,6起:CancerVictim(Bimal)
  • 来自2,6,7,8:\neg CancerVictim(Bimal)

由于这两个矛盾,我们得到了一个空句,根据荒谬的说法,我们可以说我们最初的假设(Bimal饮料碳酸饮料)是错误的。