Introduction to the λ-Calculus and Functional Programming Languages Arne Kutzner Hanyang University 2015.

Slides:



Advertisements
Similar presentations
Computational Models The exam. Models of computation. –The Turing machine. –The Von Neumann machine. –The calculus. –The predicate calculus. Turing.
Advertisements

Elements of Lambda Calculus Functional Programming Academic Year Alessandro Cimatti
1 Programming Languages (CS 550) Lecture Summary Functional Programming and Operational Semantics for Scheme Jeremy R. Johnson.
Getting started with ML ML is a functional programming language. ML is statically typed: The types of literals, values, expressions and functions in a.
Lambda Calculus and Lisp PZ03J. Lambda Calculus The lambda calculus is a model for functional programming like Turing machines are models for imperative.
ML: a quasi-functional language with strong typing Conventional syntax: - val x = 5; (*user input *) val x = 5: int (*system response*) - fun len lis =
Advanced Formal Methods Lecture 2: Lambda calculus Mads Dam KTH/CSC Course 2D1453, Some material from B. Pierce: TAPL + some from G. Klein, NICTA.
Foundations of Programming Languages: Introduction to Lambda Calculus
0 PROGRAMMING IN HASKELL Chapter 6 - Recursive Functions Most of this should be review for you.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to.
0 PROGRAMMING IN HASKELL Chapter 6 - Recursive Functions.
Chair of Software Engineering 1 Concurrent Object-Oriented Programming Arnaud Bailly, Bertrand Meyer and Volkan Arslan.
7. Fixed Points. © O. Nierstrasz PS — Fixed Points 7.2 Roadmap Overview  Representing Numbers  Recursion and the Fixed-Point Combinator  The typed.
CSC321: Programming Languages14-1 Programming Languages Tucker and Noonan Chapter 14: Functional Programming 14.1 Functions and the Lambda Calculus 14.2.
Comp 205: Comparative Programming Languages Semantics of Functional Languages Term- and Graph-Rewriting The λ-calculus Lecture notes, exercises, etc.,
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Introduction to Functional Programming Notes for CSCE 190 Based on Sebesta,
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
Functional Languages. Why? Referential Transparency Functions as first class objects Higher level of abstraction Potential for parallel execution.
Functional Programming Universitatea Politehnica Bucuresti Adina Magda Florea
10/12/20151 GC16/3C11 Functional Programming Lecture 3 The Lambda Calculus A (slightly) deeper look.
CSE S. Tanimoto Lambda Calculus 1 Lambda Calculus What is the simplest functional language that is still Turing complete? Where do functional languages.
Lambda Calculus History and Syntax. History The lambda calculus is a formal system designed to investigate function definition, function application and.
0 REVIEW OF HASKELL A lightening tour in 45 minutes.
© Kenneth C. Louden, Chapter 11 - Functional Programming, Part III: Theory Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
ISBN Chapter 15 Functional Programming Languages.
1 COMP313A Functional Programming (1). 2 Main Differences with Imperative Languages Say more about what is computed as opposed to how Pure functional.
0 PROGRAMMING IN HASKELL Chapter 7 - Defining Functions, List Comprehensions.
Lesson 4 Typed Arithmetic Typed Lambda Calculus 1/21/02 Chapters 8, 9, 10.
1 ML fun x -> e e 1 e 2 0, 1, 2,..., +, -,... true, false, if e then e else e patterns datatypes exceptions structures functors let f x = e variables These.
Chapter 9: Functional Programming in a Typed Language.
Chapter Fifteen: Functional Programming Languages Lesson 12.
Compiling Functional Programs Mooly Sagiv Chapter 7
© Kenneth C. Louden, Chapter 11 - Functional Programming, Part III: Theory Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
CSE 230 The -Calculus. Background Developed in 1930’s by Alonzo Church Studied in logic and computer science Test bed for procedural and functional PLs.
ISBN Chapter 15 Functional Programming Languages.
-Calculus Kangwon National University 임현승 Programming Languages These slides are based on the slides by Prof. Sungwoo Park at POSTECH.
Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University
CSE 5317/4305 L12: Higher-Order Functions1 Functional Languages and Higher-Order Functions Leonidas Fegaras.
1 FP Foundations, Scheme In Text: Chapter Chapter 14: FP Foundations, Scheme Mathematical Functions Def: A mathematical function is a mapping of.
CS321 Functional Programming 2 © JAS The λ Calculus This is a formal system to capture the ideas of function abstraction and application introduced.
C H A P T E R E I G H T Functional Programming Programming Languages – Principles and Paradigms by Allen Tucker, Robert Noonan.
6/21/20161 Programming Languages and Compilers (CS 421) Reza Zamani Based in part on slides by Mattox Beckman,
Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. L03-1 September 14, 2006http:// -calculus: A Basis for.
COMP 412, FALL Type Systems C OMP 412 Rice University Houston, Texas Fall 2000 Copyright 2000, Robert Cartwright, all rights reserved. Students.
1 PROGRAMMING IN HASKELL An Introduction Based on lecture notes by Graham Hutton The book “Learn You a Haskell for Great Good” (and a few other sources)
Functional Programming
Introduction to the λ-Calculus and Functional Programming Languages
CS 550 Programming Languages Jeremy Johnson
Unit – 3 :LAMBDA CALCULUS AND FUNCTIONAL PROGRAMMING
Lambda Calculus CSE 340 – Principles of Programming Languages
A lightening tour in 45 minutes
More on Lambda Calculus
CS 611: Lecture 9 More Lambda Calculus: Recursion, Scope, and Substitution September 17, 1999 Cornell University Computer Science Department Andrew Myers.
September 4, 1997 Programming Languages (CS 550) Lecture 6 Summary Operational Semantics of Scheme using Substitution Jeremy R. Johnson TexPoint fonts.
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
Lesson 4 Typed Arithmetic Typed Lambda Calculus
FP Foundations, Scheme In Text: Chapter 14.
Functional Programming Languages
Announcements Quiz 6 HW7 due Tuesday, October 30
PROGRAMMING IN HASKELL
Announcements Exam 2 on Friday, November 2nd Topics
L Calculus.
CSE 3302 Programming Languages
CSCE 314: Programming Languages Dr. Dylan Shell
CSE S. Tanimoto Lambda Calculus
Programming Languages
Presentation transcript:

Introduction to the λ-Calculus and Functional Programming Languages Arne Kutzner Hanyang University 2015

Functional Programming2 Material / Literature λ-Calculus: 1.Peter Selinger Lecture Notes on the Lambda Calculus More descriptive than the text from Barendregt and Barendsen 2.Henk Barendregt and Erik Barendsen Introduction to Lambda Calculus ftp://ftp.cs.ru.nl/pub/CompMath.Found/lambda.pdf This text is quite theoretical and few descriptive. However, short and concise ftp://ftp.cs.ru.nl/pub/CompMath.Found/lambda.pdf Remark: The notation used in both texts is slightly different. In the slides we follow the notion of (2.)

Functional Programming3 Set of λ-Terms (Syntax) Let be an infinite set of variables. The set of λ-terms  is defined as follows

Functional Programming4 Associativity It is possible to leave out “unnecessary” parentheses There is the following simplification (rule for left associativity): –M 1 M 2 M 3 ≡ ((M 1 M 2 )M 3 ) –Example: (λx.xxy)(λz.zxxx) ≡ (λx.(xx)y)(λz.((zx)x)x)

Functional Programming5 Free and bound Variables The set of free variables of M, notation FV(M), is defined inductively as follows: A variable in M is bound if it is not free. Note that a variable is bound if it occurs under the scope of a λ.

Functional Programming6 Substitution The result of substituting N for the free occurrences of x in M, notation M[x := N], is defined as follows: y ≠ x

Functional Programming7 Substitution (cont.) In the case the substitution process does not continue inside M 1 –x represents a bound variable inside M 1 Example: ((λx.xy)x(λz.z))[x:=(λa.a)] ≡((λx.xy)(λa.a)(λz.z)) freebound

Functional Programming8 Combinators M is a closed λ-term (or combinator) if FV(M) = . Examples for combinators:

Functional Programming9  -Reduction The binary relations →  on  is defined inductively as follows: Context

Functional Programming10 Extensions of  -Reduction Relation : sequence of reductions equality of terms

Functional Programming11 Informal Understanding of the three Relations →  single step of program execution / execution of a single “operation” execution of a sequence of “operations” equality of “programs” –So, in the pure lambda-calculus we have an understanding of what programs are equal

Functional Programming12 Definitions A  -redex is a term of the form (λx.M)N. “Pronunciations”:

Functional Programming13 Examples (1) (λx.xxy)(λz.z) →  (λz.z)(λz.z)y (λx.(xx)y)(λz.z) y (λx.xxy)(λz.z) (λx.xxy)((λz.z)(λz.z))

Functional Programming14 Examples (2) Definitions: Lemma: Proof:

Functional Programming15  -normal form A λ-term M is a  -normal form (  -nf) if it does not have a  -redex as subexpression. A λ-term M has a  -normal form if M =  N and N is a  -nf, for some N. Examples: –The terms λz.zyy, λz.zy(λx.x) are in  -normal form. –The term Ω has no  -normal form. Intuition:  -normal form means that the “computation” for some λ-term reached an endpoint

Functional Programming16 Properties of the  -Reduction Church-Rosser Theorem. If M N 1, M N 2, then for some N 3 one has N 1 N 3 and N 2 N 3. As diagram:

Functional Programming17 Application of Church-Rosser Theorem Lemma: If M =  N, then there is an L such that M L and N L. Proof: Church-Rosser L

Functional Programming18 Significant Property Normalization Theorem: If M has a  -normal form, then iterated reduction of the leftmost redex leads to that normal form. This fact can be used to find the normal form of a term, or to prove that a certain term has no normal form. –Slide before -> You can find a term L in  - normal form (only if it exists !!) by repeatedly reducing the leftmost redex

Functional Programming19 Term without  -normal form KΩI has an infinite leftmost reduction path, Terms without  -normal form represent non-terminating computations

Functional Programming20 Fixedpoint Combinators Where are the loops in the λ-Calculus? Answer: For this purpose there are Fixedpoint Combinators Turing's fixedpoint combinator Θ:

Functional Programming21 Turing’s Fixedpoint Combinator Lemma: For all F  one has ΘF F(ΘF) Proof:

Functional Programming22 Church Numerals For each natural number n, we define a lambda term, called the nth Church numeral, as = λfx.f n x. Examples:

Functional Programming23 Church-Numerals and Arithmetic Operations We can represent arithmetic operations for Church-Numerals. Examples: –succ := λnfx.f(nfx) –pred := λnfx.n (λgh.h (g f)) (λu.x) (λu.u) –add := λnmf x.nf(mfx) –mult := λnmf.n(mf)

Functional Programming24 Boolean Values The Boolean values true and false can be defined as follows: –(true) T = λxy.x –(false) F = λxy.y Like arithmetic operations we can define all Boolean operators. Example: –and := λab.abF –xor := λab.a(bFT)b

Functional Programming25 Branching / if-then-else We define: if_then_else = λx.x We have:

Functional Programming26 Check for zero We want to define a term that behaves as follows: –iszero (0) = true –iszero (n) = false, if n ≠ 0 Solution: iszero = λnxy.n(λz.y)x

Functional Programming27 Recursive Definitions and Fixedpoints Recursive definition of factorial function Step 1: Rewrite to: Step 2: Rewrite to: Step 3: Simplify fact = F fact = F

Functional Programming28 Recursive Definitions and Fixedpoints (cont.) By using  -equivalence and the Fixedpoint combinator Θ we get: Explanation:

Functional Programming29 Example Computation

Functional Programming30 Functional Programming Languages In a λ-term can be more than one redex. Therefore different reduction strategies are possible: 1.Eager (or strict) evaluating languages –Call-by-value evaluation: all arguments of some function are first reduced to normal form before touching the function itself –Example Languages: Lisp, Scheme, ML 2.Lazy evaluating languages –Call-by-need evaluation: leftmost redex reduction Strategy + Sharing –Language Example: Haskell

Functional Programming31 Haskell / Literature Tutorial: Hal Daum´e III Yet Another Haskell Tutorial Haskell Interpreter (for exercising): Hugs / Download link:

Functional Programming32 Concepts of Functional Programming Languages Lists, list constructor Pattern-Matching Recursive Function Definitions Let bindings n-Tuples Polymorphism Type-Inference Input-Output

Functional Programming33 Lists / List Constructors Lists are an central concept in Haskell Syntax for lists in Haskell [element 1, element 2, …, element n ] Example: [1, 3, 5, 7] [] denotes the empty list Constructor for appending one element at the front: ‘:’ Example: 4:5:6:[] is equal to [4, 5, 6]

Functional Programming34 Function Definition and Pattern Matching Example f xs = case xs of y:ys -> y:y:ys [] -> [] –Example: f [1, 5, 6] = [1, 1, 5, 6] function name function argument we check whether the decomposition into a head element (a) and a tail (as) works we return a list consisting of 2 times the head document followed by the tail as we map the empty list to the empty list

Functional Programming35 Polymorphic Functions The function f is polymorph: –xs and ys have the type “list of type T” –y has the type “single element of type T” where T is some type variable. –This form of polymorphism is similar to templates in C++ Examples: f["A","B","B"]=["A", "A","B","B"] f[5.6, 2.3] = [5.6, 5.6, 2.3]

Functional Programming36 Lambdas … The function from two slides before, but now using a lambda: f = \xs -> case xs of y:ys -> y:y:ys [] -> [] equal to λxs. …

Functional Programming37 Recursive Function Definitions f xs = case xs of y:ys -> y:y:(f ys) [] -> [] Example: f [9, 5] = [9, 9, 5, 5] recursive definition

Functional Programming38 Higher Order Functions The map function - popular recursive function: map f xs = case xs of y:ys -> (f y):(map f ys) [] -> [] square x = x * x Example –map square [4,5] = [16, 25] –map (\f -> f 3 3) [(+), (*), (-)] = [6, 9, 0] We deliver a function as argument to a function (clearly no problem in the context of the λ - calculus) List of arithmetic functions

Functional Programming39 n-Tuples List are sequences of elements of identical type. What if we want to couple elements of different types? Solution: tuples. Syntax for n-tuples: (element 1, element 2, …, element n ) Examples: –(1, "Monday") –(1, (3, 4), 'a') –([3, 5, 7], ([5, 2], [8, 9]))

Functional Programming40 List Comprehensions For the convenient construction of list Haskell knows list comprehensions: Examples: [x | x <- xs, mod x 2 == 0] Interpretation: Take all elements of xs as x and apply the predicate mod x 2 == 0. Construct a list consisting of all elements x for which the predicate is true. [(x, y) | x <- xs, y <- ys] Interpretation: Construct a list of tuples so that the resulting list represents the “cross product” of the elements of xs and ys

Functional Programming41 Quicksort in Haskell (using list comprehensions) Possible implementation of Quicksort sort [] = [] sort (x:xs) = sort [s | s x] list concatenation pattern matching like in a case-clause pivot element

Functional Programming42 Lazy Evaluation Given the following two function definitions f x = x:(f (x + 1)) head ys = case ys of x:xs -> x Does the following code terminate? head (f 0) And if yes, then why? Delivers an infinite list!!!

Functional Programming43 Type Inference So far we never had to specify any types of functions as e.g. in C++, C or Java. Haskell uses type inference in order to determine the type of functions automatically –Similar but simpler concept appears in C++0x Description of the foundations of type inference + inference algorithm: Peter Selinger Lecture Notes on the Lambda Calculus Chapter 9 – Type Inference

Functional Programming44 I/O in Haskell Problematic point, because Haskell intends to preserve referential transparency. –An expression is said to be referentially transparent if it can be replaced with its value without changing the program. –Referential transparency requires the same results for a given set of arguments at any point in time. I/O in Haskell is coupled with the type system –It is called monadic I/O

Functional Programming45 I/O in Haskell (cont.) I/O requires do -notation. Example: import IO main = do putStrLn "Input an integer:" s <- getLine putStr "Your value + 5 is " putStrLn (show ((read s) + 5)) the do construct forces serialization