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) :- color_ok(Ca, Cb, Cc), num_ok(Ca, Cb, Cc), shade_ok(Ca, Cb, Cc), shape_ok(Ca, Cb, Cc).