Classification of Boolean functions under the affine group

This page reports the numerical experiments related to the classification of the Boolean Functions in less than 7 variables that I computed in November in 2009.


Let m be a positive integer. The space of Boolean functions from GF(2)^m into GF(2) is denoted by RM(k,m). This notation comes from coding theory, it is the Reed-Muller code of order k in m variables. The affine group AG(2, m) acts over the spaces RM(k,m), and thus on RM(k,m)/RM(s,m) when s<=k. Two Boolean functions f and g are said to be equivalent modulo RM(k, m) if there exists an affine transformation A in AG(2,m) such that

g = f o A modulo RM(k,m)

Affine group

The affine group has order :

#AG(2, m) = 2^m (2^m-1)(2^m-2)...(2^m-2^(m-1) )

it can be generated by three transformations : the shift S, a transvection T and a nontrivial translation U. The affine group acts over RM(k,m) and also over RM(k,m)/RM(s,m). A formula for the rank n(m,s,k) of the action of AG(2,m) over RM(k,m)/RM(s,m) ( s<=k ) was determined by Xiang-Dong Hou,

AGL(m, 2) Acting on R(r, m)/R(s, m), journal of algebra 171/3 (1995)
It satisfies :
n(m, s, t ) = n(m, m-t, m - s)


The main objective of this numerical experiment was to rebuild the data of the n(6,1,6) = 150357 classes of Boolean functions obtained in a nice way by James Maiorana. See,

A classification of the cosets of the Reed-Muller code R(1,6) Math. Comp. 57 (1991).
Indeed, in his paper Maiorana gives global information on the data but not the details that are somewhere on some microfilms... For people who like cardinality group : There exists recent papers with similar classification. For example, An Braeken, Yuri L. Borissov, Svetla Nikova, Bart Preneel: Classification of Boolean Functions of 6 Variables or Less with Respect to Some Cryptographic Properties. The very simple (almost naive) method that I used to obtain the classifications below work very well for all the cases, and could be used for classification in seven variables but it was not my goal.


Starting from the trivial classification RM(m,m) / RM(m-1,m) :
   h = 0
        G = S, T, U
        fix= #GA(m) 
   h=x_1 x_2 ... x_m
        S, T, U
        fix= #GA(m) 

We proceed by descent to obtain the classification modulo RM(m-2,m), modulo RM(m-3,m),... From a class h modulo RM(k,m), we construct the class modulo RM(k-1,m), using the action of fix(h) over RM(k-1,m). Note that if h is is fixed by A, the action of A on h+f, where f lies in RM(k-1,m), is given by the relation :

(h+f)^A = h + h^A + f^A

That is the usual action of A on f, plus a boundary term h+h^A. We use a naive algorithm to calculate the orbits of RM(k-1,m) under the action f -> h + h^A + f^A modulo RM(k-2,m). If the orbit size of f is N, then the fixator of h+f has order #fix(h)/N and we can use Schreier-Sims method to compute the fixator of h+f. In particular, for the classification of RM(6,6), we only need to work with binomial(6,3) = 20 bits vectors.

Files of representatives

For each n, the file class-k-m.txt contains a set of representatives modulo RM(k,m). The datas are presented as follow :
  h = Boolean functions.
      List of the Generators of the fixator group of h
fix = order of the fixator group. 
Philippe Langevin, Last modification October 31th 2009.