# Brick product (InstanceTopic, 3)

### From Higher Dimensions Database

The **brick product** is a very generalized operation, written as Q = P{A_{1}, A_{2}, ..., A_{n}}. P is called the *operator* and A_{i} are called the *operands*. Their values must satisfy the following constraints:

- P must be a brick.
- The dimensionality of P must equal
*n*.

The resultant shape Q will have the following properties:

- The dimensionality of Q will be the sum of the dimensionalities of A
_{i}. - Q will be a brick if and only if all A
_{i}are bricks. - Q will be convex if and only if both P and all A
_{i}are convex.

## Definition

Please note this definition should currently only be used for convex P. A good formal definition for non-convex P is in the works.

For each point **x** = (*x*_{1}, *x*_{2}, ..., *x*_{n}) in P, the brick symmetry guarantees that (-*x*_{1}, *x*_{2}, ..., *x*_{n}) is also in P. This means the line segment between these two points has length 2*x*_{1}. In fact, for any 1 ≤ *i* ≤ *n*, a line segment can be constructed between (*x*_{1}, ..., *x*_{i}, ..., *x*_{n}) and (*x*_{1}, ..., -*x*_{i}, ..., *x*_{n}) with both endpoints in P, by definition of brick symmetry of P, each with length 2*x*_{i}. Collect these lengths into an array *l*(**x**) = (*l*_{1}, *l*_{2}, ..., *l*_{n}) = (2*x*_{1}, 2*x*_{2}, ..., 2*x*_{n}).

Now, for each point **x**, we form the Cartesian product A_{1}|*l*_{1} × A_{2}|*l*_{2} × ... × A_{n}|*l*_{n}, where the notation A_{i}|*l*_{i} means the operand A_{i} scaled by the length *l*_{i}.

Then Q = P{A_{1}, A_{2}, ..., A_{n}} is the union over all **x** in P of the surfaces of the Cartesian products A_{1}|*l*_{1} × A_{2}|*l*_{2} × ... × A_{n}|*l*_{n}.

As a concise expression:

Q = ⋃{ S( ∏{ A_{i}|2x_{i}| 1 ≤i≤n} ) |x∈ P }

where ⋃ represents the union of all members of a set, ∏ represents the Cartesian product of all members of a set, and S(X) is a function mapping a max-frame shape X to its surface (preceding frame). That is to say, S(X) is the set of all points **x** in X such that every neighbourhood N(**x**) of **x** contains both points in X and points not in X:

S(X) = {x∈ X | ∀N(x) · ( ∃y∈ N(x) ·y∈ X ∧ ∃y∈ N(x) ·y∉ X ) }

where N(**x**) = {**y** | (|**y**-**x**|) < *k*} for some positive number *k*. Note that the neighbourhood is taken in the bounding space of X, so S(S(X)) = S(X) and S(Point) = ∅.

## Specializations

- When P is the point, the operation is trivial, takes no operands, and the result by the definition above is an empty set; some uses may prefer to define Point{} = Point.
- When P is the digon, the operation simply scales its operand by the digon's length. If the length of the digon is 1, the operation becomes the identity operation.
- When P is a hypercube of side length 1, the operation is the Cartesian product.
- When P is a cross polytope of diameter 1, the operation is the tegum product.
- When P is a hypersphere of diameter 1, the operation is the crind product.
- When all A
_{i}are equal, the operation produces a powertope (A_{i}^{P}, read "the P of A_{i}").- When each A
_{i}is also equal to P, the operation produces a*tetrate*(the P-al*n*-tetrate).

- When each A

## Trivia

- The brick product was conceived by Keiji while he was seeking such a generalized product operation. It was inspired by an email conversation between him and Jonathan Bowers about the latter's research into powertopes, and the name of
was taken from the term**brick**product, which Bowers described his powertope bases as requiring in said email convesation.**brick**symmetry - The formal definition for the brick product was worked out by quickfur using examples of its results provided by Keiji.