You can use the following, extracted from the user manual:
current_predicate(Pred) succeeds if there
exists a predicate indicator of a defined procedure that unifies
with Pred. All user defined procedures are found, whether static
or dynamic. Internal system procedures whose name begins with ’$’
are not found. A user-defined procedure is found even when it has
no clauses. A user-defined procedure is not found if it has been
abolished. To conform to the ISO reference, built-in predicates
are not found except if the strict_iso Prolog flag is switched
off (section 8.22.1). This predicate is
re-executable on backtracking.
Then, using more meta-pretapredicates (univ and higher-order call):
| ?- current_predicate(N/2), G=..[N,baba,wo], G.
G = father(baba,wo)
N = father ? ;
(31 ms) no