farbe(blau).
farbe(rot).
farbe(gruen).
farbe(gelb).

nachbar(X,Y) :- farbe(X), farbe(Y), X \= Y.

deutschland(SH,MV,HH,HB,NI,ST,BE,BB,SN,NW,HE,TH,RP,SL,BW,BY) :-
  nachbar(SH,NI), nachbar(SH,HH), nachbar(SH,MV),
  nachbar(HH,NI),
  nachbar(MV,NI), nachbar(MV,BB),
  nachbar(NI,HB), nachbar(NI,BB), nachbar(NI,ST), nachbar(NI,TH), nachbar(NI,HE), nachbar(NI,NW),
  nachbar(ST,BB), nachbar(ST,SN), nachbar(ST,TH),
  nachbar(BB,BE), nachbar(BB,SN),
  nachbar(NW,HE), nachbar(NW,RP),
  nachbar(SN,TH), nachbar(SN,BY),
  nachbar(RP,SL), nachbar(RP,HE), nachbar(RP,BW),
  nachbar(HE,BW), nachbar(HE,TH), nachbar(HE,BY),
  nachbar(TH,BY),
  nachbar(BW,BY).
%even(0).
%even(X) :- X > 0, X1 is X - 1, odd(X1).
%
%odd(1).
%odd(X) :- X > 1, X1 is X - 1, even(X1).

even(0).
even(X) :- odd(Y), X is Y + 1, X > 0.

odd(1).
odd(X)  :- even(Y), X is Y + 1, X > 1.
% Mann, Ziege, Wolf, Kohl
%erlaubt((links,links,links,links)).
%erlaubt((links,links,links,rechts)).
%erlaubt((links,links,rechts,rechts)).
%erlaubt((links,links,rechts,rechts)).

%erlaubt((Mann,Ziege,Wolf,Kohl)) :- Mann = Ziege, Mann = Wolf.
%erlaubt((Mann,Ziege,Wolf,Kohl)) :- Mann = Ziege, Mann = Kohl.
%erlaubt((Mann,Ziege,Wolf,Kohl)) :- Mann = Ziege, Wolf = Kohl.

erlaubt((Mann,Ziege,Wolf,Kohl)) :-
  ufer(Mann), ufer(Ziege), ufer(Kohl), ufer(Wolf),
  not(nichterlaubt((Mann,Ziege,Wolf,Kohl))).

ufer(links).
ufer(rechts).

nichterlaubt((Mann,Ziege,Wolf,_)) :- Ziege = Wolf, Ziege \= Mann.
nichterlaubt((Mann,Ziege,_,Kohl)) :- Ziege = Kohl, Ziege \= Mann.

gegenueber(links,rechts).
gegenueber(rechts,links).

harmlos(_,X,Y) :- gegenueber(X,Y).
harmlos(X,X,X).

%erlaubt((Mann,Ziege,Wolf,Kohl)) :- harmlos(Mann,Ziege,Wolf), harmlos(Mann,Ziege,Kohl).

fahrt((U,U,Wolf,Kohl), 'Ziege', (UNeu,UNeu,Wolf,Kohl)) :-
  gegenueber(U,UNeu).
fahrt((U,Ziege,U,Kohl), 'Wolf', (UNeu,Ziege,UNeu,Kohl)) :-
  gegenueber(U,UNeu).
fahrt((U,Ziege,Wolf,U), 'Kohl', (UNeu,Ziege,Wolf,UNeu)) :-
  gegenueber(U,UNeu).
fahrt((U,Ziege,Wolf,Kohl), 'leer', (UNeu,Ziege,Wolf,Kohl)) :-
  gegenueber(U,UNeu).
