satisfy them booleans, solve them integers. `cnf.py` is a small library for creating formulas in conjunctive normal form, and also for dealing with the eponymous CNF file format. the types used internally and exposed externally are very simple: booleans, integers, and lists of each. `z0.py` is a slightly larger library that builds upon `cnf.py`, mimicing a tiny subset of the [z3](https://github.com/Z3Prover/z3) library's interface. it exposes classes for high-level bitvectors and [unary-encoded integers.](https://en.wikipedia.org/wiki/Unary_numeral_system) (unary is sometimes more efficient to solve) `sugarcane4unary2.py` utilizes z0 to solve a (pretty arbitrary) problem relating to farming sugarcane in Minecraft. you will need to set the environment variable `SOLVER` to (the path of) an external SAT solver. [kissat](https://github.com/arminbiere/kissat) works well. `hex_problem.py` creates a hexagon grid with some colored numbers in it. it doesn't really a serve a purpose. `yices_solution.py` parses a solution from a SAT solver, given the original yices-generated CNF.