equationeel programmeren 2015 01 05 college 1



Vergelijkbare documenten
start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

1 Inleiding in Functioneel Programmeren

College Introductie

zijn er natuurlijke getallen x,y,z > 0 zodat 4xyz = n(xy + yz + zx)? (1)

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

Haskell: programmeren in een luie, puur functionele taal

Introductie tot de cursus

FP-theorie. 2IA50, Deel B. Inductieve definities 1/19. / department of mathematics and computer science

Verzamelingen, Lijsten, Functioneel Programmeren

Termherschrijven. Jan van Eijck CWI. Achtergrondcollege Software Evolution, 22 september 2005

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

FUNCTIONEEL PROGRAMMEREN WEEK 1

Automaten & Complexiteit (X )

Termherschrijfsystemen en Propositie-Algebra

kalenderrekenen Jaap Top

2IA05 Functioneel Programmeren

Geavanceerde Programmeertechnologie. Prof. dr. Kris Luyten Jo Vermeulen

Talen & Automaten. Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie 9 mei 2008

Automaten en Berekenbaarheid

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Helden van de wiskunde: L.E.J. Brouwer Brouwers visie vanuit een logica-informatica perspectief

2IA05 Functioneel Programmeren

Gödels Onvolledigheidsstellingen

Getallensystemen, verzamelingen en relaties

4051CALC1Y Calculus 1

Honours projecten BSc Informatica: twee voorstellen

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Reguliere Expressies

Logica voor Informatica

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Opgaven λ-calculus. Erik Barendsen voorjaar 2002

College Notatie, Recursie, Lijsten

Tentamen Grondslagen van de Wiskunde B met uitwerkingen

Modelleren en Programmeren

Waarmaken van Leibniz s droom

Wat? Betekenis 2: lambda-abstractie. Boek. Overzicht van dit college. Anna Chernilovskaya. 7 juni 2011

Functies (een korte inleiding)

Fundamentele. Informatica 1. Rechenmaschine (1623) von Wilhelm Schickard ( ), gebaut für seinen Freund Johannes Kepler

Fundamentele. Informatica 1. Rechenmaschine (1623) von Wilhelm Schickard ( ), gebaut für seinen Freund Johannes Kepler

Inleiding Programmeren 2

Fundamentele. Informatica 1. Eerste college: introductie

Fundamentele. Informatica 1. Eerste college: -introductie -verzamelingen I

Tegenvoorbeeld. TI1300: Redeneren en Logica. De truc van Gauss. Carl Friedrich Gauss, 7 jaar oud (omstreeks 1785)

Geef niet alleen antwoorden, maar bewijs al je beweringen.

Semantiek (2IT40) Jos Baeten. Formele Methoden. HG 7.19 tel.: Hoorcollege 1 (29 maart 2007)

Inleiding tot Func.oneel Programmeren les 3

Functies deel 1. Vijfde college

Tentamen Grondslagen van de Wiskunde A Met beknopte uitwerking

Examen G0U13 Bewijzen en Redeneren Bachelor 1ste fase Wiskunde. vrijdag 31 januari 2014, 8:30 12:30. Auditorium L.00.07

Termherschrijven. Jan van Eijck CWI. Achtergrondcollege Software Evolution, 22 september Samenvatting

Inhoud. Introductie tot de cursus

TI1300: Redeneren en Logica. TI1300 Redeneren en Logica College 1: Inleiding en Bewijstechnieken. Blackboard: enroll!

onderwijs O Nation. Feestdag Opening Academisch Jaar Toetsing T Feestdag UvA+VU Herkansing VU Herkansing H UvA Geen onderwijs of toetsing V

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3

Studiewijzer. Bachelor Informatica. Inleiding Programmeren Studiejaar en semester: jaar 1, semester 1 (blok 1)

I.3 Functies. I.3.2 Voorbeeld. De afbeeldingen f: R R, x x 2 en g: R R, x x 2 zijn dus gelijk, ook al zijn ze gegeven door verschillende formules.

Introductie tot de cursus

Recursie en inductie i

Module Limieten van de berekenbaarheid : antwoorden

Honours projecten BSc Informatica: twee voorstellen

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

EEN ONLINE PROGRAMMA VOOR HET DIGITAAL AANBIEDEN VAN WISKUNDE OPGAVEN

Programmeermethoden NA. Week 5: Functies (vervolg)

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Wiskunde Module! Basisprogramma Psychologische Methodenleer! Alexander Ly (en Raoul Grasman)!

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Voortgezette Logica, Week 6

Tentamen in2505-ii Berekenbaarheidstheorie

WI1708TH Analyse 3. College 2 12 februari Challenge the future

Oefenopgaven Grondslagen van de Wiskunde A

Discrete Wiskunde 2WC15, Lente Jan Draisma

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Studiehandleiding. Calculus 2 voor Wiskunde en Natuurkunde november en december 2007

Toelichting bij geselecteerde opdrachten uit Betekenis en Taalstructuur

IN2505 II Berekenbaarheidstheorie. IN2505-II Berekenbaarheidstheorie. Practicum: Inschrijven. Practicum

Logic for Computer Science

Algoritmen abstract bezien

Samenvatting. Belangrijke kanttekeningen

Studiewijzer Algebra 2, 2F

Logisch en Functioneel Programmeren voor Wiskunde D

Functioneel programmeren met Helium

Modulewijzer Tirdat01

KETTINGBREUKEN VAN COMPLEXE GETALLEN MART KELDER

CTB1002 deel 1 - Lineaire algebra 1

rh265e 0 true. In onze schrijfwijze wordt dat dus: (de bewering) [ P ] is even waar als (de bewering) P = true.

3. Bepaal de convergentie-eigenschappen (absoluut convergent, voorwaardelijk convergent, divergent) van de volgende reeksen: n=1. ( 1) n (n + 1)x 2n.

Boot - DEM/DT/BE_MFAO-BOO, Financieel Advies en Ondersteuning - DEM/DL/BE_TS-MFAO, Fiscaal - DEM/DT/BE_MFAO-FIS, Gespreksvaardigheden Gr.1...

equivalentie-relaties

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

WISKUNDE 5 PERIODEN. DATUM : 5 juni 2008 ( s morgens) Niet-programmeerbare, niet-grafische rekenmachine

Inleiding Analyse 2009

Betekenis I: Semantiek

Semantiek 1 college 10. Jan Koster

De partitieformule van Euler

rh276a 0 We breiden nu bovenstaand programmafragment uit door assignments toe te voegen aan een nieuwe variabele m, aldus:

Fundamenten van de Informatica

1. Vectoren in R n. y-as

Transcriptie:

equationeel programmeren 2015 01 05 college 1

schema praktische zaken opmerkingen vooraf lambda termen materiaal

schema praktische zaken opmerkingen vooraf lambda termen materiaal

wie hoorcolleges: Femke van Raamsdonk f.van.raamsdonk at vu.nl T446 werkcolleges en practica: Christian Ouwehand en Roy Overbeek

lessen hoorcolleges: week 2 5 maandag 11.00-12.45 in F654 donderdag 11.00-12.45 in hoofdgebouw 02A06 werkcolleges: week 2 5 dinsdag 11.00-12.45 in hoofdgebouw 04A05 vrijdag 11.00-12.45 in P647 practica: week 2 5 maandag 13.30-17.00 in P323 donderdag 13.30-17.00 in P323 zaalreservering (check welke zaal) voor ma, di, do, vr middag

toetsing 3 (of 4) inleveropgaven programmeren 4 inleveropgaven theorie schriftelijk tentamen vrijdag 30 januari 2015 minimaal 5,5 voor de deelcijfers geldigheid deelcijfers zijn alleen dit jaar (2014-2015) geldig eindcijfer een 30% programmeeropgaven, 70% tentamen, ten hoogste 0,5 bonus voor theorie-opgaven op tentamencijfer

materiaal dictaat, slides, opdrachten webpage van het vak via web extra soms extra materiaal via slides en links (niet voor tentamen)

schema praktische zaken opmerkingen vooraf lambda termen materiaal

equationeel programmeren grondslagen van functioneel programmeren

functioneel programmeren een functioneel programma is een expressie, en wordt uitgevoerd door de expressie te evalueren (gebruik definities van links naar rechts) focus op het wat en minder op het hoe de functies zijn puur (wiskundig) eenzelfde input geeft altijd dezelfde output

voorbeeld in Haskell: sum [1.. 100] in Java: total = 0; for (i = 1; i <= 10; ++i) total = total + i;

functioneel programmeren: eigenschappen hoog abstractieniveau (meer) vertrouwen in correctheid (lezen, checken, correct bewijzen)

Lisp Lisp John McCarthy (1927-2011), Turing Award 1971

ML ML Robin Milner (1934-2010), Turing Award 1991, et al

Haskell Haskell een groep met onder andere Philip Wadler en Simon Peyton Jones

functionele programeertalen getypeerd ongetypeerd strict ML Lisp lazy Haskell

functioneel programmeren en lambda calculus Based on the lambda calculus, Lisp rapidly became... (uit: wikipedia page John McCarthy) Haskell is based on the lambda calculus, hence the lambda we use as a logo. (uit: the Haskell website) Historically, ML stands for metalanguage: it was conceived to develop proof tactics in the LCF theorem prover (whose language, pplambda, a combination of the first-order predicate calculus and the simply typed polymorphic lambda calculus, had ML as its metalanguage). (uit: wikipedia page of ML)

functioneel programmeren en algebraïsche specificaties Programming languages with algebraic data types: Haskell, OCaml (geparafraseerd van wikipedia page van algebraic data type)

andere functionele programmeertalen F# (Microsoft) Erlang (Ericsson) Scala (Java plus ML)

equationeel programmeren lambda calculus algebraïsche specificaties opdrachten functioneel programmeren: Haskell

schema praktische zaken opmerkingen vooraf lambda termen materiaal

lambda calculus bedenker: Alonzo Church (1936) fundament van de wiskunde fundering begrip berekenbaar beperken tot functies basis van functioneel programmeren

notatie voor functies wiskundig: f : nat nat f (x) = square(x) ook wiskundig: f : nat nat f : x square(x) lambda notatie: λx. square x

lambda termen: intuitie abstractie: λx. M is de functie die x afbeeldt op M λx. square x is de functie die x afbeeldt op square x applicatie: F M is de toepassing (niet het resultaat van het toepassen) van de functie F op zijn argument M

lambda termen: inductieve definitie variabele x constante c abstractie (λx. M) applicatie (F M)

termen als bomen: voorbeeld @ @ x λx y x

termen als bomen: algemeen

beroemde termen I = λx. x K = λx. λy. x S = λx. λy. λz. x z (y z) Ω = (λx. x x) (λx. x x)

haakjes (M N P) in plaats van ((M N) P) applicatie is associatief naar links (λx. λy. M) in plaats van (λx. (λy. M)) (λx. M N) in plaats van (λx. (M N)) (M λx. N) in plaats van (M (λx. N))

nog meer notatie-vereenvoudigingen λxy. M in plaats van λx. λy. M meer in het algemeen λx 1... x n. M in plaats van λx 1.... λx n. M

lambda termen: voorbeelden (λxyz. y (x y z)) λvw. v w (λxy. x x y) (λzu. u (u z)) λw. w

inductieve definitie van termen definities met recursie naar de definitie van termen voorbeeld: definitie van vrije variabelen van een term, straks bewijzen met inductie naar de definitie van termen voorbeeld: elke term heeft eindig veel vrije variabelen

lambda notatie van verzameling naar predikaat: karakteristieke functie { true als x S χ S (x) = false als x S van predikaat naar verzameling P(x) = {x P(x) = true} Russell s Paradox R = {x x x} Russell s Paradox in lambda notatie R = λx. (x x) dan R R = β (R R)

getypeerd en ongetypeerd getypeerde lambda-calculus oa om paradoxen te vermijden hier: eerst ongetypeerd, later (simpel) getypeerd Haskell (en ML): getypeerd

termen in Haskell: getypeerd zoals lambda termen maar getypeerd, bijvoorbeeld: sum : natlist nat [1, 2] : natlist sum [1, 2] : nat plus : nat (nat nat) 2 : nat plus 2 : nat nat plus 2 5 : nat 3 : nat

termen in Haskell: meer primitieven zoals lambda termen maar meer primitieven, bijvoorbeeld: 2 + 3 δ 5 let x = s in t

gebonden variabelen: intuitie x in de scope van λx is gebonden voorbeelden: de onderstreepte x is gebonden in λx. x λx. x x (λx. x) x λx. y x

vrije variabelen: definitie notatie: FV(M) voor de verzameling van vrije variabelen in M definitie: FV(x) = {x} FV(c) = FV(λx. M) = FV(M)\{x} FV(F P) = FV(F ) FV(P) een voorkomen van een variabele is gebonden als het niet vrij is

alpha conversie alpha conversie: gebonden variabelen mogen herbenoemd worden voorbeeld: λx. x = α λy. y vergelijk: f : x x 2 is f : y y 2 x. P(x) is y. P(y) identificatie van alpha-equivalente termen we werken met equivalentieklassen modulo α

beta reductie: voorbeelden (λx. x) y β y (λx. x x) y β y y (λx. x z) y β y z (λx. z) y β z

beta reductie regel: definitie (λx. M) N β M[x := N] hier is: x een variabele M een term, en N ook [x := N] de substitutie van N voor x (moet gedefinieerd)

substitutie M[x := N] betekent: vervang in M alle vrije voorkomens van x door N α-conversie wordt gebruikt om te voorkomen dat vrije variabelen in N gevangen worden definitie met inductie naar termopbouw

substitutie: formele definitie x[x := N] = N y[x := N] = y met x y (λy. M 0 )[x := N] = λy. (M 0 [x := N]) met x y en y FV(N) (M 1 M 2 )[x := N] = (M 1 [x := N]) (M 2 [x := N])

beta reductie: definitie een toepassing van de beta-reductie-regel ergens in een term

reductietheorie redex sub-term van de vorm (λx. M) N reductiestap toepassing van beta-reductieregel in term reductierij 0, 1 of meer reductiestappen achter elkaar normaalvorm term waar geen β-reductie mogelijk is oftewel: term zonder redex

δ-reductie voor de voorbeelden gebruiken we soms contanten voor sommige constanten zijn δ-regels redexen: β-redex (λx. M) N δ-redex plus 3 5 reductiestappen: (λx. f x x) y β f y y plus 3 5 δ 8

hoe moet je reduceren? hoe vind je een normaalvorm (als die bestaat)? hoe vind je een oneindige reductierij (als die bestaat)? hoe vind je de kortste reductierij naar normaalvorm? hoe voorkom je het kopiëren van redexen?

schema praktische zaken opmerkingen vooraf lambda termen materiaal

materiaal dictaat hoofdstuk 1 Haskell pagina

extra materiaal paper: Why functional programming matters door John Hughes paper: History of Lambda-calculus and Combinatory Logic door Felice Cardone en J.Roger Hindley