Programowanie funkcyjne Wykład 14. Rachunek λ z typami prostymi

Podobne dokumenty
Teoretyczne Podstawy Języków Programowania Wykład 1. Rachunek zdań

LOGIKA Dedukcja Naturalna

Logika Stosowana. Wykład 2 - Logika modalna Część 2. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

rachunku kombinatorów logiką kom- binatoryczną Zmienne przedmiotowe Podstawienie słabej redukcji kombinatorami

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Logika intuicjonistyczna

Programowanie funkcyjne Wykład 12. Funkcje rekurencyjne i rachunek lambda

Logika matematyczna w informatyce

Logika. Michał Lipnicki. 15 stycznia Zakład Logiki Stosowanej UAM. Michał Lipnicki () Logika 15 stycznia / 37

Struktury formalne, czyli elementy Teorii Modeli

Elementy rachunku lambda. dr hab. inż. Joanna Józefowska, prof. PP 1

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

vf(c) =, vf(ft 1... t n )=vf(t 1 )... vf(t n ).

Logika intuicjonistyczna

Logika. Michał Lipnicki. 18 listopada Zakład Logiki Stosowanej UAM. Michał Lipnicki Logika 18 listopada / 1

Np. Olsztyn leży nad Łyną - zdanie prawdziwe, wartość logiczna 1 4 jest większe od 5 - zdanie fałszywe, wartość logiczna 0

WYKŁAD 7: DEDUKCJA NATURALNA

Jak należy się spodziewać, mamy. Zauważmy jednak, że nie zachodzi równość

III rok kognitywistyki UAM,

Granica i ciągłość funkcji. 1 Granica funkcji rzeczywistej jednej zmiennej rzeczywsitej

Elementy logiki Klasyczny rachunek predykatów

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP

Adam Meissner.

VI. Równania różniczkowe liniowe wyższych rzędów

Logika i teoria typów

O czym będzie ten wykład: Logika i teoria typów. Zbiory i funkcje. Powtórzenie z rachunku lambda. Ekstensjonalność (?) Beztypowy rachunek lambda

1. Wstęp do logiki. Matematyka jest nauką dedukcyjną. Nowe pojęcia definiujemy za pomocą pojęć pierwotnych lub pojęć uprzednio wprowadzonych.

System BCD z κ. Adam Slaski na podstawie wykładów, notatek i uwag Pawła Urzyczyna. Semestr letni 2009/10

Wstęp do Programowania potok funkcyjny

Rachunek zdań. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Teoretyczne Podstawy Języków Programowania Wykład 4. Siła wyrazu rachunku λ

Język rachunku predykatów Formuły rachunku predykatów Formuły spełnialne i prawdziwe Dowody założeniowe. 1 Zmienne x, y, z...

-termami -wyrażeń pre-termami abstrakcją aplikacją zmiennych wolnych zmienną związaną domknięte

ĆWICZENIE 4 KRZ: A B A B A B A A METODA TABLIC ANALITYCZNYCH

LOGIKA I TEORIA ZBIORÓW

Imię i nazwisko:... OBROŃCY PRAWDY

Rachunek lambda, zima

Egzamin z logiki i teorii mnogości, rozwiązania zadań

WYKŁAD 3: METODA AKSJOMATYCZNA

Logiczne podstawy informatyki 1. Wojciech Buszkowski. Zakład Teorii Obliczeń Wydział Matematyki i Informatyki UAM

Granica i ciągłość funkcji. 1 Granica funkcji rzeczywistej jednej zmiennej rzeczywistej

Rekurencyjna przeliczalność

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda

Elementy logiki Klasyczny rachunek zdań. Wojciech Buszkowski Zakład Teorii Obliczeń Wydział Matematyki i Informatyki Uniwersytet im.

Logika rachunek zdań

LOGIKA Klasyczny Rachunek Zdań

Logiki modalne. notatki z seminarium. Piotr Polesiuk

Notatki z Analizy Matematycznej 2. Jacek M. Jędrzejewski

Metody dowodzenia twierdzeń i automatyzacja rozumowań Systemy aksjomatyczne I

Zasady krytycznego myślenia (1)

Definicja: zmiennych zdaniowych spójnikach zdaniowych:

Andrzej Wiśniewski Logika II. Wykład 6. Wprowadzenie do semantyki teoriomodelowej cz.6. Modele i pełność

JEZYKOZNAWSTWO. I NAUKI O INFORMACJI, ROK I Logika Matematyczna: egzamin pisemny 29 czerwca Imię i Nazwisko:...

Metoda Tablic Semantycznych

O pewnych związkach teorii modeli z teorią reprezentacji

R. D. Tennent, The Denotational Semantics of Programming Languages [1976]

Paradygmaty dowodzenia

Wstęp do logiki. Klasyczny Rachunek Zdań II

Wykład 11b. System aksjomatyczny Klasycznego Rachunku Predykatów. Aksjomaty i reguły inferencyjne

Podstawy Sztucznej Inteligencji (PSZT)

Algebrę L = (L, Neg, Alt, Kon, Imp) nazywamy algebrą języka logiki zdań. Jest to algebra o typie

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykłady 7 i 8. Aksjomatyczne ujęcie Klasycznego Rachunku Zdań

Rodzinę F złożoną z podzbiorów zbioru X będziemy nazywali ciałem zbiorów, gdy spełnione są dwa następujące warunki.

7 Twierdzenie Fubiniego

JEZYKOZNAWSTWO. I NAUKI O INFORMACJI, ROK I Logika Matematyczna: egzamin pisemny 18 czerwca Imię i Nazwisko:... I

Logika pragmatyczna dla inżynierów

Wstęp do logiki. Klasyczny Rachunek Zdań III

Ziemia obraca się wokół Księżyca, bo posiadając odpowiednią wiedzę można stwierdzić, czy są prawdziwe, czy fałszywe. Zdaniami nie są wypowiedzi:

Grupy, pierścienie i ciała

Instytut Automatyki i Inżynierii Informatycznej Politechniki Poznańskiej. Adam Meissner. Elementy uczenia maszynowego

Kultura logiczna Wnioskowania dedukcyjne

Podstawowe Pojęcia. Semantyczne KRZ

Wstęp do Programowania potok funkcyjny

Weryfikacja hipotez statystycznych. KG (CC) Statystyka 26 V / 1

Tautologia (wyrażenie uniwersalnie prawdziwe - prawo logiczne)

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Matematyka ETId Elementy logiki

Konsekwencja logiczna

Monoidy wolne. alfabetem. słowem długością słowa monoidem wolnym z alfabetem Twierdzenie 1.

Stosowana Analiza Regresji

Adam Meissner STUCZNA INTELIGENCJA

Zagadnienia podstawowe dotyczące metod formalnych w informatyce

Programowanie funkcjonalne

Elementy logiki Klasyczny rachunek zdań. Wojciech Buszkowski Zakład Teorii Obliczeń Wydział Matematyki i Informatyki Uniwersytet im.

Programowanie funkcjonalne. Wykªad 12

Roger Bacon Def. Def. Def Funktory zdaniotwórcze

Logika pragmatyczna. Logika pragmatyczna. Kontakt: Zaliczenie:

= b i M i [x], gdy charf = p, to a i jest pierwiastkiem wielomianu x n i

Zadania z forcingu. Marcin Kysiak. Semestr zimowy r. ak. 2002/2003

Metoda Monte Carlo. Jerzy Mycielski. grudzien Jerzy Mycielski () Metoda Monte Carlo grudzien / 10

Problem sprawdzania typu dla logiki pierwszego rzędu

Wykład 6. Reguły inferencyjne systemu aksjomatycznego Klasycznego Rachunku Zdań

Matematyczne Podstawy Informatyki

Myślenie w celu zdobycia wiedzy = poznawanie. Myślenie z udziałem rozumu = myślenie racjonalne. Myślenie racjonalne logiczne statystyczne

Uzgadnianie formuł rachunku predykatów

Formalizacja podstawowych pojęć rachunku lambda

Logika Matematyczna (I JiIN UAM)

Gramatyka Kategorialna Języka Polskiego

Transkrypt:

Programowanie funkcyjne Wykład 14. Rachunek λ z typami prostymi Zdzisław Spławski Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 1

Dowody konstruktywne Dedukcja naturalna dla rachunku zdań Rachunek lambda z typami prostymi λ Izomorfizm Curry ego-howarda Rachunek lambda z typami prostymi λ Przykłady dla λ Własności rachunku lambda z typami prostymi Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 2

Materiały do tego wykładu zawierają głównie przykłady. Definicje pojęć, twierdzenia i dowody można znaleźć np. tutaj: H.P.Barendregt, Lambda Calculi with Types, w: S.Abramsky, Dov M. Gabbay, T.S.E. Maibaum, Handbook of Logic in Computer Science, vol. 2, Clarendon Press, Oxford 1992, pp. 117-309, http://www.cs.ru.nl/ henk/papers.html M.Felleisen, M.Flatt, Programming Languages and Lambda Calculi, draft 2006, http://www.cs.utah.edu/plt/publications/pllc.pdf J.R.Hindley, J.P.Seldin, Lambda-Calculus and Combinators, an Introduction, Cambridge University Press, Cambridge 2008 M.H.Sørensen, P.Urzyczyn, Lectures on the Curry-Howard Isomorphism, Elsevier, Amsterdam 2006 P.Urzyczyn, Rachunek lambda, wykład monograficzny, http://www.mimuw.edu.pl/ urzy/lambda/ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 3

Dowody konstruktywne Twierdzenie. Istnieją dwie niewymierne liczby a i b takie, że a b jest wymierne. Dowód. Albo ( 2) 2 jest wymierne i wtedy a = b = 2 albo ( 2) 2 jest niewymierne i wtedy a = ( 2) 2, b = 2. Dowód tego twierdzenie jest oczywiście poprawny w logice klasycznej. Jest to przykład dowodu niekonstruktywnego, ze względu na wykorzystanie reguły wykluczonego środka. Pomimo, że twierdzenie jest dowiedzione i wiadomo, że liczby a i b istnieją, to nie można (na podstawie dowodu) znaleźć pary liczb spełniających warunek określony w twierdzeniu. Konstruktywny dowód tego twierdzenia jest oparty na twierdzeniu Gelfonda Schneidera.Wynika z niego, że liczby a = b = 2 spełniają powyższe twierdzenie. Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 4

Dedukcja naturalna dla rachunku zdań Reguły wnioskowania w notacji sekwentowej I Γ, ϕ ϕ Γ ϕ (W ) Γ, ψ ϕ reguły wprowadzania reguły eliminacji Γ, ϕ ψ Γ ϕ ψ Γ, ϕ ( I) Γ ϕ Γ 1 ϕ ψ Γ 2 ϕ ( E) Γ 1, Γ 2 ψ Γ 1 ϕ Γ 2 ϕ ( E) Γ 1, Γ 2 Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 5

Dedukcja naturalna dla rachunku zdań Reguły wnioskowania w notacji sekwentowej II reguły wprowadzania reguły eliminacji Γ 1 ϕ Γ 2 ψ ( I) Γ 1, Γ 2 ϕ ψ Γ ϕ ψ ( E1 ) Γ ϕ Γ ϕ Γ ϕ ψ ( I 1 ) Γ ϕ ψ ( E2 ) Γ ψ Γ ψ ( I 2 ) Γ ϕ ψ ( I) brak Γ 1 ϕ ψ Γ 2, ϕ ρ Γ 3, ψ ρ ( E) Γ 1, Γ 2, Γ 3 ρ brak Γ ( E) Γ ϕ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 6

Dedukcja naturalna dla rachunku zdań Reguły wnioskowania w notacji sekwentowej III reguły wprowadzania reguły eliminacji Γ 1, ϕ ψ Γ 2, ψ ϕ ( I) Γ 1, Γ 2 ϕ ψ Γ 1 ϕ ψ Γ 2 ϕ ( E1 ) Γ 1, Γ 2 ψ Γ 1 ϕ ψ Γ 2 ψ ( E2 ) Γ 1, Γ 2 ϕ Γ, ϕ (RAA) Γ ϕ dla logiki klasycznej lub Γ ϕ ( ) Γ ϕ lub ϕ ϕ (T ND) (RAA) reductio ad absurdum (reguła sprowadzenia do sprzeczności) (T ND) tertium non datur (reguła wykluczonego środka) ( ) reguła podwójnego zaprzeczenia Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 7

Dedukcja naturalna dla rachunku zdań Reguły wnioskowania w notacji założeniowej I reguły wprowadzania reguły eliminacji ϕ ψ ( I) ϕ ψ ϕ ψ ( E1 ) ϕ ϕ ψ ( E2 ) ψ ϕ ϕ ψ ( I 1 ) ψ ϕ ψ ( I 2 ) ϕ ψ [ϕ] n. ρ ρ [ψ] n. ρ n( E) ( I) brak brak ( E) ϕ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 8

Dedukcja naturalna dla rachunku zdań Reguły wnioskowania w notacji założeniowej II reguły wprowadzania reguły eliminacji [ϕ] n. ψ ϕ ψ [ϕ] n. ϕ n n ( I) ϕ ψ ϕ ( E) ψ ϕ ϕ ( E) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 9

Dedukcja naturalna dla rachunku zdań Reguły wnioskowania w notacji założeniowej III reguły wprowadzania reguły eliminacji [ϕ] n. ψ ϕ ψ [ψ] n. ϕ n( I) ϕ ψ ϕ ( E1) ψ dla logiki klasycznej ϕ ψ ψ ( E2) ϕ [ ϕ] n. lub ϕ ( ) ϕ lub ϕ ϕ ϕ n(raa) (RAA) reductio ad absurdum (reguła sprowadzenia do sprzeczności) (T ND) tertium non datur (reguła wykluczonego środka) ( ) reguła podwójnego zaprzeczenia (T ND) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 10

Dedukcja naturalna dla rachunku zdań Prawo sylogizmu hipotetycznego: (ϕ ψ) (ψ ρ) ϕ ρ Notacja sekwentowa. ϕ ψ ϕ ψ ϕ ϕ ( E) ψ ρ ψ ρ ϕ ψ, ϕ ψ ( E) ψ ρ, ϕ ψ, ϕ ρ ψ ρ, ϕ ψ ϕ ρ ϕ ψ (ψ ρ) ϕ ρ (ϕ ψ) (ψ ρ) ϕ ρ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 11

Dedukcja naturalna dla rachunku zdań Prawo sylogizmu hipotetycznego: (ϕ ψ) (ψ ρ) ϕ ρ Notacja założeniowa. [ϕ ψ] 2 [ϕ] 3 [ψ ρ] 1 ( E) ψ ρ ( E) 3 ϕ ρ 1 (ψ ρ) ϕ ρ 2 (ϕ ψ) (ψ ρ) ϕ ρ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 12

Dedukcja naturalna dla rachunku zdań Prawo importacji: (ϕ ψ ρ) (ϕ ψ ρ) Notacja sekwentowa. p q p q ( E) p q r p q r p q p p q p q ( E) ( E) p q r, p q q r p q q ( E) p q r, p q r p q r p q r (p q r) (p q r) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 13

Dedukcja naturalna dla rachunku zdań Prawo importacji: (ϕ ψ ρ) (ϕ ψ ρ) Notacja założeniowa. [ϕ ψ] 1 [ϕ ψ ρ] 2 ( E) ϕ ( E) ψ ρ ρ ϕ ψ ρ 1 (ϕ ψ ρ) (ϕ ψ ρ) [ϕ ψ] 1 ( E) ψ ( E) 2 Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 14

Rachunek lambda z typami prostymi λ Relacja typizująca Γ M : τ gdzie Γ oznacza kontekst typizujący Γ {x 1 : σ 1,..., x n : σ n } w którym każda zmienna występuje co najwyżej raz. Γ M : τ można czytać w kontekście Γ term M ma typ τ. Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 15

Rachunek lambda z typami prostymi λ Reguły typizacji. Wersja 1: notacja sekwentowa Γ, x : τ x : τ Γ M : τ Γ, x : σ M : τ (W) Γ, x : σ M : τ Γ λx.m : σ τ Γ 1 M : σ τ Γ 2 N : σ ( E) Γ 1, Γ 2 MN : τ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 16

Rachunek lambda z typami prostymi λ Reguły typizacji. Wersja 2: notacja założeniowa reguła wprowadzania reguła eliminacji [x : ϕ]. M : ψ λx.m : ϕ ψ M : ϕ ψ N : ϕ ( E) MN : ψ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 17

Izomorfizm Curry ego-howarda Termin izomorfizm Curry ego-howarda oznacza ścisłą odpowiedniość pomiędzy formułami i typami dowodami i termami (programami) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 18

Izomorfizm Curry ego-howarda Prawo sylogizmu hipotetycznego: (ϕ ψ) (ψ ρ) ϕ ρ g : ϕ ψ g : ϕ ψ x : ϕ x : ϕ ( E) f : ψ ρ f : ψ ρ g : ϕ ψ, x : ϕ gx : ψ ( E) f : ψ ρ, g : ϕ ψ, x : ϕ f(gx) : ρ f : ψ ρ, g : ϕ ψ λx.f(gx) : ϕ ρ g : ϕ ψ λfx.f(gx) : (ψ ρ) ϕ ρ λgfx.f(gx) : (ϕ ψ) (ψ ρ) ϕ ρ Prawo sylogizmu hipotetycznego = składanie funkcji Niech będą dane dwie funkcje f : ψ ρ oraz g : ϕ ψ. Złożenie (f g) : ϕ ρ jest definiowane następująco (patrz wykład 3): (f g)(x) = f(gx) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 19

Izomorfizm Curry ego-howarda f : ϕ ϕ f : ϕ ϕ (W ) f : ϕ ϕ, x : ψ f : ϕ ϕ f : ϕ ϕ λx.f : ψ ϕ ϕ y : ϕ y : ϕ λfx.f : (ϕ ϕ) ψ ϕ ϕ λy.y : ϕ ϕ ( E) (λfx.f)(λy.y) : ψ ϕ ϕ Przedstawione drzewo wywodu nie jest najprostsze. Wykorzystano założenie f : ϕ ϕ. Jednak w prawym poddrzewie rzeczywiście udowodniliśmy ϕ ϕ, wobec tego założenie f : ϕ ϕ właściwie nie było potrzebne. W efekcie otrzymany λ-term zawiera β-redeks. Niżej przedstawiono najkrótszy dowód ψ ϕ ϕ. y : ϕ y : ϕ (W ) x : ψ, y : ϕ y : ϕ x : ψ λy.y : ϕ ϕ λxy.y : ψ ϕ ϕ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 20

Izomorfizm Curry ego-howarda Normalizacja (upraszczanie) dowodów redukcja termów x : σ x : σ D 1, x : σ M : τ D 2 λx.m : σ τ Γ N : σ ( E) Γ, (λx.m)n : τ β D 2 Γ N : σ D 1[x := N] Γ, M[x := N] : τ Bezpośrednio po regule wprowadzania została użyta reguła eliminacji ( E). D Γ M : σ τ x : σ x : σ ( E) Γ, x : σ Mx : τ Γ λx.mx : σ τ Bezpośrednio po regule eliminacji ( E) została użyta reguła wprowadzania. Zakładamy, że x F V (M). η D Γ M : σ τ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 21

Izomorfizm Curry ego-howarda Przykład (bardziej skomplikowany) D= [y : σ τ] [z : σ] ( E) yz : τ [v : τ ξ] [u : τ] ( E) vu : ξ λu.vu : τ ξ [x : σ τ ξ] [z : σ] ( E) λvu.vu : (τ ξ) τ ξ xz : τ ξ ( E) (λvu.vu)(xz) : τ ξ D (λvu.vu)(xz)(yz) : ξ λz.(λvu.vu)(xz)(yz) : σ ξ λyz.(λvu.vu)(xz)(yz) : (σ τ) σ ξ λxyz.(λvu.vu)(xz)(yz) : (σ τ ξ) (σ τ) σ ξ W otrzymanym λ-termie są zawarte dwa redeksy: η-redeks λvu.vu oraz β-redeks (λv.m)(xz). Po redukcji otrzymamy term λxyz.xz(yz). Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 22

Izomorfizm Curry ego-howarda Przykładowy wywód po zastosowaniu η D= [y : σ τ] [z : σ] yz : τ ( E) [v : τ ξ] [x : σ τ ξ] [z : σ] ( E) λv.v : (τ ξ) τ ξ xz : τ ξ ( E) (λv.v)(xz) : τ ξ D (λv.v)(xz)(yz) : ξ λz.(λv.v)(xz)(yz) : σ ξ λyz.(λv.v)(xz)(yz) : (σ τ) σ ξ λxyz.(λv.v)(xz)(yz) : (σ τ ξ) (σ τ) σ ξ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 23

Izomorfizm Curry ego-howarda Przykładowy wywód po zastosowaniu β D= [y : σ τ] [z : σ] yz : τ ( E) [x : σ τ ξ] [z : σ] ( E) xz : τ ξ D ( E) xz(yz) : ξ λz.xz(yz) : σ ξ λyz.xz(yz) : (σ τ) σ ξ λxyz.xz(yz) : (σ τ ξ) (σ τ) σ ξ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 24

Rachunek lambda z typami prostymi λ Relacja typizująca Γ M : τ gdzie Γ oznacza kontekst typizujący Γ {x 1 : σ 1,..., x n : σ n } w którym każda zmienna występuje co najwyżej raz. Γ M : τ można czytać w kontekście Γ term M ma typ τ. Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 25

Rachunek lambda z typami prostymi λ Reguły typizacji. Notacja sekwentowa Γ, x : τ x : τ Γ M : τ Γ, x : σ M : τ (W) Γ, x : σ M : τ Γ λx.m : σ τ Γ 1 M : σ τ Γ 2 N : σ ( E) Γ 1, Γ 2 MN : τ Γ M : ϕ N : ψ ( I) Γ, pair MN : ϕ ψ Γ M : ϕ ψ ( E1 ) Γ fst M : ϕ Γ M : ϕ ψ ( E2 ) Γ snd M : ψ Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 26

Rachunek lambda z typami prostymi λ Reguły typizacji. Notacja sekwentowa Γ M : ϕ Γ inl M : ϕ ψ ( I 1 ) Γ M : ψ Γ inr M : ϕ ψ ( I 2 ) Γ M : ϕ ψ 1, x : ϕ P : ρ 2, x : ψ Q : ρ ( E) Γ, 1, 2 when M(λx.P )(λx.q) : ρ Γ M : Γ absurde M : τ ( E) Γ, x : σ M : ( I) Γ neg λx.m : σ Γ 1 M : σ Γ 2 N : σ ( E) Γ 1, Γ 2 nege MN : Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 27

Rachunek lambda z typami prostymi λ Reguły redukcji dla λ (λx.m)n M[x := N] fst(pair MN) M snd(pair MN) N when(inl M)P Q P M when(inr M)P Q QM nege(neg M)N MN Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 28

Przykłady dla λ Prawo importacji: (ϕ ψ ρ) (ϕ ψ ρ) Notacja sekwentowa. D= x : p q x : p q x : p q snd x : q ( E) x : p q x : p q ( E) f : p q r f : p q r x : p q fst x : p ( E) f : p q r, x : p q f(fst x) : q r D f : p q r, x : p q f(fst x)(snd x) : r f : p q r λx.f(fst x)(snd x) : p q r λf.λx.f(fst x)(snd x) : (p q r) (p q r) Prawo importacji = zwijanie funkcji (patrz wykład 3, funkcja uncurry) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 29

Przykłady dla λ Prawo importacji: (ϕ ψ ρ) ϕ ψ ρ Notacja założeniowa. [x : ϕ ψ] ( E) [f : ϕ ψ ρ] fst x : ϕ [x : ϕ ψ] ( E) ( E) f(fst x) : ψ ρ snd x : ψ ( E) f(fst x)(snd x) : ρ λx.f(fst x)(snd x) : ϕ ψ ρ λfλx.f(fst x)(snd x) : (ϕ ψ ρ) ϕ ψ ρ Prawo importacji = zwijanie funkcji (patrz wykład 3, funkcja uncurry) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 30

Przykłady dla λ Prawo eksportacji: (ϕ ψ ρ) ϕ ψ ρ [x : ϕ] [y : ψ] ( I) [f : ϕ ψ ρ] pair x y : ϕ ψ ( E) f(pair x y) : ρ λy.f(pair x y) : ψ ρ λxy.f(pair x y) : ϕ ψ ρ λfxy.f(pair x y) : (ϕ ψ ρ) ϕ ψ ρ Prawo eksportacji = rozwijanie funkcji (patrz wykład 3, funkcja curry) Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 31

Własności rachunku lambda z typami prostymi Podstawianie. Jeśli Γ, x : σ M : τ oraz Γ N : σ, to Γ M[x := N] : τ. Poprawność redukcji. Jeśli Γ M : τ oraz M βη N, to Γ N : τ. Silna normalizacja. Jeśli Γ M : τ to term M jest silnie normalizowalny. Typ główny (najogólniejszy). Jeśli term M jest typizowalny, to istnieje dla niego typ główny, z którego można otrzymać wszystkie typy tego termu (przez odpowiednie podstawienia za zmienne przebiegające typy). Zdzisław Spławski: Programowanie funkcyjne, Wykład 14. Rachunek λ z typami prostymi 32