There are 5 visibility declaration predicates:
local PredList declares the predicates in PredList (maybe not yet defined) as local in the caller module.
export PredList declares the predicates in PredList (maybe not yet defined) as exported in the caller module.
global PredList declares the predicates in PredList (maybe not yet defined) as global in the caller module.
import PredList from Module declares the predicates in PredList to be imported predicates in the caller module. Each of them are linked to their corresponding exported predicates (maybe not yet) defined in Module.
abolish PredList removes the declaration and the definition of the predicates in Predlist declared or defined in the caller module. As the visibility declaration predicates act on the caller module only, abolishing an imported predicate does not affect the exported predicate itself but only the import link.
The predicate visibility may be changed at any time.
With respect to requirement , some visibility changes are restricted: import links (created with import_from/2) must be cut down explicitly (with abolish/1) before defining a new visibility. Vice-versa a local, exported or global declaration or definition must be abolished before an import link is created with import_from/2.
Warnings are raised when redundant declarations occur (e.g. declaring twice the same predicate as local).