add_timer_body(A,B) :- var(A),!, A=B.
add_timer_body((A , B),(A2 , B2)) :- !, add_timer_body(A,A2), add_timer_body(B,B2).
add_timer_body((A ; B),(A2 ; B2)) :- !, add_timer_body(A,A2), add_timer_body(B,B2).
add_timer_body((A -> B),(A2 -> B2)) :- !, add_timer_body(A,A2), add_timer_body(B,B2).
add_timer_body(\+(A),\+(A2)) :- !, add_timer_body(A,A2).
add_timer_body(when(G,A),when(G,A2)) :- !, add_timer_body(A,A2).
add_timer_body(A,timer:timer_det_call(F,A2)) :-
is_assert(A,T,MT,A2),
nonvar(T),
my_functor(T,F,N), !,
get_prolog_module(Module),
add_module(T,Module,MT),
print(assert(F,N,Module,A,A2)),nl.
add_timer_body(A,timer:timer_call(F,A2)) :-
is_retract(A,T,MT,A2),
nonvar(T),
my_functor(T,F,N), !,
get_prolog_module(Module),
add_module(T,Module,MT),
print(retract(F,N,Module,A,A2)),nl.
add_timer_body(B,B).