You can use the following, extracted from the user manual:
==========================
Templates
-
- current_predicate(?predicate_indicator)
Description
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