defined_elsewhere( Head ) :-
	defined_elsewhere( Head, _Mod ).

defined_elsewhere( Head, Mod ) :-
	% slp:predicate_property( Head, Property ),
	current_module( Amod ),
	predicate_property( Amod:Head, Property ),
	% write( user_error, prop(Property) ), nl( user_error ),
	( Property == built_in ->
		Mod = user
		;
		Property = imported_from(Mod),
		predicate_property( Amod:Head, number_of_clauses(N) ),
		N > 0
	), 
	!.
	% write( user_error, from(Mod)-hd(Head)-n(N) ), nl( user_error ).

defined_elsewhere( Head, Mod ) :-
	functor( Head, Name, Arity ),
	current_predicate( Name/Arity ),
	Mod = user.