Encoding SAT in OCaml GADTs
farlow.dev