# CSE 505. Lecture #9. October 1, Lambda Calculus. Recursion and Fixed-points. Typed Lambda Calculi. Least Fixed Point

Save this PDF as:

Size: px
Start display at page:

Download "CSE 505. Lecture #9. October 1, Lambda Calculus. Recursion and Fixed-points. Typed Lambda Calculi. Least Fixed Point"

## Transcription

1 Lambda Calculus CSE 505 Lecture #9 October 1, 2012 Expr ::= Var λ Var. Expr (Expr Expr) Key Concepts: Bound and Free Occurrences Substitution, Reduction Rules: α, β, η Confluence and Unique Normal Form Nontermination and Leftmost Reduction Church-Rosser Property (==>* and <==>*) Encoding Things in Lambda Calculus Recursion and Fixed-Point Operator (Y) 2 Recursion and Fixed-points fact = λn.(((if (is0 n)) 1) ((mult n) (fact (pred n))) t = λf. λn.(((if (is0 n)) 1) ((mult n) (f (pred n)))) Why does the fixed-point of t capture f? Fixed point g has the property: g = (t g) g = λn.(((if (is0 n)) 1) ((mult n) (g (pred n))) 3 Y = λf. (λx.(f (x x)) 4 λx.(f (x x))) In Lambda Calculus, Y is fixed-point operator, because (for any t): Proof: (Y t) <==>* (t (Y t)) (Y t) = (λf. (λx.(f (x x)) λx.(f (x x))) t) ==> (λx.(t (x x)) λx.(t (x x))) ==> (t (λx.(t (x x)) λx.(t (x x))))) <==> (t (Y t)) Consider: Fixed-point f1(n) = Fixed-point f2(n) = Least Fixed Point letrec f(n) = if n=0 then 0 else f(n); 0, if n=0 1, if n 0 0, if n=0 2, if n 0 Typed Lambda Calculi Thus far, we have studied the untyped lambda calculus, i.e., no types associated with vars. There are two well-known calculi: - the simply-type lambda calculus - the second-order (polymorphic) lambda calculus Least fixed-point g(n) = 0, if n=0?, if n 0 Interesting, adding types causes all lambda expressions to terminate! Cannot have (x x). 5 6

2 Lambda Calculus in PLs Lisp: (lambda (f g) (lambda (x) (f (g x)))) Javascript: function(f g) {return function (x) return f(g(x))}} Python: comp = lambda f,g: lambda x: f(g(x)) double = lambda x:x*2 triple = lambda y:y*3 comp(double, triple)(100) = 600 Functional languages such as Scheme, ML and Haskell also support lambda calculus. Types in PLs Concrete and Abstract types Strong Typing Type equivalence and security Exceptions Polymorphism Type inference Advanced Type Systems 8 What is a type? Simple Answer: A type is a set of values. e.g. type int = {, -2, -1, 0, 1, 2 } Better Answer: A type is a set + operations. e.g. type int = {, -2, -1, 0, 1, 2 } together with operations such as +, -, *, etc. That is, a type is more like an algebra. (Even better characterization is possible.) What is a type (cont d) Consider type int = {, -2, -1, 0, 1, 2 } with operations such as +, -, *, etc. Are numerals, -2, -1, 0, 1, 2 necessary in defining int? Can t we use, -10, -01, 0, 01, 10, 11,? Choice of literals not crucial We can define the values of a type using operations called constructors. But literals are useful in practice A type is a set of operations! zero: int succ: int int + : int * int int * : int * int int % : int * int int < : int * int int Abstract Data Type Refined int type exception overflow, underflow, dividebyzero zero: int succ: int int + : int * int int * : int * int int % : int * int int < : int * int bool 11 12

3 Why use types? Three important reasons: -faster execution: e.g. for (i=1; i++; i<=n) { x * y } -better program readability/documentation: e.g. void f(x) { } vs void f(tree x) { } -early error checking: e.g. int x; void f(string y){ }; f(x) Strongly Typed Language Popular Answer: every variable has a type declared for it Above criterion not sufficient (or even necessary!): int i, j, k; i := j ** k Somewhat Better Answer: A language is strongly typed if compiler can perform all type-checking Strong Typing Defined By a static (source code) analysis of the program: 1. the type of every expression can be unambiguously determined; and 2. all type equivalence tests can be unambiguously decided. Pascal Type System Unstructured built-in: integer, real, char, boolean user-defined: enumerations and subranges Structured user-defined: record, array, set, file, Note: Pascal does not have abstract types. Algol 68 preceded Pascal, and was the first language to introduce user-defined types ( modes ) Polymorphic Types: Motivation Pascal is an important milestones in PLs, because of its type system. But Pascal has first-order types, also known as monomorphic types. Many modern PLs have higher-order types, or polymorphic types. They also support abstract data types, a concept that was not fully developed when Pascal was invented. Polymorphic Types: Motivation Pascal is an important milestones in PLs, because of its type system. But Pascal has first-order types, also known as monomorphic types. Many modern PLs have higher-order types, or polymorphic types. They also support abstract data types, a concept that was not fully developed when Pascal was invented

4 Why Mono Types not Enough int length(l) { int len = 0; while (l!== nil) { len := len + 1; l := l.next; } return len; } Desired type of length is: ( t) t List int 19 Polymorphic Types (cont d) Another example: List app(l1, l2) { if (l1 = nil) return l2 else return cons(l1.val, app(l1.next, l2)); } Desired type of app is: ( t) t List * t List t List 20 Polymorphic Types (cont d) The generic sorting procedure: void sort(var a: array[t]) { } might be given the type: ( t) t array void This type is not quite correct for sort. Robin Milner Inventor of ML Introduced polymorphic types and type inference Received ACM Turing Award Characteristics of ML Strongly typed language (with type inference): - (parametric) polymorphic types - concrete type - abstract types Higher-order functional language: - expression-oriented (like Lisp) - rule-based definitions, with pattern matching - higher-order functions (output can also be function) - static scoping, with nested function definitions Modular language: - signatures, structures, and functors 23 Type variable ::= N-tuple ML Type System int real bool string unit * * { f 1 :,, f k : list ' id '' id user_defined_concrete_type user_defined_abstract_type 24 Function Type Record

5 Overloaded op r Type Name Operations Sample Literals int +, -, *, div, mod, ~2, ~1, 0, 1, 2 =, >, >=, <>, real +, -, *, /, ~ 3.14, 0.0, 3E2, =, >, >=, <>, bool andalso, orelse, true, false if then else, =, <>, string size, ^, =, <>, "", "abcd", unit =, <> () short-circuit op r 25 negative literal ML is a Functional Language Program = set of function definitions No imperative features, especially no assignments and updating. Computation is essentially the reduction of expression to a value. Keywords: functions, types, values, expressions, reduction strategies, := 26 Type Inference Examples: fun f(x) = x + 1; int int Resolving overloaded operators fun f(x:int, y) = x*x + y; fun f(x,y) = (x+y, y*2.5); fun f(x,y) = x*x + y real*real real*real Unresolved overloaded operators + and * fun f(x, y:int) = x*x + y; fun f(x, y):int = x*x + y; fun f(x, y) = x*x + y:int; if-then-else if <expr 1 > then <expr 2 > else <expr 3 > ( t) bool * t * t t Examples: fun f(x,y) = if x > y then x*2 else y*2; f: int*int int fun f(x,y) = if x > y then x*x else y*y; Unresolved overloaded ops 29 fact: int int Recursive Definitions fun fact(n) = if n=0 then 1 else n*fact(n-1); agrees with fact: int->int 30 n:int

6 Another recursive definition fun h(x,y) = if x then y else h(y,x); x:bool Hence, h: bool*bool bool y:bool Type inference is a process of propagating type information (bottom-up, top-down, and side-ways) in order to determine the types of all identifiers variables or functions. Type Inference - Remarks In the absence of overloaded operators, types for all identifiers in an ML program can be unambiguously determined without any type declarations (assuming no type errors) Local Vars & Nested Scopes let <local_value_bindings> in <expression> let val a = 10; val b = f(a) in let val a = 20; val c = g(a, b) in (a+b) / (a - c) fun quad(a,b,c)= let val disc = b*b - 4.0*a*c; val den = 2.0*a in if disc = 0.0 then ~b/den else if disc > 0.0 then let val sq = sqrt(disc) in ((sq-b)/den, (~sq-b)/den) else "imaginary" 34 Concrete Data Types datatype root = imaginary one of real two of real*real; Types for the constructors: imaginary : root one : real -> root two : real * real -> root 35 fun quad(a,b,c)= let val disc = b*b - 4.0*a*c; val den = 2.0*a in if disc = 0.0 then one(-b/den) else if disc > 0.0 then let val sq = sqrt disc in two((sq-b)/den, (-sq-b)/den) else imaginary Almost correct, except for equality test 36

7 fun quad(a,b,c)= let val disc = b*b - 4.0*a*c; val den = 2.0*a; fun realeq(x,y) = abs(x-y) < in if realeq(disc,0.0) then one(-b/den) else if disc > 0.0 then let val sq = sqrt disc in two((sq-b)/den, (-sq-b)/den) else imaginary val quad = fn: real * real * real -> root 37 Using quad - quad(1.0, 5.0, 6.0); val it = two(~2.0, ~3.0) : root - quad(1.0, 2.0, 1.0); val it = one(~1.0) : root - quad(1.0, 1.0, 1.0); val it = imaginary : root 38 Pattern Matching fun nroots(imaginary) = 0 nroots(one(x)) = 1 nroots(two(x,y)) = 2; fun fib(1) = 1 fib(2) = 1 fib(n) = fib(n-1) + fib(n-2); root -> int int -> int Polymorphic Datatypes datatype 'a list = [ ] :: of 'a * a list; cons Constructors: [ ] : 'a list :: : 'a * 'a list 'a list List Constants (literals) [1, 2, 3] = 1 :: 2 :: 3 :: [ ] : int list [ abc, def ] = abc :: de :: [ ] : string list [[1, 2],[3]] = ((1::2::[]) :: (3::[]) :: []) : int list list [1, apple, 3.14] badly typed list [1, [2], [1,2,3]] badly typed list Polymorphically Typed Functions fun length([ ]) = 0 length(h::t) = 1 + length(t); What is the type of length? - Output Type: int, since 0:int, and this agrees with the second case 1 + length(t); - Input Type: the terms [ ] and h::t have types a list and b list, but a=b since they must be compatible. Hence the type of length: a list int. 42

8 Polymorphic Functions (cont d) fun member(x, []) = false member(x, h::t) = if x=h then true else member(x,t) a * a list bool Note: The following is incorrect: More examples fun mystery([ ]) = [] mystery(h::t) = mystery(t) Mystery type analysis: - input and output types must be lists; a list * a list -> a list - mystery(t) indicates that h must be a list; Nonlinear Pattern Disallowed! fun member(x, []) = false member(x, x::t) = true member(x, y::t) = false mystery: a list list -> a list A simple tree datatype datatype 'a tree= leaf of 'a node of 'a tree * 'a tree Sample tree literals: leaf(true) node(leaf(1), leaf(2)) node(node(leaf(3.5), leaf(4.5)), leaf(1.5)) node(node(leaf("ada"), leaf( C")), node(leaf( Java"), leaf( Prolog"))) a tree int anonymous variable fun depth(leaf(_)) = 0 depth(node(t1, t2)) = let val d1 = depth(t1); val d2 = depth(t2) in if d1>d2 then 1+d1 else 1+d The Quicksort Algorithm fun qsort([]) = [] qsort(h::t) = let val (l, r) = partition(h, t) in qsort(r) fun partition(pivot, [ ]) = ([ ], [ ]) partition(pivot, h::t) = let val (l, r) = partition(pivot, t) in if h < pivot then (h::l, r) else (l, h::r) app unresolved overloaded op r fun partition(pivot, [ ]) = ([ ], [ ]) partition(pivot:int, h::t) = let val (l, r) = partition(pivot, t) in if h < pivot then (h::l, r) else (l, h::r) fun qsort([]) = [] qsort(h::t) = let val (l, r) = partition(h, t) in qsort(r) int list int list must specify type 47 48

### cs242 Kathleen Fisher Reading: Concepts in Programming Languages, Chapter 6 Thanks to John Mitchell for some of these slides.

cs242 Kathleen Fisher Reading: Concepts in Programming Languages, Chapter 6 Thanks to John Mitchell for some of these slides. We are looking for homework graders. If you are interested, send mail to cs242cs.stanford.edu

### According to Larry Wall (designer of PERL): a language by geniuses! for geniuses. Lecture 7: Haskell. Haskell 98. Haskell (cont) - Type-safe!

Lecture 7: Haskell CSC 131 Fall, 2014 Kim Bruce According to Larry Wall (designer of PERL): a language by geniuses for geniuses He s wrong at least about the latter part though you might agree when we

### Type Checking and Type Inference

Type Checking and Type Inference Principles of Programming Languages CSE 307 1 Types in Programming Languages 2 Static Type Checking 3 Polymorphic Type Inference Version: 1.8 17:20:56 2014/08/25 Compiled

### More Untyped Lambda Calculus & Simply Typed Lambda Calculus

Concepts in Programming Languages Recitation 6: More Untyped Lambda Calculus & Simply Typed Lambda Calculus Oded Padon & Mooly Sagiv (original slides by Kathleen Fisher, John Mitchell, Shachar Itzhaky,

### Types, Type Inference and Unification

Types, Type Inference and Unification Mooly Sagiv Slides by Kathleen Fisher and John Mitchell Cornell CS 6110 Summary (Functional Programming) Lambda Calculus Basic ML Advanced ML: Modules, References,

### The Untyped Lambda 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... paste or by selection, annotation, or rewording. [Järvi] is in turn

### Lambda Calculus.

Lambda Calculus Oded Padon & Mooly Sagiv (original slides by Kathleen Fisher, John Mitchell, Shachar Itzhaky, S. Tanimoto, Stephen A. Edwards) Benjamin Pierce Types and Programming Languages http://www.cs.cornell.edu/courses/cs3110/2008fa/recitations/rec26.html

### COMP 1130 Lambda Calculus. based on slides by Jeff Foster, U Maryland

COMP 1130 Lambda Calculus based on slides by Jeff Foster, U Maryland Motivation Commonly-used programming languages are large and complex ANSI C99 standard: 538 pages ANSI C++ standard: 714 pages Java

### Lists. Michael P. Fourman. February 2, 2010

Lists Michael P. Fourman February 2, 2010 1 Introduction The list is a fundamental datatype in most functional languages. ML is no exception; list is a built-in ML type constructor. However, to introduce

### Functional Languages and Higher-Order Functions

Functional Languages and Higher-Order Functions Leonidas Fegaras CSE 5317/4305 L12: Higher-Order Functions 1 First-Class Functions Values of some type are first-class if They can be assigned to local variables

Overloading, Type Classes, and Algebraic Datatypes Delivered by Michael Pellauer Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. September 28, 2006 September 28, 2006 http://www.csg.csail.mit.edu/6.827

### Introduction to Functional Programming in Haskell 1 / 56

Introduction to Functional Programming in Haskell 1 / 56 Outline Why learn functional programming? The essence of functional programming What is a function? Equational reasoning First-order vs. higher-order

### More Lambda Calculus and Intro to Type Systems

More Lambda Calculus and Intro to Type Systems Plan Heavy Class Participation Thus, wake up! Lambda Calculus How is it related to real life? Encodings Fixed points Type Systems Overview Static, Dyamic

### CSC312 Principles of Programming Languages : Functional Programming Language. Copyright 2006 The McGraw-Hill Companies, Inc.

CSC312 Principles of Programming Languages : Functional Programming Language Overview of Functional Languages They emerged in the 1960 s with Lisp Functional programming mirrors mathematical functions:

### A Brief Introduction to Standard ML

A Brief Introduction to Standard ML Specification and Verification with Higher-Order Logic Arnd Poetzsch-Heffter (Slides by Jens Brandt) Software Technology Group Fachbereich Informatik Technische Universität

### So what does studying PL buy me?

So what does studying PL buy me? Enables you to better choose the right language but isn t that decided by libraries, standards, and my boss? Yes. Chicken-and-egg. My goal: educate tomorrow s tech leaders

### The Untyped Lambda 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... paste or by selection, annotation, or rewording. [Järvi] is in turn

### Topics Covered Thus Far CMSC 330: Organization of Programming Languages

Topics Covered Thus Far CMSC 330: Organization of Programming Languages Names & Binding, Type Systems Programming languages Ruby Ocaml Lambda calculus Syntax specification Regular expressions Context free

### PROGRAMMING IN HASKELL. Chapter 2 - First Steps

PROGRAMMING IN HASKELL Chapter 2 - First Steps 0 The Hugs System Hugs is an implementation of Haskell 98, and is the most widely used Haskell system; The interactive nature of Hugs makes it well suited

### 9/23/2014. Why study? Lambda calculus. Church Rosser theorem Completeness of Lambda Calculus: Turing Complete

Dr A Sahu Dept of Computer Science & Engineering IIT Guwahati Why study? Lambda calculus Syntax Evaluation Relationship to programming languages Church Rosser theorem Completeness of Lambda Calculus: Turing

### COMP80 Lambda Calculus Programming Languages Slides Courtesy of Prof. Sam Guyer Tufts University Computer Science History Big ideas Examples:

COMP80 Programming Languages Slides Courtesy of Prof. Sam Guyer Lambda Calculus Formal system with three parts Notation for functions Proof system for equations Calculation rules called reduction Idea:

### Recursion. Lecture 6: More Lambda Calculus Programming. Fixed Points. Recursion

Recursion Lecture 6: More Lambda Calculus Programming CSC 131! Fall, 2014!! Kim Bruce Recursive definitions are handy! - fact = λn. cond (iszero n) 1 (Mult n (fact (Pred n)))! - Not a legal definition

### Conversion vs. Subtyping. Lecture #23: Conversion and Type Inference. Integer Conversions. Conversions: Implicit vs. Explicit. Object x = "Hello";

Lecture #23: Conversion and Type Inference Administrivia. Due date for Project #2 moved to midnight tonight. Midterm mean 20, median 21 (my expectation: 17.5). In Java, this is legal: Object x = "Hello";

### Data Types The ML Type System

7 Data Types 7.2.4 The ML Type System The following is an ML version of the tail-recursive Fibonacci function introduced Fibonacci function in ML in Section 6.6.1: EXAMPLE 7.96 1. fun fib (n) = 2. let

### Formal Semantics. Aspects to formalize. Lambda calculus. Approach

Formal Semantics Aspects to formalize Why formalize? some language features are tricky, e.g. generalizable type variables, nested functions some features have subtle interactions, e.g. polymorphism and

### More Lambda Calculus and Intro to Type Systems

#1 More Lambda Calculus and Intro to Type Systems #2 Plan Heavy Class Participation Thus, wake up! (not actually kidding) Lambda Calculus How is it related to real life? Encodings Fixed points Type Systems

Advanced features of Functional Programming (Haskell) Polymorphism and overloading January 10, 2017 Monomorphic and polymorphic types A (data) type specifies a set of values. Examples: Bool: the type of

### Introduction to the Lambda Calculus. Chris Lomont

Introduction to the Lambda Calculus Chris Lomont 2010 2011 2012 www.lomont.org Leibniz (1646-1716) Create a universal language in which all possible problems can be stated Find a decision method to solve

### Any questions. Say hello to OCaml. Say hello to OCaml. Why readability matters. History, Variants. Plan (next 4 weeks)

Any questions Say hello to OCaml? void sort(int arr[], int beg, int end){ if (end > beg + 1){ int piv = arr[beg]; int l = beg + 1; int r = end; while (l!= r-1){ if(arr[l]

### λ calculus is inconsistent

Content Rough timeline COMP 4161 NICTA Advanced Course Advanced Topics in Software Verification Gerwin Klein, June Andronick, Toby Murray λ Intro & motivation, getting started [1] Foundations & Principles

### Recap from last time. Programming Languages. CSE 130 : Fall Lecture 3: Data Types. Put it together: a filter function

CSE 130 : Fall 2011 Recap from last time Programming Languages Lecture 3: Data Types Ranjit Jhala UC San Diego 1 2 A shorthand for function binding Put it together: a filter function # let neg = fun f

T O Y H Advances in Programming Languages APL8: Multiparameter Type Classes, Constructor Classes Ian Stark School of Informatics The University of Edinburgh Thursday 4 February Semester 2 Week 4 E H U

### Part I. Historical Origins

Introduction to the λ-calculus Part I CS 209 - Functional Programming Dr. Greg Lavender Department of Computer Science Stanford University Historical Origins Foundations of Mathematics (1879-1936) Paradoxes

### Organization of Programming Languages CS3200/5200N. Lecture 11

Organization of Programming Languages CS3200/5200N Razvan C. Bunescu School of Electrical Engineering and Computer Science bunescu@ohio.edu Functional vs. Imperative The design of the imperative languages

### Polymorphic lambda calculus Princ. of Progr. Languages (and Extended ) The University of Birmingham. c Uday Reddy

06-02552 Princ. of Progr. Languages (and Extended ) The University of Birmingham Spring Semester 2016-17 School of Computer Science c Uday Reddy2016-17 Handout 6: Polymorphic Type Systems 1. Polymorphic

### 301AA - Advanced Programming [AP-2017]

301AA - Advanced Programming [AP-2017] Lecturer: Andrea Corradini andrea@di.unipi.it Tutor: Lillo GalleBa galleba@di.unipi.it Department of Computer Science, Pisa Academic Year 2017/18 AP-2017-15: Func'onal

### Functional programming Primer I

Functional programming Primer I COS 320 Compiling Techniques Princeton University Spring 2016 Lennart Beringer 1 Characteristics of functional programming Primary notions: functions and expressions (not

### Programming Languages

CSE 130 : Spring 2011 Programming Languages Lecture 3: Crash Course Ctd, Expressions and Types Ranjit Jhala UC San Diego A shorthand for function binding # let neg = fun f -> fun x -> not (f x); # let

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

Type Systems Pierce Ch. 3, 8, 11, 15 CSE 6341 1 A Simple Language ::= true false if then else 0 succ pred iszero Simple untyped expressions Natural numbers encoded as succ succ

### Fundamentals of Artificial Intelligence COMP221: Functional Programming in Scheme (and LISP)

Fundamentals of Artificial Intelligence COMP221: Functional Programming in Scheme (and LISP) Prof. Dekai Wu Department of Computer Science and Engineering The Hong Kong University of Science and Technology

### Begin at the beginning

Begin at the beginning Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set of

### How does ML deal with +?

How does ML deal with +? Moscow ML version 2.00 (June 2000) - op +; > val it = fn : int * int -> int - 1 + 1; > val it = 2 : int - 1.0 + 1.0; > val it = 2.0 : real - false + false;! Overloaded + cannot

Programming Paradigms, Fall 06 Multiple Choice Exam January 29, 2007, 10:00 11:15 ID Name Each of the following questions has exactly one correct answer. For each question, you may select one or more answers

Processadors de Llenguatge II Functional Paradigm II Pratt A.7 Robert Harper s SML tutorial (Sec II) Rafael Ramirez Dep Tecnologia Universitat Pompeu Fabra User-Defined Types How to define the new type.

### CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages Lambda Calculus Encodings CMSC 330 Spring 2017 1 Review A lambda calculus expression is defined as e ::= x variable λx.e abstraction (fun def) e e application

### Recursion. Lars-Henrik Eriksson. Functional Programming 1. Based on a presentation by Tjark Weber and notes by Sven-Olof Nyström

Lars-Henrik Eriksson Functional Programming 1 Based on a presentation by Tjark Weber and notes by Sven-Olof Nyström Tjark Weber (UU) Recursion 1 / 41 Comparison: Imperative/Functional Programming Comparison:

### CSci 4223 Principles of Programming Languages

CSci 4223 Principles of Programming Languages Lecture 11 Review Features learned: functions, tuples, lists, let expressions, options, records, datatypes, case expressions, type synonyms, pattern matching,

### Combining Programming with Theorem Proving

Combining Programming with Theorem Proving Chiyan Chen and Hongwei Xi Boston University Programming with Theorem Proving p.1/27 Motivation for the Research To support advanced type systems for practical

### λ calculus Function application Untyped λ-calculus - Basic Idea Terms, Variables, Syntax β reduction Advanced Formal Methods

Course 2D1453, 2006-07 Advanced Formal Methods Lecture 2: Lambda calculus Mads Dam KTH/CSC Some material from B. Pierce: TAPL + some from G. Klein, NICTA Alonzo Church, 1903-1995 Church-Turing thesis First

### low and not larger than high. 18 points

CSE 330 Test 1 (1 point) Spring 015 Multiple Choice. Write your answer to the LEFT of each problem. 3 points each 1. Lisp was invented at: A. IBM B. MIT C. Netscape D. Stanford. In C++, what operator is

### CSE 130 Programming Languages. Lecture 3: Datatypes. Ranjit Jhala UC San Diego

CSE 130 Programming Languages Lecture 3: Datatypes Ranjit Jhala UC San Diego News? PA #2 (coming tonight) Ocaml-top issues? Pleas post questions to Piazza Recap: ML s Holy Trinity Expressions (Syntax)

### Chapter 5: The Untyped Lambda Calculus

Chapter 5: The Untyped Lambda Calculus What is lambda calculus for? Basics: syntax and operational semantics Programming in the Lambda Calculus Formalities (formal definitions) What is Lambda calculus

### User-Defined Algebraic Data Types

72 Static Semantics User-Defined Types User-Defined Algebraic Data Types An algebraic data type declaration has the general form: data cx T α 1... α k = K 1 τ 11... τ 1k1... K n τ n1... τ nkn introduces

### CSC324 Functional Programming Typing, Exceptions in ML

CSC324 Functional Programming Typing, Exceptions in ML Afsaneh Fazly 1 Winter 2013 1 with many thanks to Anya Tafliovich, Gerald Penn, Sheila McIlraith, Wael Aboelsaddat, Tony Bonner, Eric Joanis, Suzanne

### Introduction to System F. Lecture 18 CS 565 4/20/09

Introduction to System F Lecture 18 CS 565 4/20/09 The Limitations of F 1 (simply-typed λ- calculus) In F 1 each function works exactly for one type Example: the identity function id = λx:τ. x : τ τ We

### CSC324- TUTORIAL 5. Shems Saleh* *Some slides inspired by/based on Afsaneh Fazly s slides

CSC324- TUTORIAL 5 ML Shems Saleh* *Some slides inspired by/based on Afsaneh Fazly s slides Assignment 1 2 More questions were added Questions regarding the assignment? Starting ML Who am I? Shems Saleh

### CMSC 330: Organization of Programming Languages. Lambda Calculus Encodings

CMSC 330: Organization of Programming Languages Lambda Calculus Encodings CMSC330 Spring 2018 1 The Power of Lambdas Despite its simplicity, the lambda calculus is quite expressive: it is Turing complete!

### HANDLING NONLOCAL REFERENCES

SYMBOL TABLE A symbol table is a data structure kept by a translator that allows it to keep track of each declared name and its binding. Assume for now that each name is unique within its local scope.

### Informatica 3 Syntax and Semantics

Informatica 3 Syntax and Semantics Marcello Restelli 9/15/07 Laurea in Ingegneria Informatica Politecnico di Milano Introduction Introduction to the concepts of syntax and semantics Binding Variables Routines

### CSc 372. Comparative Programming Languages. 8 : Haskell Function Examples. Department of Computer Science University of Arizona

1/43 CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg Functions over Lists

### Introduction to Objective Caml

Introduction to Objective Caml Stefan Wehr University of Freiburg. October 30, 2006 Motivation Simple Expressions and Types Functions Simple Pattern Matching Compound Datatypes I/O and Compilation Resources

### Why OCaml? Introduction to Objective Caml. Features of OCaml. Applications written in OCaml. Stefan Wehr

Motivation Introduction to Objective Caml Why OCaml? Stefan Wehr University of Freiburg. October 30, 2006 Motivation Simple Expressions and Types I/O and Compilation Resources Convenient encoding of tree

### CS558 Programming Languages

CS558 Programming Languages Fall 2016 Lecture 6a Andrew Tolmach Portland State University 1994-2016 Functional Programming An alternative paradigm to imperative programming First-class functions Emphasis

### Programming Languages Fall 2013

Programming Languages Fall 2013 Lecture 2: types Prof. Liang Huang huang@qc.cs.cuny.edu Recap of Lecture 1 functional programming vs. imperative programming basic Haskell syntax function definition lazy

### Polymorphism. Lecture 19 CS 565 4/17/08

Polymorphism Lecture 19 CS 565 4/17/08 The Limitations of F 1 (simply-typed λ- calculus) In F 1 each function works exactly for one type Example: the identity function id = λx:τ. x : τ τ We need to write

### Side note: Tail Recursion. Begin at the beginning. Side note: Tail Recursion. Base Types. Base Type: int. Base Type: int

Begin at the beginning Epressions (Synta) Compile-time Static Eec-time Dynamic Types Values (Semantics) 1. Programmer enters epression 2. ML checks if epression is well-typed Using a precise set of rules,

### CSE 130: Programming Languages. Polymorphism. Ranjit Jhala UC San Diego

CSE 130: Programming Languages Polymorphism Ranjit Jhala UC San Diego Q: What is the value of res? let f g = let x = 0 in g 2 let x = 100 let h y = x + y let res = f h (a) 0 (b) 2 (c) 100 (d) 102 (e) 12

### Tail Recursion: Factorial. Begin at the beginning. How does it execute? Tail recursion. Tail recursive factorial. Tail recursive factorial

Begin at the beginning Epressions (Synta) Compile-time Static Eec-time Dynamic Types Values (Semantics) 1. Programmer enters epression 2. ML checks if epression is well-typed Using a precise set of rules,

### Software II: Principles of Programming Languages. Why Expressions?

Software II: Principles of Programming Languages Lecture 7 Expressions and Assignment Statements Why Expressions? Expressions are the fundamental means of specifying computations in a programming language

### Programming Languages

CSE 130 : Winter 2009 Programming Languages News PA 2 out, and due Mon 1/26 5pm Lecture 5: Functions and Datatypes t UC San Diego Recap: Environments Phone book Variables = names Values = phone number

### Thanks! Review. Course Goals. General Themes in this Course. There are many programming languages. Teaching Assistants. John Mitchell.

1 CS 242 Thanks! Review John Mitchell Final Exam Wednesday Dec 8 8:30 11:30 AM Gates B01, B03 Teaching Assistants Mike Cammarano TJ Giuli Hendra Tjahayadi Graders Andrew Adams Kenny Lau Vishal Patel and

### CMSC330. Objects, Functional Programming, and lambda calculus

CMSC330 Objects, Functional Programming, and lambda calculus 1 OOP vs. FP Object-oriented programming (OOP) Computation as interactions between objects Objects encapsulate mutable data (state) Accessed

### Scope, Functions, and Storage Management

Scope, Functions, and Storage Management Implementing Functions and Blocks cs3723 1 Simplified Machine Model (Compare To List Abstract Machine) Registers Code Data Program Counter (current instruction)

### Programming Languages

Programming Languages Types CSCI-GA.2110-001 Summer 2011 What is a type? A type consists of a set of values The compiler/interpreter defines a mapping of these values onto the underlying hardware. 2 /

### 02157 Functional Programming Lecture 2: Functions, Basic Types and Tuples

Lecture 2: Functions, Basic Types and Tuples nsen 1 DTU Informatics, Technical University of Denmark Lecture 2: Functions, Basic Types and Tuples MRH 13/09/2012 Outline A further look at functions, including

### Patterns The Essence of Functional Programming

Patterns The Essence of Functional Programming Up to now we have defined functions in a very traditional way: function name + variable name parameters Read Chap 7 In functional programming we can exploit

### Type Checking. Outline. General properties of type systems. Types in programming languages. Notation for type rules.

Outline Type Checking General properties of type systems Types in programming languages Notation for type rules Logical rules of inference Common type rules 2 Static Checking Refers to the compile-time

### 7. Introduction to Denotational Semantics. Oscar Nierstrasz

7. Introduction to Denotational Semantics Oscar Nierstrasz Roadmap > Syntax and Semantics > Semantics of Expressions > Semantics of Assignment > Other Issues References > D. A. Schmidt, Denotational Semantics,

### Type system. Type theory. Haskell type system. EDAN40: Functional Programming Types and Type Classes (revisited)

Type system EDAN40: Functional Programming Types and Type Classes (revisited) Jacek Malec Dept. of Computer Science, Lund University, Sweden April 3rd, 2017 In programming languages, a type system is a

### Recap: ML s Holy Trinity

Recap: ML s Holy Trinity Expressions (Syntax) Exec-time Dynamic Values (Semantics) Compile-time Static Types 1. Programmer enters expression 2. ML checks if expression is well-typed Using a precise set

### Outline. General properties of type systems. Types in programming languages. Notation for type rules. Common type rules. Logical rules of inference

Type Checking Outline General properties of type systems Types in programming languages Notation for type rules Logical rules of inference Common type rules 2 Static Checking Refers to the compile-time

### CSCI-GA Final Exam

CSCI-GA 2110-003 - Final Exam Instructor: Thomas Wies Name: Sample Solution ID: You have 110 minutes time. There are 7 assignments and you can reach 110 points in total. You can solve the exercises directly

### Programming Languages Fall 2014

Programming Languages Fall 2014 Lecture 7: Simple Types and Simply-Typed Lambda Calculus Prof. Liang Huang huang@qc.cs.cuny.edu 1 Types stuck terms? how to fix it? 2 Plan First I For today, we ll go back

### Programming Languages Fall 2013

Programming Languages Fall 2013 Lecture 7: Simple Types and Simply-Typed Lambda Calculus Prof. Liang Huang huang@qc.cs.cuny.edu Types stuck terms? how to fix it? Plan First I For today, we ll go back to

### Fall 2017 Discussion 7: October 25, 2017 Solutions. 1 Introduction. 2 Primitives

CS 6A Scheme Fall 207 Discussion 7: October 25, 207 Solutions Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write

### CSE 307: Principles of Programming Languages

1 / 63 CSE 307: Principles of Programming Languages Syntax R. Sekar Topics 1. Introduction 2. Basics 3. Functions 4. Data Structures 5. Overview 6. OCAML Performance 2 / 63 3 / 63 Section 1 Introduction

### Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus

Types Type checking What is a type? The notion varies from language to language Consensus A set of values A set of operations on those values Classes are one instantiation of the modern notion of type

### CSE 307: Principles of Programming Languages

CSE 307: Principles of Programming Languages Syntax R. Sekar 1 / 63 Topics 1. Introduction 2. Basics 3. Functions 4. Data Structures 5. Overview 6. OCAML Performance 2 / 63 Section 1 Introduction 3 / 63

### Scheme as implemented by Racket

Scheme as implemented by Racket (Simple view:) Racket is a version of Scheme. (Full view:) Racket is a platform for implementing and using many languages, and Scheme is one of those that come out of the

### Writing code that I'm not smart enough to write. A funny thing happened at Lambda Jam

Writing code that I'm not smart enough to write A funny thing happened at Lambda Jam Background "Let s make a lambda calculator" Rúnar Bjarnason Task: write an interpreter for the lambda calculus Lambda

### CIS 500 Software Foundations Fall September 25

CIS 500 Software Foundations Fall 2006 September 25 The Lambda Calculus The lambda-calculus If our previous language of arithmetic expressions was the simplest nontrivial programming language, then the

### CSCE 314 Programming Languages

CSCE 314 Programming Languages Haskell 101 Dr. Hyunyoung Lee 1 Contents 1. Historical Background of Haskell 2. Lazy, Pure, and Functional Language 3. Using ghc and ghci 4. Functions 5. Haskell Scripts

### Harvard School of Engineering and Applied Sciences CS 152: Programming Languages

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Lecture 14 Tuesday, March 24, 2015 1 Parametric polymorphism Polymorph means many forms. Polymorphism is the ability of

### An introduction to C++ template programming

An introduction to C++ template programming Hayo Thielecke University of Birmingham http://www.cs.bham.ac.uk/~hxt March 2015 Templates and parametric polymorphism Template parameters Member functions of

### 22c:111 Programming Language Concepts. Fall Types I

22c:111 Programming Language Concepts Fall 2008 Types I Copyright 2007-08, The McGraw-Hill Company and Cesare Tinelli. These notes were originally developed by Allen Tucker, Robert Noonan and modified

### Data Types (cont.) Subset. subtype in Ada. Powerset. set of in Pascal. implementations. CSE 3302 Programming Languages 10/1/2007

CSE 3302 Programming Languages Data Types (cont.) Chengkai Li Fall 2007 Subset U = { v v satisfies certain conditions and v V} Ada subtype Example 1 type Digit_Type is range 0..9; subtype IntDigit_Type

Advances in Programming Languages Lecture 4: Higher Polymorphism Ian Stark School of Informatics The University of Edinburgh Friday 30 September 2016 Semester 1 Week 2 https://blog.inf.ed.ac.uk/apl16 Topic:

### Scope. Chapter Ten Modern Programming Languages 1

Scope Chapter Ten Modern Programming Languages 1 Reusing Names Scope is trivial if you have a unique name for everything: fun square a = a * a; fun double b = b + b; But in modern languages, we often use