Confused about asserta/2 when clause uses predicates from multiple modules

assert/1 asserts the clause in the current module context. If you merely qualify the head the clause is added to the qualified module, but the body remains in the context of the context module. If you want to assert as if asserted from some module, use

 asserta(TargetModule:(Head :- Body)).
1 Like