# Inferring simplest method to convert bit array 1 to bit array 2

Consider the set of all bit arrays of length n. Now consider the set of all 1-to-1 functions that map from this set to this set.

Now select a single function out of the latter set. Is there any algorithm to find a "minimal" method of implementing this function? Assume that we only have access to fundamental bit array operators such as AND OR XOR NOT and left and right bitshifts.

In case you're wondering, the reason I want this is because I'm writing an algorithm to convert from z-curve ordering of bits to hilbert-curve ordering of bits. My current method is to make a lookup table, but I bet there's a better option.

As a simple example, let's say I have a truth table that looks like this:

00 -> 10
01 -> 01
10 -> 00
11 -> 11


Then I should be able to infer that, given an input bit string input, the output bit string output is (in java syntax)

output = ((~input) << 1) ^ input


Here's the proof in this case:

00 -> 11 -> 10 -> 10
01 -> 10 -> 00 -> 01
10 -> 01 -> 10 -> 00
11 -> 00 -> 00 -> 11


Instead of considering $f \colon \{0,1\}^n \to \{0,1\}^n$, one can look at the Boolean function $f' \colon \{0,1\}^{2n} \to \{0,1\}$ defined by $f'(xy) = 1$ iff $f(x) = y$.
If MCSP were in P, then one could factor in average time $2^{n^\epsilon}$ time (for any $\epsilon > 0$) numbers that are products of two primes, each of which is congruent to 3 modulo 4. These numbers are quite hard to factor in practice, so this would be quite surprising.
On the other hand, if the MCSP is NP-complete, then this would imply strong circuit lower bounds for the class E = DTIME($2^{O(n)}$), which we don't currently know how to do.