The standard crossover and mutation operators on binary strings are invariant under certain syntactic changes in representation: for example, exchanging ones and zeros. I want to think about what this kind of invariance means for general search spaces, and characterise it using the idea of a group action. I then ask: how might we go about designing crossover and mutation operators for a search space that are guaranteed to be invariant under some choices of representation? A characterisation can be given in general terms, allowing the evolution equations for the infinite population model to be written in a canonical way for any (finite) search space, and providing an implementation method for such operators. However, a large open question remains: given a search space and an optimisation problem on it, what further properties do we want our genetic operators to have?