rendered paste body
color(card(Color, _Num, _Shade, _Shape), Color).
num(card(_Color, Num, _Shade, _Shape), Num).
shade(card(_Color, _Num, Shade, _Shape), Shade).
shape(card(_Color, _Num, _Shade, Shape), Shape).
color_same(C1, C2, C3) :- color(C1, C), color(C2, C), color(C3, C).
num_same(C1, C2, C3) :- num(C1, N), num(C2, N), num(C3, N).
shade_same(C1, C2, C3) :- shade(C1, N), shade(C2, N), shade(C3, N).
shape_same(C1, C2, C3) :- shape(C1, N), shape(C2, N), shape(C3, N).
color_ok(C1, C2, C3) :- color_same(C1, C2, C3).
num_ok(C1, C2, C3) :- num_same(C1, C2, C3).
shade_ok(C1, C2, C3) :- shade_same(C1, C2, C3).
shape_ok(C1, C2, C3) :- shape_same(C1, C2, C3).
set(Ca, Cb, Cc) :-
Ca = card(_, _, _, _),
Cb = card(_, _, _, _),
Cc = card(_, _, _, _),
color_ok(Ca, Cb, Cc), num_ok(Ca, Cb, Cc), shade_ok(Ca, Cb, Cc), shape_ok(Ca, Cb, Cc).
card(red, 1, solid, oval).
card(red, 1, solid, diamond).
card(red, 1, solid, squigle).
card(red, 1, hatched, oval).
card(red, 1, hatched, diamond).
card(red, 1, hatched, squigle).
card(red, 1, empty, oval).
card(red, 1, empty, diamond).
card(red, 1, empty, squigle).
card(red, 2, solid, oval).
card(red, 2, solid, diamond).
card(red, 2, solid, squigle).
card(red, 2, hatched, oval).
card(red, 2, hatched, diamond).
card(red, 2, hatched, squigle).
card(red, 2, empty, oval).
card(red, 2, empty, diamond).
card(red, 2, empty, squigle).
card(red, 3, solid, oval).
card(red, 3, solid, diamond).
card(red, 3, solid, squigle).
card(red, 3, hatched, oval).
card(red, 3, hatched, diamond).
card(red, 3, hatched, squigle).
card(red, 3, empty, oval).
card(red, 3, empty, diamond).
card(red, 3, empty, squigle).
card(green, 1, solid, oval).
card(green, 1, solid, diamond).
card(green, 1, solid, squigle).
card(green, 1, hatched, oval).
card(green, 1, hatched, diamond).
card(green, 1, hatched, squigle).
card(green, 1, empty, oval).
card(green, 1, empty, diamond).
card(green, 1, empty, squigle).
card(green, 2, solid, oval).
card(green, 2, solid, diamond).
card(green, 2, solid, squigle).
card(green, 2, hatched, oval).
card(green, 2, hatched, diamond).
card(green, 2, hatched, squigle).
card(green, 2, empty, oval).
card(green, 2, empty, diamond).
card(green, 2, empty, squigle).
card(green, 3, solid, oval).
card(green, 3, solid, diamond).
card(green, 3, solid, squigle).
card(green, 3, hatched, oval).
card(green, 3, hatched, diamond).
card(green, 3, hatched, squigle).
card(green, 3, empty, oval).
card(green, 3, empty, diamond).
card(green, 3, empty, squigle).
card(purple, 1, solid, oval).
card(purple, 1, solid, diamond).
card(purple, 1, solid, squigle).
card(purple, 1, hatched, oval).
card(purple, 1, hatched, diamond).
card(purple, 1, hatched, squigle).
card(purple, 1, empty, oval).
card(purple, 1, empty, diamond).
card(purple, 1, empty, squigle).
card(purple, 2, solid, oval).
card(purple, 2, solid, diamond).
card(purple, 2, solid, squigle).
card(purple, 2, hatched, oval).
card(purple, 2, hatched, diamond).
card(purple, 2, hatched, squigle).
card(purple, 2, empty, oval).
card(purple, 2, empty, diamond).
card(purple, 2, empty, squigle).
card(purple, 3, solid, oval).
card(purple, 3, solid, diamond).
card(purple, 3, solid, squigle).
card(purple, 3, hatched, oval).
card(purple, 3, hatched, diamond).
card(purple, 3, hatched, squigle).
card(purple, 3, empty, oval).
card(purple, 3, empty, diamond).
card(purple, 3, empty, squigle).