self-referential backwards doctyping