I notice you mention my old counterpoint solver in your essay. Several times since then I've started on a new version, aimed at Bach, not Fux, but I get side-tracked. One thing I know I'd change -- any search would use the genetic algorithm, not brute force!