20110515 systems of typed lambda_calculi_moskvin_lecture09

Post on 12-Jul-2015

324 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

15.05.2011

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

1

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

-

6

-

6

-

6

-

6

�����

�����

�����

�����

λ→

λ2

λP

λP2

λω

λω

λPω

λPω

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

2

Зависимости

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

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

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

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

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

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

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

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

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

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

5

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

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

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

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

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

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

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

Pair : ∗→∗→∗6

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

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

K = ∗ | K→K

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

` ∗ : �` ∗→∗ : �

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

7

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

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

[ ] : Vector 0

[FALSE] : Vector 1

[TRUE, FALSE] : Vector 2

[FALSE, TRUE, FALSE] : Vector 3

. . .

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

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

8

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

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

Vector TRUE, Vector (PAIR 3 5)

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

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

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

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

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

9

Система λ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

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

Конструкция

Πx :σ. τ[x]

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

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

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

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

11

Полное определение вектора в λ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

Вектор в λ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

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

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

V1 : Vec 3 σ

V2 : Vec 4 σ

V3 : Vec 7 τ

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

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

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

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

14

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

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

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

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

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

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

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

15

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

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

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

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

Γ `M : A,

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

16

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

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

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

17

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

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

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

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

Γ ` A :B ′

20

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

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

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

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

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

21

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

-

6

-

6

-

6

-

6

�����

�����

�����

�����

λ→

λ2

λP

λP2

λω

λω

λPω

λPω

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

22

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

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

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

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

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

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

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

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

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

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

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

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

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

∀α.σ ≡ Πα :∗.σ

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

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

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

25

λ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

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

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

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

Γ `MN : B[x := N]

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

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

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

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

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

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

27

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

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

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

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

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

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

Например,

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

28

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

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

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

Ещё примеры:

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

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

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

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

31

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

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

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

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

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

Например,

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

32

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

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

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

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

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

33

λ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

λ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

λ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

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

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

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

37

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

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

top related