is_winning_pos([x,x,x]).
is_winning_pos([x,x,b]).
is_winning_pos([x,b,x]).
is_winning_pos([b,x,x]).

transpose([[A,B,C],[D,E,F],[G,H,I]], [[A,D,G],[B,E,H],[C,F,I]]).

triple(L, T) :- member(T, L).
triple(L, T) :- transpose(L, LT), member(T, LT).
triple([[A,_,_],[_,B,_],[_,_,C]], [A,B,C]).
triple([[_,_,A],[_,B,_],[C,_,_]], [A,B,C]).

winner(L) :- L=[_,_,_], triple(L, T), is_winning_pos(T).
