Skip to content

XSB Segfault after atom insertion and query #7

@danbryce

Description

@danbryce

Describe the bug

I have reproduced a Segfault (in XSB) by two different methods: 1) ErgoAI Java UI, and 2) pyergo python bindings. Both cases involve loading several statements, followed by a series of interleaved queries and atom insertions. The nature of these insertions and queries is that they are building up a sequence of actions and states, which will result in increasingly challenging queries (not considering caching/tabling).

For context, the rules are a situation calculus encoding of a Chinese checkers game, where the inserted atoms assert the moves taken, and the queries determine which moves are legal at a given step.

To Reproduce
Steps to reproduce the behavior:

  1. Load the flr file (pasted below) in the ErgoAI UI, and issue the following commands in the interpreter (also commented out in the flr file.
  2. insert{do(3, move(f1,e1))}.
  3. legal(4, ?A).
  4. insert{do(4, move(b1,c4))}.
  5. legal(5, ?A).
  6. See error, amounting to a memory violation in XSB.

Expected behavior
A list of query results instead of a segfault.

Screenshots
N/A

Desktop (please complete the following information):

  • OS: Mac OS
  • Browser: N/A
  • Version 15.5

Additional context
ErgoAI release 3.0

Input file:

base_cell(?CurrentSituation,a1,red) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,b1,red) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,b2,red) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c1,green) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c2,green) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d1,green) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f1,blue) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g1,blue) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g2,blue) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c3,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,c4,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,c5,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,d2,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,d3,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,d4,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,d5,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,e1,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,e2,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,e3,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,e4,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,e5,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,f2,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,f3,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,f4,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,f5,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,g3,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,g4,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,g5,?R) :- step(?CurrentSituation,?CurrentSituation),role(?R).
base_cell(?CurrentSituation,c6,blue) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c7,blue) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d6,blue) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f6,green) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g6,green) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g7,green) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,h1,red) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,h2,red) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,i1,red) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,a1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,b1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,b2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c3,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c4,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c5,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c6,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,c7,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d3,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d4,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d5,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,d6,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,e1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,e2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,e3,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,e4,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,e5,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f3,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f4,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f5,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,f6,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g3,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g4,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g5,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g6,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,g7,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,h1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,h2,blank) :- step(?CurrentSituation,?CurrentSituation).
base_cell(?CurrentSituation,i1,blank) :- step(?CurrentSituation,?CurrentSituation).
base_control(?CurrentSituation,?Role) :- step(?CurrentSituation,?CurrentSituation),role(?Role).
base_step(?CurrentSituation,1) :- step(?CurrentSituation,?CurrentSituation),true().
base_step(?CurrentSituation,?N) :- step(?CurrentSituation,?CurrentSituation),succ(?_M,?N).
cell(1,a1,red).
cell(1,b1,red).
cell(1,b2,red).
cell(1,c1,blank).
cell(1,c2,blank).
cell(1,c3,blank).
cell(1,c4,blank).
cell(1,c5,blank).
cell(1,c6,blank).
cell(1,c7,blank).
cell(1,d1,blank).
cell(1,d2,blank).
cell(1,d3,blank).
cell(1,d4,blank).
cell(1,d5,blank).
cell(1,d6,blank).
cell(1,e1,blank).
cell(1,e2,blank).
cell(1,e3,blank).
cell(1,e4,blank).
cell(1,e5,blank).
cell(1,f1,blue).
cell(1,f2,blank).
cell(1,f3,blank).
cell(1,f4,blank).
cell(1,f5,blank).
cell(1,f6,green).
cell(1,g1,blue).
cell(1,g2,blue).
cell(1,g3,blank).
cell(1,g4,blank).
cell(1,g5,blank).
cell(1,g6,green).
cell(1,g7,green).
cell(1,h1,blank).
cell(1,h2,blank).
cell(1,i1,blank).
control(1,red).
step(1,1).
cell(?NextSituation,?B,blank) :- will_establish__cell(?CurrentSituation,?B,blank,move(?B,?_E)),succ(?CurrentSituation,?NextSituation).
will_establish__cell(?CurrentSituation,?B,blank,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,?_Player).
cell(?NextSituation,?E,?Player) :- will_establish__cell(?CurrentSituation,?E,?Player,move(?_B,?E)),succ(?CurrentSituation,?NextSituation).
will_establish__cell(?CurrentSituation,?E,?Player,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,?Player).
control(?NextSituation,green) :- will_establish__control(?CurrentSituation,green,move(?_B,?_E)),succ(?CurrentSituation,?NextSituation).
will_establish__control(?CurrentSituation,green,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,red).
control(?NextSituation,blue) :- will_establish__control(?CurrentSituation,blue,move(?_B,?_E)),succ(?CurrentSituation,?NextSituation).
will_establish__control(?CurrentSituation,blue,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,green).
control(?NextSituation,red) :- will_establish__control(?CurrentSituation,red,move(?_B,?_E)),succ(?CurrentSituation,?NextSituation).
will_establish__control(?CurrentSituation,red,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,blue).
step(?NextSituation,?Y) :- will_establish__step(?CurrentSituation,?Y,move(?_B,?_E)),succ(?CurrentSituation,?NextSituation).
will_establish__step(?CurrentSituation,?Y,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),step(?CurrentSituation,?X),succ(?X,?Y).
control(?NextSituation,green) :- will_establish__control(?CurrentSituation,green,noop),succ(?CurrentSituation,?NextSituation).
will_establish__control(?CurrentSituation,green,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),control(?CurrentSituation,red).
control(?NextSituation,blue) :- will_establish__control(?CurrentSituation,blue,noop),succ(?CurrentSituation,?NextSituation).
will_establish__control(?CurrentSituation,blue,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),control(?CurrentSituation,green).
control(?NextSituation,red) :- will_establish__control(?CurrentSituation,red,noop),succ(?CurrentSituation,?NextSituation).
will_establish__control(?CurrentSituation,red,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),control(?CurrentSituation,blue).
step(?NextSituation,?Y) :- will_establish__step(?CurrentSituation,?Y,noop),succ(?CurrentSituation,?NextSituation).
will_establish__step(?CurrentSituation,?Y,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),step(?CurrentSituation,?X),succ(?X,?Y).
will_clobber__cell(?CurrentSituation,?C_0,?C_1,move(?C_0,?E)) :- legal(?CurrentSituation,move(?C_0,?E)),do(?CurrentSituation,move(?C_0,?E)),control(?CurrentSituation,?C_1),base_control(?CurrentSituation,?C_1).
will_clobber__cell(?CurrentSituation,?C_0,?C_1,move(?B,?C_0)) :- legal(?CurrentSituation,move(?B,?C_0)),do(?CurrentSituation,move(?B,?C_0)),control(?CurrentSituation,?Player),blank = ?C_1,base_control(?CurrentSituation,?Player).
cell(?NextSituation,?C_0,?C_1) :- base_cell(?CurrentSituation,?C_0,?C_1),cell(?CurrentSituation,?C_0,?C_1),succ(?CurrentSituation,?NextSituation),do(?CurrentSituation,?_Something),\naf exists(?E)^will_clobber__cell(?CurrentSituation,?C_0,?C_1,move(?C_0,?E)),\naf exists(?B)^will_clobber__cell(?CurrentSituation,?C_0,?C_1,move(?B,?C_0)).
will_clobber__control(?CurrentSituation,?C_0,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,?C_0),red = ?C_0,base_control(?CurrentSituation,?C_0).
will_clobber__control(?CurrentSituation,?C_0,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,?C_0),green = ?C_0,base_control(?CurrentSituation,?C_0).
will_clobber__control(?CurrentSituation,?C_0,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),control(?CurrentSituation,?C_0),blue = ?C_0,base_control(?CurrentSituation,?C_0).
will_clobber__control(?CurrentSituation,?C_0,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),control(?CurrentSituation,?C_0),red = ?C_0,base_control(?CurrentSituation,?C_0).
will_clobber__control(?CurrentSituation,?C_0,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),control(?CurrentSituation,?C_0),green = ?C_0,base_control(?CurrentSituation,?C_0).
will_clobber__control(?CurrentSituation,?C_0,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),control(?CurrentSituation,?C_0),blue = ?C_0,base_control(?CurrentSituation,?C_0).
control(?NextSituation,?C_0) :- base_control(?CurrentSituation,?C_0),control(?CurrentSituation,?C_0),succ(?CurrentSituation,?NextSituation),do(?CurrentSituation,?_Something),\naf exists(?E)^ exists(?B)^will_clobber__control(?CurrentSituation,?C_0,move(?B,?E)),\naf exists(?E)^ exists(?B)^will_clobber__control(?CurrentSituation,?C_0,move(?B,?E)),\naf exists(?E)^ exists(?B)^will_clobber__control(?CurrentSituation,?C_0,move(?B,?E)),\naf will_clobber__control(?CurrentSituation,?C_0,noop),\naf will_clobber__control(?CurrentSituation,?C_0,noop),\naf will_clobber__control(?CurrentSituation,?C_0,noop).
will_clobber__step(?CurrentSituation,?C_0,move(?B,?E)) :- legal(?CurrentSituation,move(?B,?E)),do(?CurrentSituation,move(?B,?E)),step(?CurrentSituation,?C_0),succ(?C_0,?_Y),base_step(?CurrentSituation,?C_0).
will_clobber__step(?CurrentSituation,?C_0,noop) :- legal(?CurrentSituation,noop),do(?CurrentSituation,noop),step(?CurrentSituation,?C_0),succ(?C_0,?_Y),base_step(?CurrentSituation,?C_0).
step(?NextSituation,?C_0) :- base_step(?CurrentSituation,?C_0),step(?CurrentSituation,?C_0),succ(?CurrentSituation,?NextSituation),do(?CurrentSituation,?_Something),\naf exists(?E)^ exists(?B)^will_clobber__step(?CurrentSituation,?C_0,move(?B,?E)),\naf will_clobber__step(?CurrentSituation,?C_0,noop).
role(red).
role(green).
role(blue).
action(move(?B,?E)) :- car(?_R,?B,?E).
action(move(?B,?E)) :- cdr(?_R,?B,?E).
action(move(?B,?E)) :- car(?R,?B,?C),car(?R,?C,?E).
action(move(?B,?E)) :- cdr(?R,?B,?C),cdr(?R,?C,?E).
action(move(?B,?E)) :- car(?R,?B,?C),car(?R,?C,?X),car(?R,?X,?D),car(?R,?D,?E).
action(move(?B,?E)) :- car(?R,?B,?C),car(?R,?C,?X),cdr(?R,?X,?D),cdr(?R,?D,?E).
action(move(?B,?E)) :- cdr(?R,?B,?C),cdr(?R,?C,?X),car(?R,?X,?D),car(?R,?D,?E).
action(move(?B,?E)) :- cdr(?R,?B,?C),cdr(?R,?C,?X),cdr(?R,?X,?D),cdr(?R,?D,?E).
action(noop).
distinct(red,blank).
distinct(blue,blank).
distinct(yellow,blank).
legal(?CurrentSituation,move(?B,?E)) :- control(?CurrentSituation,?Player),movable(?CurrentSituation,?Player,?B,?E).
legal(?_CurrentSituation,noop).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),car(?Player,?B,?C),cell(?CurrentSituation,?C,?P1),distinct(?P1,blank),car(?Player,?C,?X),cell(?CurrentSituation,?X,blank),car(?Player,?X,?D),cell(?CurrentSituation,?D,?P2),distinct(?P2,blank),car(?Player,?D,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),car(?Player,?B,?C),cell(?CurrentSituation,?C,?P1),distinct(?P1,blank),car(?Player,?C,?X),cell(?CurrentSituation,?X,blank),cdr(?Player,?X,?D),cell(?CurrentSituation,?D,?P2),distinct(?P2,blank),cdr(?Player,?D,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),cdr(?Player,?B,?C),cell(?CurrentSituation,?C,?P1),distinct(?P1,blank),cdr(?Player,?C,?X),cell(?CurrentSituation,?X,blank),car(?Player,?X,?D),cell(?CurrentSituation,?D,?P2),distinct(?P2,blank),car(?Player,?D,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),cdr(?Player,?B,?C),cell(?CurrentSituation,?C,?P1),distinct(?P1,blank),cdr(?Player,?C,?X),cell(?CurrentSituation,?X,blank),cdr(?Player,?X,?D),cell(?CurrentSituation,?D,?P2),distinct(?P2,blank),cdr(?Player,?D,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),car(?Player,?B,?C),cell(?CurrentSituation,?C,?P),distinct(?P,blank),car(?Player,?C,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),cdr(?Player,?B,?C),cell(?CurrentSituation,?C,?P),distinct(?P,blank),cdr(?Player,?C,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),car(?Player,?B,?E),cell(?CurrentSituation,?E,blank).
movable(?CurrentSituation,?Player,?B,?E) :- cell(?CurrentSituation,?B,?Player),cdr(?Player,?B,?E),cell(?CurrentSituation,?E,blank).
goal(?CurrentSituation,red,?N) :- cell(?CurrentSituation,h1,?X),cell(?CurrentSituation,h2,?Y),cell(?CurrentSituation,i1,?Z),count(?X,?Y,?Z,red,?N).
goal(?CurrentSituation,green,?N) :- cell(?CurrentSituation,c1,?X),cell(?CurrentSituation,c2,?Y),cell(?CurrentSituation,d1,?Z),count(?X,?Y,?Z,green,?N).
goal(?CurrentSituation,blue,?N) :- cell(?CurrentSituation,c6,?X),cell(?CurrentSituation,c7,?Y),cell(?CurrentSituation,d6,?Z),count(?X,?Y,?Z,blue,?N).
terminal(?CurrentSituation) :- step(?CurrentSituation,61).
terminal(?CurrentSituation) :- control(?CurrentSituation,red),goal(?CurrentSituation,?_Player,100).
count(?R,?R,?R,?R,100) :- role(?R).
count(?R,?R,blank,?R,50) :- role(?R).
count(?R,blank,?R,?R,50) :- role(?R).
count(blank,?R,?R,?R,50) :- role(?R).
count(?R,blank,blank,?R,25) :- role(?R).
count(blank,?R,blank,?R,25) :- role(?R).
count(blank,blank,?R,?R,25) :- role(?R).
count(blank,blank,blank,?R,0) :- role(?R).
car(red,?B,?E) :- carred(?B,?E).
car(green,?B,?E) :- carmagenta(?E,?B).
car(blue,?B,?E) :- caryellow(?E,?B).
cdr(red,?B,?E) :- cdrred(?B,?E).
cdr(green,?B,?E) :- cdrmagenta(?E,?B).
cdr(blue,?B,?E) :- cdryellow(?E,?B).
succ(1,2).
succ(2,3).
succ(3,4).
succ(4,5).
succ(5,6).
succ(6,7).
succ(7,8).
succ(8,9).
succ(9,10).
succ(10,11).
succ(11,12).
succ(12,13).
succ(13,14).
succ(14,15).
succ(15,16).
succ(16,17).
succ(17,18).
succ(18,19).
succ(19,20).
succ(20,21).
succ(21,22).
succ(22,23).
succ(23,24).
succ(24,25).
succ(25,26).
succ(26,27).
succ(27,28).
succ(28,29).
succ(29,30).
succ(30,31).
succ(31,32).
succ(32,33).
succ(33,34).
succ(34,35).
succ(35,36).
succ(36,37).
succ(37,38).
succ(38,39).
succ(39,40).
succ(40,41).
succ(41,42).
succ(42,43).
succ(43,44).
succ(44,45).
succ(45,46).
succ(46,47).
succ(47,48).
succ(48,49).
succ(49,50).
succ(50,51).
succ(51,52).
succ(52,53).
succ(53,54).
succ(54,55).
succ(55,56).
succ(56,57).
succ(57,58).
succ(58,59).
succ(59,60).
succ(60,61).
carmagenta(c1,d1).
carmagenta(d1,e1).
carmagenta(c2,d2).
carmagenta(e1,f2).
carmagenta(d2,e2).
carmagenta(c3,d3).
carmagenta(f2,g3).
carmagenta(e2,f3).
carmagenta(d3,e3).
carmagenta(c4,d4).
carmagenta(f3,g4).
carmagenta(e3,f4).
carmagenta(d4,e4).
carmagenta(c5,d5).
carmagenta(f4,g5).
carmagenta(e4,f5).
carmagenta(d5,e5).
carmagenta(f5,g6).
carmagenta(e5,f6).
carmagenta(f6,g7).
cdrmagenta(c1,c2).
cdrmagenta(d1,d2).
cdrmagenta(c2,c3).
cdrmagenta(e1,e2).
cdrmagenta(d2,d3).
cdrmagenta(c3,c4).
cdrmagenta(f2,f3).
cdrmagenta(e2,e3).
cdrmagenta(d3,d4).
cdrmagenta(c4,c5).
cdrmagenta(g3,g4).
cdrmagenta(f3,f4).
cdrmagenta(e3,e4).
cdrmagenta(d4,d5).
cdrmagenta(g4,g5).
cdrmagenta(f4,f5).
cdrmagenta(e4,e5).
cdrmagenta(g5,g6).
cdrmagenta(f5,f6).
cdrmagenta(g6,g7).
carred(a1,b1).
carred(b1,c3).
carred(b2,c4).
carred(c3,d2).
carred(c4,d3).
carred(c5,d4).
carred(d2,e1).
carred(d3,e2).
carred(d4,e3).
carred(d5,e4).
carred(e2,f2).
carred(e3,f3).
carred(e4,f4).
carred(e5,f5).
carred(f3,g3).
carred(f4,g4).
carred(f5,g5).
carred(g4,h1).
carred(g5,h2).
carred(h2,i1).
cdrred(a1,b2).
cdrred(b1,c4).
cdrred(b2,c5).
cdrred(c3,d3).
cdrred(c4,d4).
cdrred(c5,d5).
cdrred(d2,e2).
cdrred(d3,e3).
cdrred(d4,e4).
cdrred(d5,e5).
cdrred(e1,f2).
cdrred(e2,f3).
cdrred(e3,f4).
cdrred(e4,f5).
cdrred(f2,g3).
cdrred(f3,g4).
cdrred(f4,g5).
cdrred(g3,h1).
cdrred(g4,h2).
cdrred(h1,i1).
caryellow(c7,c6).
caryellow(c6,c5).
caryellow(d6,d5).
caryellow(c5,c4).
caryellow(d5,d4).
caryellow(e5,e4).
caryellow(c4,c3).
caryellow(d4,d3).
caryellow(e4,e3).
caryellow(f5,f4).
caryellow(g5,g4).
caryellow(d3,d2).
caryellow(e3,e2).
caryellow(f4,f3).
caryellow(e2,e1).
caryellow(f3,f2).
caryellow(g4,g3).
caryellow(f2,f1).
caryellow(g3,g2).
caryellow(g2,g1).
cdryellow(c7,d6).
cdryellow(c6,d5).
cdryellow(d6,e5).
cdryellow(c5,d4).
cdryellow(d5,e4).
cdryellow(e5,f5).
cdryellow(c4,d3).
cdryellow(d4,e3).
cdryellow(e4,f4).
cdryellow(f5,g5).
cdryellow(c3,d2).
cdryellow(d3,e2).
cdryellow(e3,f3).
cdryellow(f4,g4).
cdryellow(d2,e1).
cdryellow(e2,f2).
cdryellow(f3,g3).
cdryellow(e1,f1).
cdryellow(f2,g2).
cdryellow(f1,g1).
coordinate(a1).
coordinate(b1).
coordinate(b2).
coordinate(c1).
coordinate(c2).
coordinate(c3).
coordinate(c4).
coordinate(c5).
coordinate(c7).
coordinate(c6).
coordinate(d1).
coordinate(d2).
coordinate(d3).
coordinate(d4).
coordinate(d5).
coordinate(d6).
coordinate(e1).
coordinate(e2).
coordinate(e3).
coordinate(e4).
coordinate(e5).
coordinate(f1).
coordinate(f2).
coordinate(f3).
coordinate(f4).
coordinate(f5).
coordinate(f6).
coordinate(g1).
coordinate(g2).
coordinate(g3).
coordinate(g4).
coordinate(g5).
coordinate(g6).
coordinate(g7).
coordinate(h1).
coordinate(h2).
coordinate(i1).

do(1, move(a1, c3)).
do(2, move(f6, e5)).

// insert{do(3, move(f1,e1))}.
// ?- legal(4, ?A).
// insert{do(4, move(b1,c4))}.
// ?- legal(5, ?A).

// do(5, move(e5,d5)).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions