Until now we discussed the public module interface that is, at least to some extent, portable between Prolog implementation with a module system that is derived from Quintus Prolog. The remainder of this chapter describes the underlying mechanisms that can be used to emulate other module systems or implement other code-reuse mechanisms.
In addition to built-in predicates, imported predicates and locally 
defined predicates, SWI-Prolog modules can also call predicates from its
import modules. Each module has a (possibly empty) list of 
import modules. In the default setup, each new module has a single 
import module, which is user for all normal user modules 
and
system for all system library modules. Module user 
imports from system where all built-in predicates reside. 
These special modules are described in more detail in section 
5.10.
The list of import modules can be manipulated and queried using the following predicates:
user or system.user, which imports 
from
system. The predicates add_import_module/3 
and
delete_import_module/2 
can be used to manipulate the import list.start or end 
depending on
StartOrEnd. See also import_module/2 
and delete_import_module/2.One usage scenario of import modules is to define a module that is a copy of another, but where one or more predicates have an alternative definition.