I think this class has some overlap with SymbolicRewriter. Would is be possible to have an abstract class Rewriter with the common functionality. The part regarding rule selection, strategies, and search should be similar (at least for now).