https://123dok.net/document/z1d6728z-a-tutorial-on-recursive-types-in-coq.html