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).