Matt Moore's 15-312 Recitation Outline 9/29/2004 Things to specify when adding a new type to a language: - values and how to evaluate (Dynamic Semantics) - typing rules (Static Semantics) - Constructors and Destructors - Constructor: When the *result* of applying the rule is something of the new type - Destructor: When you are "looking inside" something of the given type, and using its data to perform some task - value inversion cases Reason for structuring our language design this way: - Since everything is given in rule form, when we make a language extension, since all we are doing is adding new rules, to re-prove Progress and Preservation, we need only extend our previous proof with these cases. Example: Binary Trees: - Static Semantics: (point out constructors/destructor) - Dynamic Semantics: (values / stepping rules) - value inversion case(s) - Preservation Proof - Progress Proof