You should understand the difference between a value conversion "cast" like "(int) 3.0" that creates a new value, and a type conversion cast that only re-interprets existing bits. To understand the papers, you should know the term "currying": https://en.wikipedia.org/wiki/Currying . There is a typo in the 1982 paper, Algorithm W part (ii): on the second line, e2 and t2 should be e1 and t1. "e2" and "t2" are correct on the third line. What is the distinction between \cal{E}[[e]]E and A |- e : \sigma ? Explain in 2-4 sentences. (Read "\cal{E}[[e]]E" as as LaTeX code. "\cal{E}" is the script letter E. "[[ ]]" are double square brackets that are smashed together, in "blackboard bold" style.) What does "type safety" mean? Why do we care? How far do those guarantees extend?