Addressing the *Boolean* part.

Usually, fast matrix multiplication relies heavily on the element type being a ring; in particular, that every element has an additive inverse. For example, Strassen's algorithm contains subtractions. This works fine, for example, with reals, integers, rationals, and finite fields. In particular, you could easily do fast matrix multiplication on $\mathbb{F}_2$, that is, elements are bits with addition defined modulo two (so $1+1=0$).

However, in Boolean matrix multiplication the addition of elements is the Boolean disjunction: $1+1=1$ instead of zero. This innocent change means that subtraction no longer works: from $x+1=1$ you cannot know whether $x=0$ or $x=1$. Thus Strassen's algorithm, *unmodified*, does not work with Booleans.

Yes, this is a slight "impracticality", but it is well known that this can be circumvented relatively easily, by embedding the Booleans into a suitable ring. You can use $b$-bit integers modulo $2^b$, with $b$ chosen large enough so that overflows (wraparounds) will not happen in the fast matrix multiplication. Generally $b$ will be something like a logarithm of the matrix size.

In fact there have been implementations of Strassen-like algorithms for Booleans. One example is Karppa & Kaski (2019), *Engineering Boolean Matrix Multiplication for Multiple-Accelerator Shared-Memory Architectures* (arxiv).

How fast can wereallymultiply matrices?$\endgroup$