Please read Chapter 13 in your textbook.
Please do the following problem:
c = (lambda x: Nat . {ref x, ref x}) 0
Explain your answer!
The textbook says (page 167) that we must include a well typing in the requirements for progress and preservation. Give two counter-examples, one for Progress (Theorem 13.5.7) and one for Preservation (Theorem 13.5.3) if they omit any mention of well typing.
Put together the proof of progress. The solution uses the following three ``effectiveness'' lemmas:
Optionally, complete the proof of preservation of references started in the SASyLF skeleton file.
The model in the textbook doesn't handle pointer arithmetic. Find and cite published proofs of soundness of systems with pointer arithmetic. How does the model change? What new types are needed? Are there any mechanized proofs?