% Ukázka řezu
plati(a).
plati(b) :- !.
plati(c).


% Robinsonova Aritmetika
geq(_, 0).
geq(s(X), s(Y)) :- geq(X, Y).

lt(X, Y) :- geq(Y, s(X)).


% max_nocut(+X, +Y, -M) :- M = max(X, Y).
max_nocut(X, Y, X) :- geq(X, Y).
max_nocut(X, Y, Y) :- lt(X, Y).

% max(+X, +Y, -M) :- M = max(X, Y).
max(X, Y, X) :- geq(X, Y), !.
max(X, Y, Y) :- lt(X, Y).

% max2(+X, +Y, -M) :- M = max(X, Y).
max2(X, Y, Z) :- geq(X, Y), !, Z = X.
max2(_, Y, Y).


negace(Predikat) :- Predikat, !, fail.
negace(_).


%% Všemožné mazací predikáty
smaz(P, [P|L], L).
smaz(P, [X|L], [X|NL]) :- smaz(P, L, NL).

smazMozna(_, [], []).
smazMozna(P, [P|L], L).
smazMozna(P, [X|L], [X|NL]) :- smazMozna(P, L, NL).

smazPrvni(P, [P|L], L) :- !.
smazPrvni(P, [X|L], [X|NL]) :- smazPrvni(P, L, NL).

smazPrvni2(P, [P|L], L).
smazPrvni2(P, [X|L], [X|NL]) :- P \= X, smazPrvni2(P, L, NL).
