Hashing is a way to turn data into a single integer value in a way that seems hard to predict. Hashing is used in hash-tables to obtain expected constant-time operations when assuming that the hash-function maps the distribution of the input-keys to a uniform distribution. While this may not be true in general, in practice hashing often works very well. In this section we provide a way to combine hash- values together to form a new hash-value. This allows to find a hash for an arbitrary complicated object, as long as every part is recursively hashable.