Prolog DSL

TODO: write