Reed–Muller codes are listed as RM(r, m), where r is the order of the code, 0 ≤ r ≤ m, and m determines the block length N = 2m. RM codes are related to binary functions on the field GF(2m) over the elements {0, 1}.

referred to as the wedge product (this wedge product is not to be confused with the wedge product defined in exterior algebra). Here, w=(w1,w2,…,wN){\displaystyle w=(w_{1},w_{2},\ldots ,w_{N})} and z=(z1,z2,…,zN){\displaystyle z=(z_{1},z_{2},\ldots ,z_{N})} are points in F2N{\displaystyle \mathbb {F} _{2}^{N}} (N-dimensional binary vectors), and the operation ⋅{\displaystyle \cdot } is the usual multiplication in the field F2{\displaystyle \mathbb {F} _{2}}.

F2m{\displaystyle \mathbb {F} _{2}^{m}} is an m-dimensional vector space over the field F2{\displaystyle \mathbb {F} _{2}}, so it is possible to write

The Reed–Muller RM(r, m) code of order r and length N = 2m is the code generated by v0 and the wedge products of up to r of the vi, 1 ≤ i ≤ m (where by convention a wedge product of fewer than one vector is the identity for the operation). In other words, we can build a generator matrix for the RM(r,m) code, using vectors and their wedge product permutations up to r at a time v0,v1,…,vn,…,(vi1∧vi2),…(vi1∧vi2…∧vir){\displaystyle {v_{0},v_{1},\ldots ,v_{n},\ldots ,(v_{i_{1}}\wedge v_{i_{2}}),\ldots (v_{i_{1}}\wedge v_{i_{2}}\ldots \wedge v_{i_{r}})}}, as the rows of the generator matrix, where 1 ≤ ik ≤ m.

such vectors and F2N{\displaystyle \mathbb {F} _{2}^{N}} have dimension N so it is sufficient to check that the N vectors span; equivalently it is sufficient to check that RM(m, m) = F2N{\displaystyle \mathbb {F} _{2}^{N}}.

Let x be a binary vector of length m, an element of X. Let (x)i denote the ith element of x. Define

yi={vi if (x)i=0v0+vi if (x)i=1{\displaystyle y_{i}={\begin{cases}v_{i}&{\text{ if }}(x)_{i}=0\\v_{0}+v_{i}&{\text{ if }}(x)_{i}=1\\\end{cases}}}

A Reed–Muller code RM(r,m) exists for any integers m≥0{\displaystyle m\geq 0} and 0≤r≤m{\displaystyle 0\leq r\leq m}. RM(m, m) is defined as the universe (2m,2m,1{\displaystyle 2^{m},2^{m},1}) code. RM(−1,m) is defined as the trivial code (2m,0,∞{\displaystyle 2^{m},0,\infty }). The remaining RM codes may be constructed from these elementary codes using the length-doubling construction

From this construction, RM(r,m) is a binary linear block code (n, k, d) with length n = 2m, dimension k(r,m)=k(r,m−1)+k(r−1,m−1){\displaystyle k(r,m)=k(r,m-1)+k(r-1,m-1)} and minimum distance d=2m−r{\displaystyle d=2^{m-r}} for r≥0{\displaystyle r\geq 0}. The dual code to RM(r,m) is RM(m-r-1,m). This shows that repetition and SPC codes are duals, biorthogonal and extended Hamming codes are duals and that codes with k = n/2 are self-dual.

Let F{\displaystyle \mathbb {F} } be a finite field and let m{\displaystyle m} and d{\displaystyle d} be positive integers, where m{\displaystyle m} should be thought of as larger than d{\displaystyle d}. We are going to encode messages consisting of (m+dm){\displaystyle {m+d \choose m}} elements of F{\displaystyle \mathbb {F} } as codewords of length |F|m{\displaystyle |\mathbb {F} |^{m}} as follows: We interpret the message as an m{\displaystyle m}-variate polynomial f{\displaystyle f} of degree at most d{\displaystyle d} with coefficient from F{\displaystyle \mathbb {F} }. Such a polynomial has (m+dm){\displaystyle {m+d \choose m}} coefficients. The Reed–Muller encoding of f{\displaystyle f} is the list of the evaluations of f{\displaystyle f} on all x∈Fm{\displaystyle x\in \mathbb {F} ^{m}}; the codeword at the position indexed by x∈Fm{\displaystyle x\in \mathbb {F} ^{m}} has value f(x){\displaystyle f(x)}.

RM(r, m) codes can be decoded using majority logic decoding. The basic idea of majority logic decoding is to build several checksums for each received code word element. Since each of the different checksums must all have the same value (i.e. the value of the message word element weight), we can use a majority logic decoding to decipher the value of the message word element. Once each order of the polynomial is decoded, the received word is modified accordingly by removing the corresponding codewords weighted by the decoded message contributions, up to the present stage. So for a rth order RM code, we have to decode iteratively r+1, times before we arrive at the final received code-word. Also, the values of the message bits are calculated through this scheme; finally we can calculate the codeword by multiplying the message word (just decoded) with the generator matrix.

One clue if the decoding succeeded, is to have an all-zero modified received word, at the end of (r + 1)-stage decoding through the majority logic decoding. This technique was proposed by Irving S. Reed, and is more general when applied to other finite geometry codes.