When a concurrent program is incompatible with another program, the two programs cannot access or update the same data simultaneously.
When we define a concurrent program, we can list those programs we want it to be incompatible with. We can also list the program as incompatible with itself, which means that two instances of the program cannot run simultaneously.
We can also make a program incompatible with all other concurrent programs by defining the program to be run-alone.
There are two types of program incompatibilities, "Global" incompatibilities, and "Domain-specific" incompatibilities.
We can define a concurrent program to be globally incompatible with another program -- that is, the two programs cannot be run simultaneously at all; or we can define a concurrent program to be incompatible with another program in a Conflict Domain. Conflict domains are abstract representations of groups of data. They can correspond to
other group identifiers, such as sets of books, or they can be arbitrary.