Системы типизации лямбда-исчисления, весна 2011:...

39
Системы типизации лямбда-исчисления Лекция 9. Лямбда-куб Барендрегта Денис Москвин 15.05.2011 CS Club при ПОМИ РАН 1

Upload: cs-center

Post on 12-Feb-2017

185 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Системы типизации лямбда-исчисления

Лекция 9. Лямбда-куб Барендрегта

Денис Москвин

15.05.2011

CS Club при ПОМИ РАН

1

Page 2: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Лямбда-куб Барендрегта

-

6

-

6

-

6

-

6

�����

�����

�����

�����

λ→

λ2

λP

λP2

λω

λω

λPω

λPω

Стрелки задают отношение включения (⊆).

2

Page 3: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Зависимости

I Терм от терма PQ (система λ→ или STT)λx :σ. F[x] : σ→τ — функция, отображающая терм M :σ в термF[x :=M] : τ.I Терм от типа P ρ (система λ2 или System F)Λα :∗. F[α] : ∀α.σ[α] — функция, отображающая тип τ :∗ в термF[α := τ] : σ[α := τ].

Возможны и зависимости со значениями в «царстве типов»:I Тип от типа ϕρ (λω — операторы над типами)λα :∗.σ[α] : ∗→∗ — функция, отображающая тип τ : ∗ в типσ[α := τ] : ∗.I Тип от терма ϕQ (λP — зависимые типы, семейства типов)λx :σ. τ[x] : σ→∗ — функция, отображающая терм M : σ в типτ[x :=M] : ∗.

3

Page 4: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λω: предварительные замечания (1)

Pair σ τ ≡ ∀α. (σ→τ→α)→α

σ :∗, τ :∗ ` PAIR : σ→τ→Pair σ τ

PAIR ≡ λaσ bτ.Λα. λ fσ→τ→α. f a bПолиморфизм по α позволяет итерировать универсально:

UNCURRY : (σ→τ→ρ)→Pair στ→ρ

UNCURRY ≡ λfσ→τ→ρ pPair στ.pρ f∀ для σ и τ даст лишь лишнюю упаковку/распаковку терма:

Pair2 ≡ ∀στα. (σ→τ→α)→α

PAIR2 Nat Bool 3 TRUE : Pair2[σ := Nat][τ := Bool]

PAIR2 Nat Bool 3 TRUE ≡ (Λστ. λaσ bτ.Λα. λ fσ→τ→α. f a b)Nat Bool 3 TRUE

4

Page 5: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λω: предварительные замечания (2)

Идея: разрешить абстракцию на уровне типов

Pair ≡ λσ :∗. λτ :∗. ∀α. (σ→τ→α)→α

аппликацию типа к типу и редукцию над типами

Pair Nat ≡ (λσ :∗. λτ :∗. ∀α. (σ→τ→α)→α) Nat→β λτ :∗. ∀α. (Nat→τ→α)→α

(Pair Nat) Bool ≡ (λτ :∗. ∀α. (Nat→τ→α)→α) Bool→β ∀α. (Nat→Bool→α)→α

Но при этом могут возникнуть бессмысленные конструкции:

Nat Bool, Pair Pair, Pair (Pair Nat Bool) Nat

5

Page 6: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λω: предварительные замечания (3)

Идея: ввести систему типов над системой типов — кайнды(виды).

Для простых типов вид один — ∗. Только такие типы исполь-зуются для типизации термов.

> : ∗, Nat : ∗, Bool : ∗, ListNat : ∗

Для операторов над типами имеется «стрелочный» кайнд

List : ∗→∗List ≡ λσ :∗. ∀α.α→(σ→α→α)→α

List Nat : ∗List Nat →β ∀α.α→(Nat→α→α)→α

Pair : ∗→∗→∗6

Page 7: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λω: кайнды

Категория кайндов (видов) K задаётся как

K = ∗ | K→K

То есть K = {∗, ∗→ ∗, ∗→ ∗→ ∗, (∗→ ∗) → ∗, . . .}.σ ∈ T введением константы ∗ формализовывалось так σ :∗.κ ∈ K формализуется новой константой � так κ :�.

` ∗ : �` ∗→∗ : �

α :∗ ` α→α : ∗ : �` λα :∗.α→α : ∗→∗ : �

7

Page 8: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λP: предварительные замечания (1)

Вектор — список, в типе которого есть информация о егодлине:

[ ] : Vector 0

[FALSE] : Vector 1

[TRUE, FALSE] : Vector 2

[FALSE, TRUE, FALSE] : Vector 3

. . .

Это приводит нас к идее семейства типов — «типа», ин-дексированного значениями другого типа.

Vector — оператор, принимающий значение и возвращающийтип.

8

Page 9: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λP: предварительные замечания (2)

При этом могут возникнуть бессмысленные конструкции:

Vector TRUE, Vector (PAIR 3 5)

Для контроля за ними расширим понятие кайнда

Vector : Nat→∗Правило «типизации»

Γ ` ϕ : (σ→κ) Γ ` N :σ

Γ ` ϕN : κпозволяет осуществлять контроль соответствия:

Vector 3 : ∗Vector TRUE : ошибка

9

Page 10: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λP: предварительные замечания (3)

Стандартные конструкторы вектора — их бесконечно много?

VNIL : Vector 0

VCONS0 : σ→Vector 0→Vector 1

VCONS1 : σ→Vector 1→Vector 2

VCONS2 : σ→Vector 2→Vector 3

[ ] ≡ VNIL

[FALSE] ≡ VCONS0 FALSE VNIL

[TRUE, FALSE] ≡ VCONS1 TRUE (VCONS0 FALSE VNIL)

[FALSE, TRUE, FALSE] ≡ VCONS2 FALSE (VCONS1 TRUE (VCONS0 FALSE VNIL))

Обобщим понятие типа, введя тип, зависящий от терма:

VCONS : Πn :Nat.σ→Vector n→Vector (SUCC n)

10

Page 11: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Система λP: тип зависимого произведения

Конструкция

Πx :σ. τ[x]

называется типом зависимого произведения или Π-типом.

Можно сравнить с ∀α :∗. τ[α] из системы λ2.

Интуитивно Πx :σ. τ[x] — тип функции, отображающей терм N

типа σ в терм типа τ[x := N].

11

Page 12: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Полное определение вектора в λP2

Возможная реализация:

Vector : Nat→∗Vector ≡ λmNat.ΠϕNat→∗.ϕ0→(ΠnNat.σ→ϕn→ϕ (SUCC n))→ϕm

List ≡ Πα∗ .α →( σ→ α → α )→ α

VNIL : Vector 0

VNIL ≡ λϕNat→∗ zϕ0 cΠnNat.σ→ϕn→ϕ (SUCC n). z

NIL ≡ λα∗ zα cσ→α→α . z

VCONS : ΠnNat.σ→Vector n→Vector (SUCC n)

VCONS ≡ λnNat xσ vVector nϕNat→∗ zϕ0 cΠnNat.σ→ϕn→ϕ (SUCC n). cn x (vϕ z c)

CONS ≡ λ xσ vList α∗ zα cσ→α→α . c x (vα z c)

Здесь много избыточности!12

Page 13: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Вектор в λPω

Vec : Nat→∗→∗Vec ≡ λmNat. λσ∗.ΠϕNat→∗.ϕ0→(ΠnNat.σ→ϕn→ϕ (SUCC n))→ϕm

VNIL ′ : Vec 0 σ

VCONS ′ : Πn :Nat.σ→Vec n σ→Vec (SUCC n) σ

Примеры функций:

REPLICATE : Πn :Nat.σ→Vec n σ

HEAD : Πn :Nat. Vec (SUCC n) σ→σ

CONCAT : Πm :Nat.Πn :Nat. Vec m σ→Vec n σ→Vec (m+ n) σ

ZIP : Πn :Nat. Vec n σ→Vec n τ→Vec n 〈σ, τ〉

13

Page 14: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Проблема равенства типов

Рассмотрим допустимые векторы

V1 : Vec 3 σ

V2 : Vec 4 σ

V3 : Vec 7 τ

Тогда для проверки утверждения типизации

ZIP (CONCAT V1 V2) V3 : Vec 7 〈σ, τ〉

система проверки типов должна вычислить терм 3+4 (и про-верить результат на равенство 7).

Все системы λ-куба сильно нормализуемы и обладают свой-ством сходимости (Чёрча-Россера)!

14

Page 15: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Системы λ-куба (1)

Мы больше формально не различаем ти́повые и термовыепеременные: V := {a,b, c, . . .} ∪ {α,β,γ, . . .}.

Множество (пред)выражений Λ задаётся так

Λ := V | C | ΛΛ | λV :Λ.Λ | ΠV :Λ.Λ

C = {∗,�} — множество констант, называемых сортами.

β-редукция на множестве Λ задаётся правилом

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

15

Page 16: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Системы λ-куба (2)

Высказывание имеет вид M : A, где M,A ∈ Λ.

(Пред)контекст — конечное, линейно упорядоченное мно-жество высказываний, с различными переменными в каче-стве субъекта.

Правила присваивания типов аксиоматизируют нотацию

Γ `M : A,

При этом M и A называются (допустимыми) выражениями,а Γ — (допустимым) контекстом.

16

Page 17: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ-куб: аксиома

Аксиома〈〉 ` ∗ : �

В пустом контексте ∗ — это кайнд.

17

Page 18: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ-куб: общие правила присваивания типов (1)

Начальное правилоΓ ` A :s

Γ , x :A ` x :A, x 6∈ Γ

Правило ослабленияΓ `M :A Γ ` B :sΓ , x :B `M :A

, x 6∈ Γ

s ∈ {∗,�}, x — переменная, A, B, M и N — выражения.

Эти правила позволяют конструировать контексты.

18

Page 19: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ-куб: общие правила присваивания типов (2)

Правило примененияΓ `M : (Πx :A.B) Γ ` N :A

Γ `MN :B[x := N]

Правило абстракцииΓ , x :A `M :B Γ ` (Πx :A.B) :s

Γ ` (λx :A.M) : (Πx :A.B)

19

Page 20: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ-куб: общие правила присваивания типов (3)

Правило преобразованияΓ ` A :B Γ ` B ′ :s B =β B

Γ ` A :B ′

20

Page 21: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ-куб: специальные правила присваивания типов

Совокупность допустимых специальных правил определя-ет конкретную вершину куба:

Правило (s1, s2)Γ ` A :s1 Γ , x :A ` B :s2

Γ ` (Πx :A.B) : s2

s1, s2 ∈ {∗,�}, то есть правил 4: {(∗, ∗), (�, ∗), (∗,�), (�,�)}.

21

Page 22: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ-куб: специальные правила присваивания типов

-

6

-

6

-

6

-

6

�����

�����

�����

�����

λ→

λ2

λP

λP2

λω

λω

λPω

λPω

Система Специальные правилаλ→ (∗, ∗)λ2 (∗, ∗) (�, ∗)λP (∗, ∗) (∗,�)λP2 (∗, ∗) (�, ∗) (∗,�)λω (∗, ∗) (�,�)λω (∗, ∗) (�, ∗) (�,�)λPω (∗, ∗) (∗,�) (�,�)λPω = λC (∗, ∗) (�, ∗) (∗,�) (�,�)

22

Page 23: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ→ на λ-кубе: зависимость терма от терма (1)

Специальное правило (∗, ∗):

Γ ` σ :∗ Γ , x :σ ` τ :∗Γ ` Πx :σ. τ : ∗

Поскольку τ не зависит (в λ→) от x, положим по определению

σ→τ ≡ Π :σ. τ ≡ Πx :σ. τ

Специальное правило (∗, ∗) превращается в правило введенияфункционального типа:

Γ ` σ :∗ Γ ` τ :∗Γ ` σ→τ : ∗

Если σ и τ — типы, то σ→τ — тоже тип.23

Page 24: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ→ на λ-кубе: зависимость терма от терма (2)

Правило абстракцииΓ , x :A `M :B Γ ` (Πx :A.B) : s

Γ ` (λx :A.M) : (Πx :A.B)

Единственная допустимая (Πx :A.B) : s это σ→τ : ∗.Получаем правило введения стрелочного типа

Γ , x :σ `M :τ Γ ` (σ→τ) :∗Γ ` λx :σ.M : σ→τ

Правило примененияΓ `M : (Πx :A.B) Γ ` N :A

Γ `MN : B[x := N]

превращается в правило удаления стрелочного типа:

Γ `M :σ→τ Γ ` N :σ

Γ `MN : τ

24

Page 25: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ2 на λ-кубе: зависимость терма от типа (1)

Специальное правило (�, ∗):

Γ ` κ :� Γ ,α :κ ` σ :∗Γ ` (Πα :κ.σ) : ∗

В λ2 допустим только кайнд ∗. То есть κ в Πα : κ.σ всегда ∗.Такой Π-тип записывают через квантор всеобщности

∀α.σ ≡ Πα :∗.σ

При этом (�, ∗) принимает вид правила формирования уни-версальной абстракции

Γ ,α :∗ ` σ :∗Γ ` ∀α.σ : ∗

Если α — переменная типа и σ — тип, то ∀α.σ — тоже тип.

25

Page 26: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ2 на λ-кубе: зависимость терма от типа (2)

Правило абстракции

Γ , x :A `M :B Γ ` (Πx :A.B) : s

Γ ` (λx :A.M) : (Πx :A.B)

При s = ∗ и A : ∗ порождает правило введения стрелочноготипа (как в λ→).При s = ∗ и A = ∗ возникает правило введения универсальнойабстракции

Γ ,α :∗ `M :σ (∀α.σ) : ∗Γ ` λα :∗.M : ∀α.σ

Для универсальной абстракции часто используют нотациюΛα.M ≡ λα :∗.M

Γ ,α :∗ `M :σ

Γ ` Λα.M : ∀α.σ

26

Page 27: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λ2 на λ-кубе: зависимость терма от типа (3)

Правило применения

Γ `M : (Πx :A.B) Γ ` N :A

Γ `MN : B[x := N]

При A : ∗ имеем правило удаления стрелочного типа (как вλ→). При A = ∗ имеем удаление универсальной абстракции

Γ `M :∀α.σ Γ ` τ :∗Γ `Mτ : σ[α := τ]

Пример — полиморфная тождественная функция I:

` Λα. λx :α. x : ∀α.α→α

γ :∗ ` (Λα. λx :α. x)γ : (α→α)[α := γ]

γ :∗ ` λx :γ . x : (γ→γ)

27

Page 28: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λω на λ-кубе: зависимость типа от типа (1)

Специальное правило (�,�):

Γ ` κ1 :� Γ ,α :κ1 ` κ2 :�Γ ` (Πα :κ1. κ2) :�

В λω нет зависимости кайнда (здесь κ2) от типа (здесь α).Поэтому этот Π-тип записывают в стрелочной нотации

κ1→κ2 ≡ Π :κ1. κ2 ≡ Πα :κ1. κ2

Γ ` κ1 :� Γ ` κ2 :�Γ ` κ1→κ2 : �

Например,

` ∗→∗ : �То есть ∗→∗ — допустимый кайнд (оператора над типом).

28

Page 29: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λω на λ-кубе: зависимость типа от типа (2)

Правило применения

Γ `M : (Πx :A.B) Γ ` N :A

Γ `MN : B[x := N]

При A : ∗ имеем правило удаления стрелочного типа (как вλ→). При A :� имеем правило удаления стрелочного кайнда

Γ ` σ :κ1→κ2 Γ ` τ :κ1Γ ` στ : κ2

Например,

` Pair :∗→∗→∗ ` Nat :∗

` Pair Nat : ∗→∗ Bool : ∗

` Pair Nat Bool : ∗

29

Page 30: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λω на λ-кубе: зависимость типа от типа (3)

Правило абстракции

Γ , x :A `M :B Γ ` (Πx :A.B) : s

Γ ` (λx :A.M) : (Πx :A.B)

При s = ∗ и, следовательно, A :∗ порождает правило введениястрелочного типа (как в λ→).При s = � и, следовательно, A :� возникает правило введениястрелочного кайнда

Γ ,α :κ1 ` σ :κ2 Γ ` (κ1→κ2) :�Γ ` λα :κ1.σ : κ1→κ2

Например, в определении списка (в λω)

σ :∗ ` ∀α.α→(σ→α→α)→α :∗` λσ :∗.∀α.α→(σ→α→α)→α : ∗→∗

30

Page 31: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λω на λ-кубе: зависимость типа от типа (4)

Ещё примеры:

` λα :∗.α→α : ∗→∗Обозначим этот оператор ψ ≡ λα :∗.α→α. Тогда

` ψ : ∗→∗γ :∗ ` ψγ : ∗γ :∗ ` λx : (ψγ). x : ψγ→ψγ

γ :∗ ` λx : (ψγ). x : ψ (ψγ)

α :∗,ϕ :∗→∗ ` ϕ (ϕα) : ∗α :∗ ` λϕ :∗→∗.ϕ (ϕα) : (∗→∗)→∗

31

Page 32: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λP на λ-кубе: зависимость типа от терма (1)

Специальное правило (∗,�)

Γ ` σ :∗ Γ , x :σ ` κ :�Γ ` (Πx :σ. κ) :�

Если кайнд κ не зависит от переменной x, то используетсястрелочная нотация

σ→κ ≡ Π :σ. κ ≡ Πx :σ. κ

Например,

α :∗ ` (α→∗) :�То есть α→∗ — допустимый кайнд семейства типов.

32

Page 33: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λP на λ-кубе: зависимость типа от терма (2)

В системе λP специальное правило (∗, ∗) не интерпретируетсякак введение стрелочного типа, а сохраняет общую Π-форму:

Γ ` σ :∗ Γ , x :σ ` τ :∗Γ ` (Πx :σ. τ) :∗

Если тип τ не зависит от переменной x, то стрелочную но-тацию удобно восстановить

σ→τ ≡ Π :σ. τ ≡ Πx :σ. τ

33

Page 34: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λP на λ-кубе: зависимость типа от терма (3)

Правило применения

Γ `M : (Πx :A.B) Γ ` N :A

Γ `MN : B[x := N]

При (Πx :A.B) :∗ имеем удаление Π-типа:

Γ `M : (Πx :σ. τ) Γ ` N :σ

Γ `MN : τ[x := N]

При (Πx :A.B) :�, имеем удаление Π-кайнда:

Γ ` ϕ : (Πx :σ. κ) Γ ` N :σ

Γ ` ϕN : κ[x := N]

Например,

α :∗, ϕ :α→∗, a :α ` ϕa : ∗

34

Page 35: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λP на λ-кубе: зависимость типа от терма (4)

Правило абстракции

Γ , x :A `M :B Γ ` (Πx :A.B) : s

Γ ` (λx :A.M) : (Πx :A.B)

При s = ∗ и, следовательно, B :∗ возникает правило введенияΠ-типа:

Γ , x :σ `M :τ Γ ` σ : ∗Γ ` λx :σ.M : (Πx :σ. τ)

Например,

α :∗, ϕ :α→∗, a :α, x : (ϕa) ` x :ϕa

α :∗, ϕ :α→∗, a :α ` λx : (ϕa). x : ϕa→ϕa

α :∗, ϕ :α→∗ ` λa :α. λx : (ϕa). x : Πa :α.ϕa→ϕa

35

Page 36: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

λP на λ-кубе: зависимость типа от терма (5)

Правило абстракции

Γ , x :A `M :B Γ ` (Πx :A.B) : s

Γ ` (λx :A.M) : (Πx :A.B)

При s = � и, следовательно, B :� возникает правило введенияΠ-кайнда

Γ , x :σ ` τ :κ Γ ` σ : ∗Γ ` λx :σ. τ : (Πx :σ. κ)

Если не включать подобное правило систему, то возмож-ность объявления семейств типов остаётся только в кон-тексте,

α :∗, ϕ :α→α→∗, a :α ` ϕa : α→∗α :∗, ϕ :α→α→∗, a :α ` ϕaa : ∗

36

Page 37: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Домашнее задание

Для семейства типов матриц с контролем размерности

Matrix : Nat→Nat→∗задайте типы функций их транспонирования, сложения иумножения.

37

Page 38: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Литература (1)

TAPL гл. 29, 30Benjamin C. Pierce, Types and Programming Languages, MITPress, 2002

http://www.cis.upenn.edu/~bcpierce/tapl

LCWT гл. 5.1Henk Barendregt, Lambda calculi with types,Handbook of logic in computer science (vol. 2), Oxford UniversityPress, 1993

38

Page 39: Системы типизации лямбда-исчисления, весна 2011: Лямбда-куб Барендрегта

Литература (2)

ATTAPL гл. 2Benjamin C. Pierce, editor.Advanced Topics in Types and Programming Languages, MIT,2005

ITT гл. 6Herman Geuvers, Introduction to Type TheoryAlfa Lernet Summer school 2008, Uruguay

http://www.cs.ru.nl/H.Geuvers/Uruguay2008SummerSchool.html

39