# Associative operation

https://arbital.com/p/associative_operation

by Nate Soares May 9 2016 updated Jul 8 2016

An associative operation $\bullet : X \times X \to X$ is a binary operation such that for all $x, y, z$ in $X$, $x \bullet (y \bullet z) = (x \bullet y) \bullet z$. For example, $+$ is an associative function, because $(x + y) + z = x + (y + z)$ for all values of $x, y,$ and $z$. When an associative function is used to combine many elements in a row, parenthesis can be dropped, because the order of application is irrelevant.

Imagine that you're trying to use $f$ to combine 3 elements $x, y,$ and $z$ into one element, via two applications of $f$. $f$ is associative if $f(f(x, y), z) = f(x, f(y, z)),$ i.e., if the result is the same regardless of whether you apply $f$ to $x$ and $y$ first (and then apply that result to $z$), or whether you apply $f$ to $y$ and $z$ first (and then apply $x$ to that result).

Visualizing $f$ as a physical mechanism, there are two different ways to hook up two copies of $f$ together to create a function $f_3 : X \times X \times X \to X,$ which takes three inputs and produces one output:

An associative function $f$ is one where the result is the same no matter which way the functions are hooked up, which means that the result of using $f$ twice to turn three inputs into one output yields the same output regardless of the order in which we combine adjacent inputs.

By similar argument, an associative operator $f$ also gives rise (unambiguously) to functions $f_4, f_5, \ldots,$ meaning that associative functions can be seen as a family of functions on lists.

This justifies the omission of parenthesis when writing expressions where an associative operator $\bullet$ is applied to many inputs in turn, because the order of application does not matter. For example, multiplication is associative, so we can write expressions such as $2 \cdot 3 \cdot 4 \cdot 5$ without ambiguity. It makes no difference whether we compute the result by first multiplying 2 by 3, or 3 by 4, or 4 by 5.

By contrast, the function prependx that sticks its inputs together and puts an x on the front is not associative: prependx(prependx("a","b"),"c") = "xxabc", but prependx("a",prependx("b","c"))=xaxbc.

An associative function $f : X \\times X \\to X$ is a binary operation for all $x, y, z$ in $X$, $f(x, f(y, z)) \= f(f(x, y), z)$\. For example, $+$ is an associative function, because $(x + y) + z \= x + (y + z)$ for all values of $x, y,$ and $z$\.