Abstract rewriting