make_ground(Term) :-
   make_ground(Term,0, _).

make_ground(Term, M, N) :- var(Term), !,
   Term = 'A-Var'(M), N is M + 1.
make_ground(Term, M, M) :- atomic(Term), !.
make_ground('A-Var'(_), M, M) :- !.
make_ground(Term, M, N) :-
   Term =.. [_Functor|Args],
   make_ground_list(Args, M, N).

make_ground_list([], M, M).
make_ground_list([Term|Terms], M, N) :-
   make_ground(Term, M, K),
   make_ground_list(Terms, K, N).
