:- load_files([ops,lists],
              [silent(true),if(not_loaded)]).

+(X,L0,L) :- @(X,Old,New,0,L0,L),New is Old+1.

@(Key,Old)   --> @(Key,Old,Old,Old).
@(Key,Old,New,_,      L0,[Key=New|L]) :- less1(Key=Old,L0,L),!.
@(Key,Old,New,Default,L0,L) :- @(Key,Old,New,Default,[Key=Default|L0],L).


in([H|T]) --> in(H), in(T).
in(X=Y ,L,L) :- in(X=Y,L).
in(X=Y   ,L) :- member(X=Y,L).
in(X of Y,L) :- member(Y=Temp,L),in(X,Temp).

