I have encountered it while doing some work with ciao and the solution I used was to simply declare all operators (which was actually only one) in every module. I'm actually quite curious if there is any smarter way to do it.
See my previous message: one smart way to do it is to put all the operators (and all other syntactic stuff like expansions, new declarations, etc.) in a separate file and ':- include' it in all files where you need that fucntionality (and in the top level).
See the description of the concept of 'packages' in the manual (:- use_package) and, specially in the following document, which explains the philosophy behind the whole thing:
@InProceedings{ciao-modules-cl2000, author = {D.~Cabeza and M.~Hermenegildo}, title = {{A} {N}ew {M}odule {S}ystem for {P}rolog}, booktitle = {International Conference on Computational Logic, CL2000}, publisher = {Springer-Verlag}, series = {LNAI}, number = {1861}, publisher_location ={Heidelberg, Germany}, year = 2000, month = {July}, pages= {131--148}, butype = {Inproceedings}, butopics = {lang,impl,anal,spec}, projects = {EDIPIA,ECCOSIC}, paper_presentation_city ={London}, paper_presentation_country ={U.K.} }
You can get an online copy of (a TR with the same contents as this) from:
http://clip.dia.fi.upm.es/clippubsbytopic/clippubsbytopic.html
in "Publications in Programming Language Design"
MH