(0) Obligation:

Clauses:

select(X, Y, Zs) :- ','(no(empty(Y)), ','(head(Y, X), tail(Y, Zs))).
select(X, Y, Z) :- ','(no(empty(Y)), ','(head(Y, H), ','(head(Z, H), ','(tail(Y, T), ','(tail(Z, Zs), select(X, T, Zs)))))).
head([], X1).
head(.(H, X2), H).
tail([], []).
tail(.(X3, T), T).
empty([]).
no(X) :- ','(X, ','(!, failure(a))).
no(X4).
failure(b).

Queries:

select(g,g,a).

(1) CutEliminatorProof (SOUND transformation)

Eliminated all cuts by simply ignoring them[PROLOG].

(2) Obligation:

Clauses:

select(X, Y, Zs) :- ','(no(empty(Y)), ','(head(Y, X), tail(Y, Zs))).
select(X, Y, Z) :- ','(no(empty(Y)), ','(head(Y, H), ','(head(Z, H), ','(tail(Y, T), ','(tail(Z, Zs), select(X, T, Zs)))))).
head([], X1).
head(.(H, X2), H).
tail([], []).
tail(.(X3, T), T).
empty([]).
no(X) :- ','(X, failure(a)).
no(X4).
failure(b).

Queries:

select(g,g,a).