Sameness

Sameness is an equivalence relation such that any two references which “are the same” are not distinguishable by any unprivileged client. The Equalizer object provides the sameness predicate to E programs.

For purposes of sameness, all references are either selfish, selfless, or unresolved.

Selfish
Selfish objects have specific identities defined by the event of their creation. In most implementations this is "pointer equality".

Selfless
Selfless objects have identities defined by their “components”; a selfless object is the same as any other object made of the same components. See Selfless for more details on this.

Unresolved
Unresolved references (promises) are the same as any promise which will necessarily have the same resolution, i.e. a promise is the same as itself, another promise that is resolved to it, and the promise which it is resolved to, and so on transitively.

A promise is not different from any other reference; such sameness is not yet defined.

The tools to work with this are Equalizer and TraversalKey.