It'd be cool if the test at the end was guaranteed to have coverage of each of the subrules in a combination. I got the rule:
(starts with 'l') or (not (contains 'as'))
The "starts with 'l'" case was never tested for. You could test each of the subrules (at least in the case of disjunction) by having a test word that passes and fails each. Little more complicated for other kinds of combiner.
LW has often discussed the inductive logic game Zendo, as a possible way of training rationality. But I couldn't find any computer implementations of Zendo online.
So I built two (fairly similar) games inspired by Zendo; they generate rules and play as sensei. The code is on GitHub, along with some more explanation. To run the games you'll need to install Python 3, and Scikit-Learn for the second game; see the readme.
All bugfixes and improvements are welcome. For instance, more rule classes or features would improve the game and be pretty easy to code. Also, if anyone has a website and wants to host this playable online (with CGI, say), that would be awesome.