Prolog compiler with an optional type checker Details explained here: https://github.com/PhoebeMay/Dissertation/blob/master/dissertation.pdf