https://123dok.net/document/y4w583kq-higher-order-abstract-syntax-in-coq.html