First order logic Prover9生成错误的证明

First order logic Prover9生成错误的证明,first-order-logic,First Order Logic,我正在尝试使用prover9解决一阶逻辑问题,问题是: 一个住在疯子公寓的人杀了阿加莎姨妈 阿加莎、管家和查尔斯住在狂人大厦,是唯一住在那里的人 一个杀手总是恨他们的受害者,而且永远不会比他们的受害者更富有 查尔斯不恨阿加莎姨妈恨的人 阿加莎恨所有人,除了管家 男管家讨厌所有不比阿加莎姨妈富有的人 管家讨厌阿加莎姨妈讨厌的每一个人 没有人恨所有人 阿加莎不是管家 我需要拿出一个证据来解开谁杀了阿加莎的谜团 在Prover9软件的目标框中输入适当的公式 我已将这些语句转换为prover9形式的一阶

我正在尝试使用prover9解决一阶逻辑问题,问题是:

  • 一个住在疯子公寓的人杀了阿加莎姨妈
  • 阿加莎、管家和查尔斯住在狂人大厦,是唯一住在那里的人
  • 一个杀手总是恨他们的受害者,而且永远不会比他们的受害者更富有
  • 查尔斯不恨阿加莎姨妈恨的人
  • 阿加莎恨所有人,除了管家
  • 男管家讨厌所有不比阿加莎姨妈富有的人
  • 管家讨厌阿加莎姨妈讨厌的每一个人
  • 没有人恨所有人
  • 阿加莎不是管家
  • 我需要拿出一个证据来解开谁杀了阿加莎的谜团 在Prover9软件的目标框中输入适当的公式

    我已将这些语句转换为prover9形式的一阶逻辑语句,并设定了找到杀手的目标。在运行时,它说管家是杀害阿加莎的凶手,但在下一个问题中,根据提供的事实,解释谁不可能是杀害阿加莎的管家

    %% 1. Someone who lives in Maniac Mansion killed Aunt Agatha.
    exists x (LivesMM(x) & Killed(x,agatha)).
    
    %% 2. Agatha, the butler, and Charles live in Maniac Mansion, and are the only people who live there.
    LivesMM(agatha) & LivesMM(charles) & LivesMM(butler) & (all x (LivesMM(x) -> ((x=agatha) | (x=charles) | (x=butler)))).
    
    %% 3. A killer always hates his victim, and is never richer than his victim.
    all x all y (Killed(x,y) -> (Hates(x,y) & -(Richer(x,y)))).
    
    %% 4. Charles hates no one that Aunt Agatha hates.
    all x (Hates(agatha,x) -> -Hates(charles,x)).
    
    %% 5. Agatha hates everyone except the butler.
    all x (-(x=butler) -> Hates(agatha,x)).
    
    %% 6. The butler hates everyone not richer than Aunt Agatha.
    all x (-Richer(x,agatha) -> Hates(butler,x)).
    
    %% 7. The butler hates everyone Aunt Agatha hates.
    all x (Hates(agatha,x) -> Hates(butler,x)).
    
    %% 8. No one hates everyone.
    (all x exists y (-Hates(x,y))).
    
    %% 9. Agatha is not the butler.
    -(agatha=butler).
    
    end_of_list.
    
    formulas(goals).
    
    %% Who killed Aunt Agatha?
    
    exists x((x=agatha | x=charles | x=butler) & Killed(x,agatha)).
    
    end_of_list.
    
    问题:


    我希望节目能证明凶手是阿加莎或查尔斯,但不是管家,因为下一个问题是根据上述事实解释为什么管家不能成为凶手。我不知道遗漏了什么,或者我是否错误地将这些语句转换为一阶逻辑。

    程序证明了什么,这与您的期望有什么不同?程序证明了什么,这与您的期望有什么不同?