如何在Prover9中模拟爱因斯坦的船舶拼图(一阶逻辑)

时间:2015-01-18 11:52:47

标签: theorem-proving first-order-logic zebra-puzzle

我需要在Prover9

中对下面的谜题进行建模
  

港口有5艘船:

     
      
  1. 希腊船只在六点起飞,带着咖啡。
  2.   
  3. 中间的船有一个黑色的烟囱。
  4.   
  5. 英国船只在9点离开。
  6.   
  7. 带有蓝色烟囱的法国船只位于运载咖啡的船的左侧。
  8.   
  9. 载着可可的船的右边是一艘前往马赛的船。
  10.   
  11. 这艘巴西船正前往马尼拉。
  12.   
  13. 在运载大米的船旁边是一艘带有绿色烟囱的船。
  14.   
  15. 一艘前往热那亚的船只在五点离开。
  16.   
  17. 西班牙船在七点离开,在船的右边,前往马赛。
  18.   
  19. 带红色烟囱的船前往汉堡。
  20.   
  21. 在七号船离开的旁边是一艘带有白色烟囱的船。
  22.   
  23. 边境的船上有玉米。
  24.   
  25. 带有黑色烟囱的船只在八点落下。
  26.   
  27. 运载玉米的船停泊在运载大米的船旁。
  28.   
  29. 前往汉堡的船只在六点离开。
  30.         

    哪艘船去了赛义德港?哪艘船载茶?

据我所见,prover9接受一阶逻辑子句。但我真的没有把自然语言转换为fol。有人可以告诉我如何在一阶逻辑中对此进行建模,也许可以告诉我如何转换第一个语句?

2 个答案:

答案 0 :(得分:0)

我觉得这不是一个完整的问题陈述。

尽管如此,我认为这个问题与Larry Wos提出的问题类似,然后在OTTER here中提出解决方案。 OTTER和Prover9确实有一些差异,但也有许多相似之处,因此可能会有所帮助,同时检查Prover9的手册。

答案 1 :(得分:0)

set(arithmetic).  % For the "right neighbor", "left neighbour"... relations.
assign(domain_size, 5).  % The five ships are {0, 1, 2, 3, 4}.

list(distinct).      % Objects in each list are distinct.
   [Greek, English, French, Brazilian, Spanish].        % nationalities are distinct
   [Black, Blue, Green, Red, White].          % exteriors are distinct
   [Nine, Five, Seven, Eight, Six].        % leaves at distinct hour
   [Hamburg, Genoa, Marseille, Manila, Port_Said].   % destination is distinct
   [Tea, Coffee, Cocoa, Rice, Corn].  % cargo is distinct
end_of_list.

formulas(assumptions). 
   % Definitions of "right_neighbor"...
   right_neighbor(x, y) <-> x < y.
   left_neighbor(x, y) <-> x > y.
   middle(x) <-> x = 2.
   border(x) <-> x = 0 | x = 4.
   neighbors(x, y) <-> right_neighbor(x, y) | left_neighbor(x, y). 

    Greek = Six.
    Greek = Coffee.
    middle(Black).  
    English = Nine.
    French = Blue.
    left_neighbor(Coffee, French).
    right_neighbor(Cocoa, Marseille).
    Brazilian = Manila.
    neighbors(Rice, Green).
    Genoa = Five.
    Spanish = Seven.
    right_neighbor(Marseille, Spanish).
    Hamburg = Red.
    neighbors(Seven, White).
    border(Corn).
    Black = Eight.
    neighbors(Corn, Rice).
    Hamburg = Six.

end_of_list.

另存为ships.in

使用以下命令运行它:mace4 -c -f ships.in | interpformat