Lesson 4 Typed Arithmetic Typed Lambda Calculus

Similar documents
Programming Languages Fall 2014

CIS 500 Software Foundations Fall October 2

Concepts of programming languages

CIS 500 Software Foundations Midterm I

Lecture 9: Typed Lambda Calculus

Costly software bugs that could have been averted with type checking

CMSC 336: Type Systems for Programming Languages Lecture 5: Simply Typed Lambda Calculus Acar & Ahmed January 24, 2008

Type Systems. Pierce Ch. 3, 8, 11, 15 CSE

Lesson 11 Universal Types. Universal Types and System F

Lambda Calculus. Type Systems, Lectures 3. Jevgeni Kabanov Tartu,

Programming Languages

More Untyped Lambda Calculus & Simply Typed Lambda Calculus

Chapter 5: The Untyped Lambda Calculus

CSE-321 Programming Languages 2012 Midterm

Part III. Chapter 15: Subtyping

Formal Systems and their Applications

Lambda Calculus: Implementation Techniques and a Proof. COS 441 Slides 15

(Advanced) topics in Programming Languages

Lambda Calculus. Concepts in Programming Languages Recitation 6:

Chapter 5: The Untyped Lambda Calculus

The lambda calculus (An introduction)

Chapter 22: Type Reconstruction (Type Inference)

Graphical Untyped Lambda Calculus Interactive Interpreter

CS152: Programming Languages. Lecture 11 STLC Extensions and Related Topics. Dan Grossman Spring 2011

Lambda calculus. Wouter Swierstra and Alejandro Serrano. Advanced functional programming - Lecture 6

Part III Chapter 15: Subtyping

Lambda Calculus. CS 550 Programming Languages Jeremy Johnson

Typed Lambda Calculus and Exception Handling

CIS 500 Software Foundations Midterm I Answer key October 8, 2003

Programming Languages Fall 2013

CSE 505 Graduate PL. Fall 2013

CIS 500 Software Foundations Midterm II Answer key November 16, 2005

Subsumption. Principle of safe substitution

CSE-321 Programming Languages 2010 Midterm

CSE-321 Programming Languages 2010 Final

M. Snyder, George Mason University LAMBDA CALCULUS. (untyped)

CMSC 330: Organization of Programming Languages. Lambda Calculus Encodings

Type systems (An introduction)

The Lambda Calculus. 27 September. Fall Software Foundations CIS 500. The lambda-calculus. Announcements

Type Systems. Today. 1. Organizational Matters. 1. Organizational Matters. Lecture 1 Oct. 20th, 2004 Sebastian Maneth. 1. Organizational Matters

More Lambda Calculus and Intro to Type Systems

CMSC 330: Organization of Programming Languages

Fall 2013 Midterm Exam 10/22/13. This is a closed-book, closed-notes exam. Problem Points Score. Various definitions are provided in the exam.

Review. CS152: Programming Languages. Lecture 11 STLC Extensions and Related Topics. Let bindings (CBV) Adding Stuff. Booleans and Conditionals

Formal Semantics. Prof. Clarkson Fall Today s music: Down to Earth by Peter Gabriel from the WALL-E soundtrack

Tradeoffs. CSE 505: Programming Languages. Lecture 15 Subtyping. Where shall we add useful completeness? Where shall we add completeness?

Lecture 2: Big-Step Semantics

Typed Lambda Calculus. Chapter 9 Benjamin Pierce Types and Programming Languages

CIS 500 Software Foundations Fall September 25

Type Systems Winter Semester 2006

Denotational Semantics. Domain Theory

Last class. CS Principles of Programming Languages. Introduction. Outline

More Lambda Calculus and Intro to Type Systems

CMSC 330: Organization of Programming Languages

Introduction to ML. Mooly Sagiv. Cornell CS 3110 Data Structures and Functional Programming

CMSC 336: Type Systems for Programming Languages Lecture 4: Programming in the Lambda Calculus Acar & Ahmed 22 January 2008.

Assistant for Language Theory. SASyLF: An Educational Proof. Corporation. Microsoft. Key Shin. Workshop on Mechanizing Metatheory

The Substitution Model

1.3. Conditional expressions To express case distinctions like

Lecture 13: Subtyping

The University of Nottingham SCHOOL OF COMPUTER SCIENCE A LEVEL 4 MODULE, SPRING SEMESTER MATHEMATICAL FOUNDATIONS OF PROGRAMMING ANSWERS

Fundamental Concepts. Chapter 1

1 Introduction. 3 Syntax

CS 6110 S11 Lecture 25 Typed λ-calculus 6 April 2011

Lambda Calculus and Type Inference

The Untyped Lambda Calculus

Type Systems. Parametric Polymorphism. 1. Recall Let-Polymorphism. 1. Recall Let-Polymorphism. Lecture 9 Dec. 15th, 2004 Sebastian Maneth

Inductive Definitions, continued

Programming Language Features. CMSC 330: Organization of Programming Languages. Turing Completeness. Turing Machine.

CMSC 330: Organization of Programming Languages

Universes. Universes for Data. Peter Morris. University of Nottingham. November 12, 2009

Semantics via Syntax. f (4) = if define f (x) =2 x + 55.

Graph reduction. Simple graph reduction with visualisation

dynamically typed dynamically scoped

Natural Numbers. We will use natural numbers to illustrate several ideas that will apply to Haskell data types in general.

Logical Verification Course Notes. Femke van Raamsdonk Vrije Universiteit Amsterdam

An Introduction to Programming and Proving in Agda (incomplete draft)

Untyped Lambda Calculus

Lambda Calculus and Type Inference

Introduction to dependent types in Coq

AXIOMS FOR THE INTEGERS

CS 4110 Programming Languages & Logics. Lecture 17 Programming in the λ-calculus

Resources: The slides of this lecture were derived from [Järvi], with permission of the original author, by copy & x = 1 let x = 1 in...

The Untyped Lambda Calculus

Formal Semantics. Aspects to formalize. Lambda calculus. Approach

CS 320: Concepts of Programming Languages

A formal derivation of an executable Krivine machine

The Substitution Model. Nate Foster Spring 2018

Untyped Lambda Calculus

Type Systems COMP 311 Rice University Houston, Texas

The Untyped Lambda Calculus

Introduction to Lambda Calculus. Lecture 7 CS /08/09

More Lambda Calculus and Intro to Type Systems

Introduction to Lambda Calculus. Lecture 5 CS 565 1/24/08

Comparing Cubes. Steffen van Bakel Luigi Liquori Simona Ronchi della Rocca Paweł Urzyczyn

Built-in Module BOOL. Lecture Note 01a

CMSC 330: Organization of Programming Languages

From Math to Machine A formal derivation of an executable Krivine Machine Wouter Swierstra Brouwer Seminar

Lecture 5: The Untyped λ-calculus

Softwaretechnik. Lecture 03: Types and Type Soundness. Peter Thiemann. University of Freiburg, Germany SS 2008

Transcription:

Lesson 4 Typed Arithmetic Typed Lambda 1/28/03 Chapters 8, 9, 10 Outline Types for Arithmetic types the typing relation safety = progress + preservation The simply typed lambda calculus Function types the typing relation Curry-Howard correspondence Erasure: Curry-style vs Church-style Implementation 1/28/03 Lesson 4: Typed Arith & Lambda 2 1

Terms for arithmetic Terms t :: = true false if t then t else t 0 succ t pred t iszero t Values v :: = true false nv nv ::= 0 succ nv 1/28/03 Lesson 4: Typed Arith & Lambda 3 Boolean and Nat terms Some terms represent booleans, some represent natural numbers. t :: = true false if t then t else t 0 succ t pred t iszero t if t then t else t if t then t else t 1/28/03 Lesson 4: Typed Arith & Lambda 4 2

Nonsense terms Some terms don t make sense. They represent neither booleans nor natural numbers. succ true iszero false if succ(0) then true else false These terms are stuck -- no evaluation rules apply, but they are not values. But what about the following? if iszero(0) then true else 0 1/28/03 Lesson 4: Typed Arith & Lambda 5 Space of terms Terms if true then 0 else succ(0) true false succ(0) 0 succ(succ(0)) iszero(pred(0)) 1/28/03 Lesson 4: Typed Arith & Lambda 6 3

Bool and Nat values Terms Nat values if true then 0 else succ(0) succ(0) true false 0 succ(succ(0)) iszero(pred(0)) Boolean values 1/28/03 Lesson 4: Typed Arith & Lambda 7 Bool and Nat types Bool type Terms Evals to Nat value true false 0 Nat type Evals to Bool value 1/28/03 Lesson 4: Typed Arith & Lambda 8 4

Evaluation preserves type Terms Nat Bool 1/28/03 Lesson 4: Typed Arith & Lambda 9 A Type System 1. type expressions: T ::=... 2. typing relation : t : T 3. typing rules giving an inductive definition of t: T 1/28/03 Lesson 4: Typed Arith & Lambda 10 5

Typing rules for Arithmetic: BN (typed) T ::= Bool Nat (type expressions) true : Bool (T-True) false : Bool (T-False) 0 : Nat (T-Zero) t1: Bool t2: T t3: T if t1 then t2 else t3 : T t1: Nat succ t1 : Nat t1: Nat pred t1 : Nat t1: Nat iszero t1 : Bool (T-If) (T-Succ) (T-Pred) (T-IsZero) 1/28/03 Lesson 4: Typed Arith & Lambda 11 Typing relation Defn: The typing relation t: T for arithmetic expressions is the smallest binary relation between terms and types satisfying the given rules. A term t is typable (or well typed) if there is some T such that t : T. 1/28/03 Lesson 4: Typed Arith & Lambda 12 6

Inversion Lemma Lemma (8.2.2). [Inversion of the typing relation] 1. If true : R then R = Bool 2. If false : R then R = Bool 3. If if t1 then t2 else t3 : R then t1 : Bool and t2, t3 : R 4. If 0: R then R = Nat 5. If succ t1 : R then R = Nat and t1 : Nat 6. If pred t1 : R then R = Nat and t1 : Nat 7. If iszero t1 : R then R = Bool and t1 : Nat 1/28/03 Lesson 4: Typed Arith & Lambda 13 Typing Derivations A type derivation is a tree of instances of typing rules with the desired typing as the root. (T-IsZero) (T-Zero) 0: Nat 0: Nat iszero(0): Bool 0: Nat pred(0): Nat if iszero(0) then 0 else pred 0 : Nat (T-Zero) (T-Pred) (T-If) The shape of the derivation tree exactly matches the shape of the term being typed. 1/28/03 Lesson 4: Typed Arith & Lambda 14 7

Uniqueness of types Theorem (8.2.4). Each term t has at most one type. That is, if t is typable, then its type is unique, and there is a unique derivation of its type. 1/28/03 Lesson 4: Typed Arith & Lambda 15 Safety (or Soundness) Safety = Progress + Preservation Progress: A well-typed term is not stuck -- either it is a value, or it can take a step according to the evaluation rules. Preservation: If a well-typed term makes a step of evaluation, the resulting term is also well-typed. Preservation is also known as subject reduction 1/28/03 Lesson 4: Typed Arith & Lambda 16 8

Cannonical forms Defn: a cannonical form is a well-typed value term. Lemma (8.3.1). 1. If v is a value of type Bool, then v is true or v is false. 2. If v is a value of type Nat, then v is a numeric value, i.e. a term in nv, where nv ::= 0 succ nv. 1/28/03 Lesson 4: Typed Arith & Lambda 17 Progress and Preservation for Arithmetic Theorem (8.3.2) [Progress] If t is a well-typed term (that is, t: T for some type T), then either t is a value or else t Æ t for some t. Theorem (8.3.3) [Preservation] If t: T and t Æ t then t : T. Proofs are by induction on the derivation of t: T. 1/28/03 Lesson 4: Typed Arith & Lambda 18 9

Simply typed lambda calculus To type terms of the lambda calculus, we need types for functions (lambda terms): T1 -> T2 A function type T1 -> T2 specifies the argument type T1 and the result type T2 of the function. 1/28/03 Lesson 4: Typed Arith & Lambda 19 Simply typed lambda calculus The abstract syntax of type terms is T ::= base types T -> T We need base types (e.g Bool) because otherwise we could build no type terms. We also need terms of these base types,so we have an applied lambda calculus. In this case, we will take Bool as the sole base type and add corresponding Boolean terms. 1/28/03 Lesson 4: Typed Arith & Lambda 20 10

Abstract syntax and values Terms t :: = true false if t then t else t x lx: T. t t t Values v :: = true false lx: T. t Note that terms contain types! Lambda expressions are explicitly typed. 1/28/03 Lesson 4: Typed Arith & Lambda 21 Typing rule for lambda terms G, x: T1 - t2 : T2 G - lx: T1. t2 : T1 -> T2 (T-Abs) The body of a lambda term (usually) contains free variable occurrences. We need to supply a context (G) that gives types for the free variables. Defn. A typing context G is a list of free variables with their types. A variable can appear only once in a context. G ::= G, x: T 1/28/03 Lesson 4: Typed Arith & Lambda 22 11

Typing rule for applications G - t1 : T11 -> T12 G - t1 t2 : T12 G - t2 : T11 (T-App) The type of the argument term must agree with the argument type of the function term. 1/28/03 Lesson 4: Typed Arith & Lambda 23 Typing rule for variables x : T ΠG G - x : T (T-Var) The type of a variable is taken from the supplied context. 1/28/03 Lesson 4: Typed Arith & Lambda 24 12

Inversion of typing relation Lemma (9.3.1). [Inversion of the typing relation] 1. If G - x : R then x: R ΠG 2. If G - lx: T1. t2 : R then R = T1 -> R2 for some R2 with G, x: T1 - t2 : R2. 3. If G - t1 t2 : R, then there is a T11 such that G - t1: T11 -> R and G - t2 : T11. 4. If G - true : R then R = Bool 5. If G - false : R then R = Bool 6. If G - if t1 then t2 else t3 : R then G - t1 : Bool and G - t2, t3 : R 1/28/03 Lesson 4: Typed Arith & Lambda 25 Uniqueness of types Theorem (9.3.3): In a given typing context G containing all the free variables of term t, there is at most one type T such that G - t: T. 1/28/03 Lesson 4: Typed Arith & Lambda 26 13

Canonical Forms (l Æ ) Lemma (9.3.4): 1. If v is a value of type Bool, then v is either true or false. 2. If v is a value of type T1->T2, then v = lx: T1.t. 1/28/03 Lesson 4: Typed Arith & Lambda 27 Progress (l Æ ) Theorem (9.3.5): Suppose t is a closed, well-typed term (so - t: T for some T). Then either t is a value, or t Æ t for some t. Proof: by induction on the derivation of - t: T. Note: if t is not closed, e.g. f true, then it may be in normal form yet not be a value. 1/28/03 Lesson 4: Typed Arith & Lambda 28 14

Permutation and Weakening Lemma (9.3.6)[Permutation]: If G - t: T and D is a permutation of G, then D - t: T. Lemma (9.3.7)[Weakening]: If G - t: T and xœdom(g), then for any type S, G, x: S - t: T, with a derivation of the same depth. Proof: by induction on the derivation of - t: T. 1/28/03 Lesson 4: Typed Arith & Lambda 29 Substitution Lemma Lemma (9.3.8) [Preservation of types under substitutions]: If G, x: S - t : T and G - s: S, then G - [x s]t: T. Proof: induction of the derivation of G, x: S - t : T. Replace leaf nodes for occurences of x with copies of the derivation of G - s: S. 1/28/03 Lesson 4: Typed Arith & Lambda 30 15

Substitution Lemma Lemma (9.3.8) [Preservation of types under substitutions]: If G, x: S - t : T and G - s: S, then G - [x s]t: T. Proof: induction of the derivation of G, x: S - t : T. Replace leaf nodes for occurences of x with copies of the derivation of G - s: S. 1/28/03 Lesson 4: Typed Arith & Lambda 31 Preservation (l Æ ) Theorem (9.3.9) [Preservation]: If G - t : T and t Æ t, then G - t : T. Proof: induction of the derivation of G - t : T, similar to the proof for typed arithmetic, but requiring the Substitution Lemma for the beta redex case. Homework: write a detailed proof of Thm 9.3.9. 1/28/03 Lesson 4: Typed Arith & Lambda 32 16

Introduction and Elimination rules l Introduction G, x: T1 - t2 : T2 G - lx: T1. t2 : T1 -> T2 (T-Abs) l Elimination G - t1 : T11 -> T12 G - t1 t2 : T12 G - t2 : T11 (T-App) Typing rules often come in intro-elim pairs like this. Sometimes there are multiple intro or elim rules for a construct. 1/28/03 Lesson 4: Typed Arith & Lambda 33 Erasure Defn: The erasure of a simply typed term is defined by: erase(x) = x erase(lx: T. t) = lx. erase(t) erase(t1 t2) = (erase(t1))(erase(t2)) erase maps a simply typed term in l Æ to the corresponding untyped term in l. erase(lx: Bool. ly: Bool -> Bool. y x) = lx. ly. y x 1/28/03 Lesson 4: Typed Arith & Lambda 34 17

Erasure commutes with evaluation t erase m t eval læ erase m eval l Theorem (9.5.2) 1. if t Æ t in l Æ then erase(t) Æ erase(t ) in l. 2. if erase(t) Æ m in l then there exists t such that t Æ t in l Æ and erase(t ) = m. 1/28/03 Lesson 4: Typed Arith & Lambda 35 Curry style and Church style Curry: define evaluation for untyped terms, then define the well-typed subset of terms and show that they don t exhibit bad run-time behaviors. Erase and then evaluate. Church: define the set of well-typed terms and give evaluation rules only for such well-typed terms. 1/28/03 Lesson 4: Typed Arith & Lambda 36 18

Homework Modify the simplebool program to add arithmetic terms and a second primitive type Nat. 1. Add Nat, 0, succ, pred, iszero tokens to lexer and parser. 2. Extend the definition of terms in the parser with arithmetic forms (see tyarith) 3. Add type and term constructors to abstract syntax in syntax.sml, and modify print functions accordingly. 3. Modify the eval and typeof functions in core.sml to handle arithmetic expressions. 1/28/03 Lesson 4: Typed Arith & Lambda 37 Optional homework Can you define the arithmetic plus operation in l Æ (BN)? 1/28/03 Lesson 4: Typed Arith & Lambda 38 19

Sample some text 1/28/03 Lesson 4: Typed Arith & Lambda 39 Rules prem1 concl prem2 (Label) prem1 concl (Label) axiom (Label) 1/28/03 Lesson 4: Typed Arith & Lambda 40 20

Symbols l a b m t r s G Æ Ÿ» «Õ à À Œ œ l a b m t r s G D Æ Ÿ» «Õ à À Œ œ 1/28/03 Lesson 4: Typed Arith & Lambda 41 Space of terms Terms succ true Bool false iszero Nat 0 1/28/03 Lesson 4: Typed Arith & Lambda 42 21