Copy all clauses of predicate From to To. The 
predicate
To must be dynamic or undefined. If To is 
undefined, it is created as a dynamic predicate holding a copy of the 
clauses of
From. If To is a dynamic predicate, the clauses of
From are added (as in assertz/1) 
to the clauses of To.
To and From must have the same arity. Acts as if 
defined by the program below, but at a much better performance by 
avoiding decompilation and compilation.
copy_predicate_clauses(From, To) :-
        head(From, MF:FromHead),
        head(To, MT:ToHead),
        FromHead =.. [_|Args],
        ToHead =.. [_|Args],
        forall(clause(MF:FromHead, Body),
               assertz(MT:ToHead, Body)).
head(From, M:Head) :-
        strip_module(From, M, Name/Arity),
        functor(Head, Name, Arity).