20110515 systems of typed lambda_calculi_moskvin_lecture09

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

Upload: computer-science-club

Post on 12-Jul-2015

324 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

15.05.2011

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

1

Page 2: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

-

6

-

6

-

6

-

6

�����

�����

�����

�����

λ→

λ2

λP

λP2

λω

λω

λPω

λPω

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

2

Page 3: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Зависимости

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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Система λω: предварительные замечания (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Система λω: предварительные замечания (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

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

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

Pair : ∗→∗→∗6

Page 7: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

K = ∗ | K→K

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

` ∗ : �` ∗→∗ : �

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

7

Page 8: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

[ ] : Vector 0

[FALSE] : Vector 1

[TRUE, FALSE] : Vector 2

[FALSE, TRUE, FALSE] : Vector 3

. . .

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

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

8

Page 9: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

Vector TRUE, Vector (PAIR 3 5)

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

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

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

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

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

9

Page 10: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Система λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

Конструкция

Πx :σ. τ[x]

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

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

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

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

11

Page 12: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Полное определение вектора в λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Вектор в λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

V1 : Vec 3 σ

V2 : Vec 4 σ

V3 : Vec 7 τ

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

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

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

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

14

Page 15: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

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

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

15

Page 16: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

Γ `M : A,

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

16

Page 17: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

17

Page 18: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ-куб: общие правила присваивания типов (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ-куб: общие правила присваивания типов (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

Γ ` A :B ′

20

Page 21: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

21

Page 22: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

-

6

-

6

-

6

-

6

�����

�����

�����

�����

λ→

λ2

λP

λP2

λω

λω

λPω

λPω

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

22

Page 23: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

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

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

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

Page 24: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ→ на λ-кубе: зависимость терма от терма (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

∀α.σ ≡ Πα :∗.σ

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

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

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

25

Page 26: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

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

Например,

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

28

Page 29: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λω на λ-кубе: зависимость типа от типа (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λω на λ-кубе: зависимость типа от типа (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

Ещё примеры:

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

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

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

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

31

Page 32: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

Например,

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

32

Page 33: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

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

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

33

Page 34: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

λ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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

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

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

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

37

Page 38: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Литература (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: 20110515 systems of typed lambda_calculi_moskvin_lecture09

Литература (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