Sometimes we declare types in the incorrect order, leading SMT solvers to fail. For example, ``` module main { type t; datatype a = A(x: t); var y: a; var z: t; init { assert y.x == z; } control { bmc(0); check; print_results; } } ``` leads to `a` being declared before `t` using the SMTLIB interface.