This is a really cool project. Love it. Why not extend to union, difference, and xor? Is that exercise left to the reader or is it not tractable? ;)
I'm also curious if you've consider fuzz testing this system to verify the results.