• Nie Znaleziono Wyników

Programowanie funkcyjne Wykład 14. Rachunek

N/A
N/A
Protected

Academic year: 2022

Share "Programowanie funkcyjne Wykład 14. Rachunek"

Copied!
32
0
0

Pełen tekst

(1)

Wykład 14. Rachunek λ z typami prostymi

Zdzisław Spławski

(2)

 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

(3)

I 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

I M.Felleisen, M.Flatt, Programming Languages and Lambda Calculi, draft 2006,

http://www.cs.utah.edu/plt/publications/pllc.pdf

I J.R.Hindley, J.P.Seldin, Lambda-Calculus and Combinators, an Introduction, Cambridge University Press, Cambridge 2008

I M.H.Sørensen, P.Urzyczyn, Lectures on the Curry-Howard Isomorphism, Elsevier, Amsterdam 2006

(4)

Twierdzenie. Istnieją dwie niewymierne liczby a i b takie, że ab 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.

(5)

Reguły wnioskowania w notacji sekwentowej I

(Ass) Γ, ϕ ` ϕ

Γ ` ϕ Γ, ψ ` ϕ (W )

reguły wprowadzania reguły eliminacji Γ, ϕ ` ψ

(→ I) Γ ` ϕ → ψ

Γ1` ϕ → ψ Γ2` ϕ

(→ E) Γ1, Γ2` ψ

Γ, ϕ ` ⊥ Γ ` ¬ϕ (¬I)

Γ1` ¬ϕ Γ2` ϕ Γ1, Γ2` ⊥ (¬E)

(6)

Reguły wnioskowania w notacji sekwentowej II

reguły wprowadzania reguły eliminacji Γ1` ϕ Γ2` ψ

Γ1, Γ2` ϕ ∧ ψ (∧I)

Γ ` ϕ ∧ ψ (∧E1) Γ ` ϕ

Γ ` ϕ ∧ ψ (∧E2) Γ ` ψ

Γ ` ϕ

(∨I1) Γ ` ϕ ∨ ψ

Γ ` ψ

(∨I2) Γ ` ϕ ∨ ψ

Γ1` ϕ ∨ ψ Γ2, ϕ ` ρ Γ3, ψ ` ρ Γ1, Γ2, Γ3` ρ (∨E)

(>I)

` > brak

brak Γ ` ⊥ (⊥E)

Γ ` ϕ

(7)

Reguły wnioskowania w notacji sekwentowej III

reguły wprowadzania reguły eliminacji Γ1, ϕ ` ψ Γ2, ψ ` ϕ

Γ1, Γ2` ϕ ↔ ψ (↔I)

Γ1` ϕ ↔ ψ Γ2` ϕ

(↔E1) Γ1, Γ2` ψ

Γ1` ϕ ↔ ψ Γ2` ψ

(↔E2) Γ1, Γ2` ϕ

dla logiki klasycznej Γ, ¬ϕ ` ⊥

(RAA)

Γ ` ϕ lub Γ ` ¬¬ϕ

Γ ` ϕ (¬¬) lub (T N D)

` ϕ ∨ ¬ϕ (RAA) — reductio ad absurdum (reguła sprowadzenia do sprzeczności)

(8)

Reguły wnioskowania w notacji założeniowej I

reguły wprowadzania reguły eliminacji

ϕ ψ

ϕ ∧ ψ (∧I)

ϕ ∧ ψ

(∧E1) ϕ

ϕ ∧ ψ (∧E2) ψ

ϕ (∨I1) ϕ ∨ ψ

ψ (∨I2)

ϕ ∨ ψ ϕ ∨ ψ

[ϕ]n ... ρ

[ψ]n ... ρ

n(∨E) ρ

(>I)

> brak

brak ϕ (⊥E)

(9)

Reguły wnioskowania w notacji założeniowej II

reguły wprowadzania reguły eliminacji [ϕ]n

... ψ

n(→ I) ϕ → ψ

ϕ → ψ ϕ

(→ E) ψ

[ϕ]n ...

n(¬I)

¬ϕ

¬ϕ ϕ

(¬E)

(10)

Reguły wnioskowania w notacji założeniowej III

reguły wprowadzania reguły eliminacji [ϕ]n

.. . ψ

[ψ]n .. . ϕ

n(↔ I) ϕ ↔ ψ

ϕ ↔ ψ ϕ

(↔ E1) ψ

ϕ ↔ ψ ψ

(↔ E2) ϕ

dla logiki klasycznej [¬ϕ]n

.. .

ϕ n(RAA)

lub ¬¬ϕ

ϕ (¬¬) lub (T N D)

ϕ ∨ ¬ϕ

(RAA) — reductio ad absurdum (reguła sprowadzenia do sprzeczności) (T N D) — tertium non datur (reguła wykluczonego środka)

(¬¬) — reguła podwójnego zaprzeczenia

(11)

Prawo sylogizmu hipotetycznego:

` (ϕ → ψ) → (ψ → ρ) → ϕ → ρ

Notacja sekwentowa.

(Ass)

ψ → ρ ` ψ → ρ

(Ass)

ϕ → ψ ` ϕ → ψ ϕ ` ϕ (Ass)

(→ E)

ϕ → ψ, ϕ ` ψ

(→ E)

ψ → ρ, ϕ → ψ, ϕ ` ρ

(→ I)

ψ → ρ, ϕ → ψ ` ϕ → ρ

(→ I)

ϕ → ψ ` (ψ → ρ) → ϕ → ρ

(→ I)

` (ϕ → ψ) → (ψ → ρ) → ϕ → ρ

(12)

Prawo sylogizmu hipotetycznego:

` (ϕ → ψ) → (ψ → ρ) → ϕ → ρ

Notacja założeniowa.

[ψ → ρ]1

[ϕ → ψ]2 [ϕ]3

(→ E)

ψ (→ E)

ρ

3(→ I)

ϕ → ρ

1(→ I)

(ψ → ρ) → ϕ → ρ

2(→ I)

(ϕ → ψ) → (ψ → ρ) → ϕ → ρ

(13)

Prawo importacji: ` (ϕ → ψ → ρ) → (ϕ ∧ ψ → ρ)

Notacja sekwentowa.

(Ass) p → q → r ` p → q → r

(Ass) p ∧ q ` p ∧ q

p ∧ q ` p (∧E) (→ E) p → q → r, p ∧ q ` q → r

(Ass) p ∧ q ` p ∧ q

p ∧ q ` q (∧E) (→ E) p → q → r, p ∧ q ` r

(→ I) p → q → r ` p ∧ q → r

(→ I)

` (p → q → r) → (p ∧ q → r)

(14)

Prawo importacji: ` (ϕ → ψ → ρ) → (ϕ ∧ ψ → ρ)

Notacja założeniowa.

[ϕ → ψ → ρ]2

[ϕ ∧ ψ]1 ϕ (∧E)

(→ E)

ψ → ρ

[ϕ ∧ ψ]1 ψ (∧E)

(→ E)

ρ

1(→ I)

ϕ ∧ ψ → ρ

2(→ I)

(ϕ → ψ → ρ) → (ϕ ∧ ψ → ρ)

(15)

Relacja typizująca

Γ ` M : τ gdzie Γ oznacza kontekst typizujący

Γ ≡ {x1 : σ1, . . . , xn: σn}

w którym każda zmienna występuje co najwyżej raz.

Γ ` M : τ można czytać “w kontekście Γ term M ma typ τ ”.

(16)

Reguły typizacji. Wersja 1: notacja sekwentowa

(Ass)

Γ, x : τ ` x : τ Γ ` M : τ (W) Γ, x : σ ` M : τ Γ, x : σ ` M : τ

(→ I)

Γ ` λx.M : σ → τ Γ1 ` M : σ → τ Γ2 ` N : σ

(→ E)

Γ1, Γ2 ` M N : τ

(17)

Reguły typizacji. Wersja 2: notacja założeniowa

reguła wprowadzania reguła eliminacji [x : ϕ]

... M : ψ

(→ I) λx.M : ϕ → ψ

M : ϕ → ψ N : ϕ

(→ E) M N : ψ

(18)

Termin “izomorfizm Curry’ego-Howarda” oznacza ścisłą odpowiedniość pomiędzy

I formułami i typami

I dowodami i termami (programami)

(19)

Prawo sylogizmu hipotetycznego:

` (ϕ → ψ) → (ψ → ρ) → ϕ → ρ

(Ass) f : ψ → ρ ` f : ψ → ρ

(Ass)

g : ϕ → ψ ` g : ϕ → ψ (Ass)

x : ϕ ` x : ϕ (→ E) g : ϕ → ψ, x : ϕ ` gx : ψ

(→ E) f : ψ → ρ, g : ϕ → ψ, x : ϕ ` f (gx) : ρ

(→ I) f : ψ → ρ, g : ϕ → ψ ` λx.f (gx) : ϕ → ρ

(→ I) g : ϕ → ψ ` λf x.f (gx) : (ψ → ρ) → ϕ → ρ

(→ I)

` λgf x.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)

(20)

(Ass)

f : ϕ → ϕ ` f : ϕ → ϕ f : ϕ → ϕ, x : ψ ` f : ϕ → ϕ (W )

(→ I)

f : ϕ → ϕ ` λx.f : ψ → ϕ → ϕ

(→ I)

` λf x.f : (ϕ → ϕ) → ψ → ϕ → ϕ

(Ass)

y : ϕ ` y : ϕ

(→ I)

` λy.y : ϕ → ϕ

(→ E)

` (λf x.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 ψ → ϕ → ϕ.

(Ass)

y : ϕ ` y : ϕ x : ψ, y : ϕ ` y : ϕ (W )

(→ I)

x : ψ ` λy.y : ϕ → ϕ

(→ I)

` λxy.y : ψ → ϕ → ϕ

(21)

Normalizacja (upraszczanie) dowodów ≈ redukcja termów

(Ass) x : σ ` x : σ

D1

∆, x : σ ` M : τ

(→ I)

∆ ` λx.M : σ → τ

D2

Γ ` N : σ (→ E) Γ, ∆ ` (λx.M )N : τ

β

D2

Γ ` N : σ D1[x := N ] Γ, ∆ ` M [x := N ] : τ

Bezpośrednio po regule wprowadzania (→ I) została użyta reguła eliminacji (→ E).

D

Γ ` M : σ → τ x : σ ` x : σ (Ass)(→ E) Γ, x : σ ` M x : τ

(→ I)

Γ ` λx.M x : σ → τ

η D

Γ ` M : σ → τ Bezpośrednio po regule eliminacji (→ E)

(22)

Przykład (bardziej skomplikowany) D= [y : σ → τ] [z : σ]

(→ E)

yz : τ

[v : τ → ξ] [u : τ ] (→ E) vu : ξ

(→ I) λu.vu : τ → ξ

(→ I) λvu.vu : (τ → ξ) → τ → ξ

[x : σ → τ → ξ] [z : σ]

(→ E) xz : τ → ξ

(→ E)

(λvu.vu)(xz) : τ → ξ D

(λvu.vu)(xz)(yz) : ξ

(→ I) λz.(λvu.vu)(xz)(yz) : σ → ξ

(→ I) λ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).

(23)

Przykładowy wywód po zastosowaniu →η

D= [y : σ → τ] [z : σ]

(→ E)

yz : τ

[v : τ → ξ]

(→ I) λv.v : (τ → ξ) → τ → ξ

[x : σ → τ → ξ] [z : σ]

(→ E) xz : τ → ξ

(→ E)

(λv.v)(xz) : τ → ξ D

(λv.v)(xz)(yz) : ξ

(→ I) λz.(λv.v)(xz)(yz) : σ → ξ

(→ I) λyz.(λv.v)(xz)(yz) : (σ → τ ) → σ → ξ

λxyz.(λv.v)(xz)(yz) : (σ → τ → ξ) → (σ → τ ) → σ → ξ

(24)

Przykładowy wywód po zastosowaniu →β

D= [y : σ → τ] [z : σ]

(→ E)

yz : τ

[x : σ → τ → ξ] [z : σ]

(→ E)

xz : τ → ξ D

(→ E)

xz(yz) : ξ

(→ I)

λz.xz(yz) : σ → ξ

(→ I)

λyz.xz(yz) : (σ → τ ) → σ → ξ

λxyz.xz(yz) : (σ → τ → ξ) → (σ → τ ) → σ → ξ

(25)

Relacja typizująca

Γ ` M : τ gdzie Γ oznacza kontekst typizujący

Γ ≡ {x1 : σ1, . . . , xn: σn}

w którym każda zmienna występuje co najwyżej raz.

Γ ` M : τ można czytać “w kontekście Γ term M ma typ τ ”.

(26)

Reguły typizacji. Notacja sekwentowa

(Ass)

Γ, x : τ ` x : τ Γ ` M : τ (W) Γ, x : σ ` M : τ Γ, x : σ ` M : τ

(→ I)

Γ ` λx.M : σ → τ Γ1 ` M : σ → τ Γ2 ` N : σ

(→ E)

Γ1, Γ2 ` M N : τ Γ ` M : ϕ ∆ ` N : ψ

Γ, ∆ ` pair M N : ϕ ∧ ψ (∧I)

Γ ` M : ϕ ∧ ψ

(∧E1)

Γ ` fst M : ϕ

Γ ` M : ϕ ∧ ψ

(∧E2)

Γ ` snd M : ψ

(27)

Reguły typizacji. Notacja sekwentowa

Γ ` M : ϕ

(∨I1)

Γ ` inl M : ϕ ∨ ψ

Γ ` M : ψ

(∨I2)

Γ ` inr M : ϕ ∨ ψ Γ ` M : ϕ ∨ ψ ∆1, x : ϕ ` P : ρ ∆2, x : ψ ` Q : ρ

Γ, ∆1, ∆2 ` when M (λx.P )(λx.Q) : ρ (∨E)

Γ ` M : ⊥ (⊥E) Γ ` absurdE M : τ

Γ, x : σ ` M : ⊥ Γ ` neg λx.M : ¬σ (¬I)

Γ1 ` M : ¬σ Γ2 ` N : σ

(28)

Reguły redukcji dla λ

→∧∨⊥¬

I (λx.M )N → M [x := N ]

I fst(pair M N ) → M

I snd(pair M N ) → N

I when(inl M )P Q → P M

I when(inr M )P Q → QM

I negE(neg M )N → M N

(29)

Prawo importacji: ` (ϕ → ψ → ρ) → (ϕ ∧ ψ → ρ)

Notacja sekwentowa.

D= x : p ∧ q ` x : p ∧ q (Ass) x : p ∧ q ` snd x : q (∧E)

(Ass)

f : p → q → r ` f : p → q → r

(Ass)

x : p ∧ q ` x : p ∧ q x : p ∧ q ` fst x : p (∧E)

(→ 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

(→ I)

f : p → q → r ` λx.f (fst x)(snd x) : p ∧ q → r

(→ I)

` λf.λx.f (fst x)(snd x) : (p → q → r) → (p ∧ q → r)

(30)

Prawo importacji: ` (ϕ → ψ → ρ) → ϕ ∧ ψ → ρ

Notacja założeniowa.

[f : ϕ → ψ → ρ]

[x : ϕ ∧ ψ]

fst x : ϕ (∧E) (→ E)

f (fst x) : ψ → ρ

[x : ϕ ∧ ψ]

snd x : ψ (∧E) (→ E)

f (fst x)(snd x) : ρ

(→ I)

λx.f (fst x)(snd x) : ϕ ∧ ψ → ρ

(→ I)

λf λx.f (fst x)(snd x) : (ϕ → ψ → ρ) → ϕ ∧ ψ → ρ Prawo importacji = zwijanie funkcji

(patrz wykład 3, funkcja uncurry)

(31)

Prawo eksportacji: ` (ϕ ∧ ψ → ρ) → ϕ → ψ → ρ

[f : ϕ ∧ ψ → ρ]

[x : ϕ] [y : ψ]

pair x y : ϕ ∧ ψ (∧I) (→ E)

f (pair x y) : ρ

(→ I)

λy.f (pair x y) : ψ → ρ

(→ I)

λxy.f (pair x y) : ϕ → ψ → ρ

(→ I)

λf xy.f (pair x y) : (ϕ ∧ ψ → ρ) → ϕ → ψ → ρ Prawo eksportacji = rozwijanie funkcji

(patrz wykład 3, funkcja curry)

(32)

I Podstawianie. Jeśli Γ, x : σ ` M : τ oraz Γ ` N : σ, to Γ ` M [x := N ] : τ .

I Poprawność redukcji. Jeśli Γ ` M : τ oraz M βη N , to Γ ` N : τ .

I Silna normalizacja. Jeśli Γ ` M : τ to term M jest silnie normalizowalny.

I 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).

Cytaty

Powiązane dokumenty

Zatem łączną liczbę trójkątów speł- niających warunki zadania uzyskamy, mnożąc 49 przez 99 i odejmując od wyniku podwojoną liczbę trójkątów równobocznych,

Instytut Matematyczny UWr www.math.uni.wroc.pl/∼jwr/BO2020 III LO we

W dowolnym n-wyrazowym postępie arytmetycznym o sumie wyrazów równej n, k-ty wyraz jest równy 1.. Dla podanego n wskazać takie k, aby powyższe zdanie

Wykaż, korzystając z definicji granicy ciągu, że... Jakie są granice

Z twierdzenia 1.1 wynika, że q jest dzielnikiem liczby −1, więc jest równe ±1, a to oznacza, że liczba x jest całkowita. Zaznaczyć wypada, że to czy jakaś liczba jest

Można się spodziewać, że po przeczytaniu tego opracowania wielu badaczy, którzy do tej pory traktowali zjawisko nowej duchowości jako mało znaczące, przekona się o potrzebie

[r]

Brak błysków I typu dla kandydatów na czarne dziury w SXT jest istotną wska- zówką przy badaniu natury zwartych obiektów. Jeśli obiekt posiada powierzchnię, to powinien