If you're asking for a formal language spec for Hack, there isn't one right now, though it's something we think would be good to have around eventually. If you're asking for inference rules and formal proofs about the language, well, we've focused much more on making a pragmatic language than we have on sitting down and actually taking the time to prove it sound. :) (That said, code that's 100% strict should be sound, i.e., no runtime type errors, and if not that's a bug; we're just never going to sit down and formally prove that.)
So, the docs you link to are the best there are unless you want to start digging into the typechecker source. For that, you may be interested in the gritty details of our unification code, our subtyping relation, and general typechecking to begin with. (There's lots and lots more, but if you are the sort of person who wants to dig through the gritty details of how we implement unification I trust that you can find the rest yourself :))
If you have specific questions about the implementation, feel free to ask them here on SO with the "hacklang" tag if they are on topic, and in general I'm happy to chat in #hhvm on Freenode during working hours in US Pacific time.