Системы типизации лямбда-исчисленияЛекция 8. Полиморфная система: связь с логикой и                 кодирование           ...
Интуиционистская пропозициональная логика второго                 порядка PROP2Существует изоморфизм между λ2 и логической...
PROP2: →Импликация унаследована от PROP:           Правило удаления →   Правило введения →                                ...
PROP2: ∀Правила введения и удаления квантора ∀ соответствуют уни-версальным Λ-абстракции и применению:         Правило уда...
Стандартные логические связкиCистема λ2 позволяет определить стандартные логическиесвязки:                ⊥ ≡ ∀α . α      ...
Свойства ⊥Напомним, что ⊥ ≡ ∀α. α.Терм этого типа позволяет породить терм любого типа                σ : ∗, x : ⊥   (x σ) ...
Связка ¬ (отрицание)В λ2 связка ¬ может быть определена так:                           ¬σ ≡ σ → ⊥        Правило удаления ...
Связка ¬ (2)Удаление ¬. Тип         σ → ¬σ → τ ≡ σ → (σ → ⊥) → τ ≡ σ → (σ → ∀α. α) → τТерм этого типа (в контексте Γ = σ :...
Связка ∧ (конъюнкция)В λ2 связка ∧ может быть определена так:                   σ ∧ τ ≡ ∀α. (σ → τ → α) → αα ∈ FV(σ), α ∈ ...
Введение ∧Введение ∧. Тип          σ → τ → (σ ∧ τ) ≡ σ → τ → (∀α. (σ → τ → α) → α)Терм этого типа                     λ xσ...
Удаление ∧Удаление ∧ (1). Тип (σ ∧ τ) → σ ≡ (∀α. (σ → τ → α) → α) → σТерм этого типа                           λ fσ ∧ τ. f...
Связка ∨ (дизъюнкция)В λ2 связка ∨ может быть определена так:                σ ∨ τ ≡ ∀α. (σ → α) → (τ → α) → αα ∈ FV(σ), α...
Введение ∨Введение ∨ (1). Тип          σ → (σ ∨ τ) = σ → (∀α. (σ → α) → (τ → α) → α)Терм этого типа                   λ xσ...
Удаление ∨Удаление ∨. Тип           (σ ∨ τ) → (σ → ρ) → (τ → ρ) → ρ       = (∀α. (σ → α) → (τ → α) → α) → (σ → ρ) → (τ → ρ...
Экзистенциальные типыТрактовка ∀α. σ:Функция из типов в термы, которая любому типу τ ставитв соответствие терм с типом σ[α...
∃ (квантор существования)В λ2 ∃ может быть определён так:                     ∃α . σ ≡ ∀β. (∀α. σ → β) → ββ ∈ FV(σ).      ...
Введение ∃Введение ∃. Тип          σ[α := τ] → ∃α. σ = σ[α := τ] → ∀β. (∀α. σ → β) → βТерм этого типа (в контексте Γ = τ :...
Удаление ∃Удаление ∃. Тип      ∃α. σ → (σ → ρ) → ρ = (∀β. (∀α. σ → β) → β) → (σ → ρ) → ρТерм этого типа                   ...
Кодирование в λ2: булев тип                     Bool = ∀α. α → α → αКонстант этого типа в точности две: TRUE : Bool и FALS...
Кодирование в λ2: булев тип (2)Проверка (в контексте ρ : ∗, a : ρ, b : ρ)                 IIF TRUE a b →β TRUE ρ a b      ...
Кодирование в λ2: булев тип (3)Операторы AND, OR и NOT.                 AND : Bool → Bool → Bool              AND x y = Λα...
Кодирование в λ2: двухэлементный кортежТип пары значений с типами σ и τ (произведение типов σ × τ)можно задать так:       ...
Кодирование в λ2: двухэлементный кортеж (2)Две проекции пары p : σ × τ           FST : σ × τ → σ ≡ (∀α. (σ → τ → α) → α) →...
Кодирование в λ2: размеченное объединениеТип размеченного объединения значений типов σ и τ (суммытипов σ + τ) можно задать...
Кодирование в λ2: размеченное объединение (2)               σ + τ ≡ ∀α. (σ → α) → (τ → α) → α  Итератор для размеченного о...
Кодирование в λ2: размеченное объединение (3)        TST1 : Bool + Nat        TST1 ≡ INJL FALSE ≡ Λα. λ fBool→α gNat→α. f ...
Кодирование в λ2: натуральные числаКаков тип, например, 3 = λz s. s (s (s z))?Если выбрать z : α, то из аппликаций ясно, ч...
Кодирование в λ2: натуральные числа (2)Любое натуральное число выразимо через конструкторы            n = Λα. λ zα sα→α. s...
Кодирование в λ2: натуральные числа (3)Итерирование происходит ожидаемым образом(контекст ρ : ∗, x : ρ, f : ρ → ρ; IT x f ...
Кодирование в λ2: натуральные числа (4)Рекурсия в терминах итерации                XZ : σ → σ × Nat              XZ x ≡ x,...
Кодирование в λ2: спискиКаков тип [3, 7, 42] = λn c. c 3 (c 7 (c 42 n))?Если выбрать n : α, то c : Nat → α → α. Определим ...
Кодирование в λ2: списки (2)Итератор для l : List σ (свёртка)                 FOLD   :   ρ → (σ → ρ → ρ) → List σ → ρ     ...
Общая теория (индуктивных типов Мартин-Лёфа)Рассмотрим             SomeType = ∀α. τ1 → τ2 → . . . → τn → αгде τi зависит о...
Теория типов Мартин-Лёфа: тип конструктора               SomeType = ∀α. τ1 → τ2 → . . . → τn → α  Арность i-го конструктор...
Теория типов Мартин-Лёфа: код конструктораПусть τi = σ → τ → α → α. Тип i-го конструктора                     fi : σ → τ →...
Теория типов Мартин-Лёфа: итераторыЕсли SomeType = ∀α. τ1 → τ2 → . . . → τn → α, то тип итератора     IT : τ1[α := ρ] → τ2...
Домашнее заданиеРеализуйте функции OR : Bool → Bool → Bool и NOT : Bool → Bool.Задайте в λ2 перечислительный тип Three, на...
Домашнее задание (2)Выразите FST и SND в терминах UNCURRY.Выразите PLUS и MULT для Nat в терминах IT.Выразите MAP : (σ → τ...
Литература (1)TAPL гл. 23, 24Benjamin C. Pierce, Types and Programming Languages, MITPress, 2002http://www.cis.upenn.edu/~...
Литература (2)ОЯП гл. 9Дж.Митчелл, Основания языков программирования,М.-Ижевск, НИЦ РХД, 2010PAT гл. 11Jean-Yves Girard, P...
Upcoming SlideShare
Loading in …5
×

20110327 systems of_typed_lambda_calculi_moskvin_lecture08

415 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
415
On SlideShare
0
From Embeds
0
Number of Embeds
63
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20110327 systems of_typed_lambda_calculi_moskvin_lecture08

  1. 1. Системы типизации лямбда-исчисленияЛекция 8. Полиморфная система: связь с логикой и кодирование Денис Москвин 27.03.2011 CS Club при ПОМИ РАН 1
  2. 2. Интуиционистская пропозициональная логика второго порядка PROP2Существует изоморфизм между λ2 и логической системойPROP2.Типы в λ2 формулы в PROP2.Термы в λ2 доказательства в PROP2.PROP2 конструктивная система; в ней, например, законПирса ∀α β. ((α → β) → α) → αневыводим. 2
  3. 3. PROP2: →Импликация унаследована от PROP: Правило удаления → Правило введения → [σ] . . . σ→τ σ τ PROP2 τ σ→τ Γ M : σ→τ Γ N:σ Γ, x:σ M:τ λ2 Γ MN : τ Γ λ xσ. M : σ → τ 3
  4. 4. PROP2: ∀Правила введения и удаления квантора ∀ соответствуют уни-версальным Λ-абстракции и применению: Правило удаления ∀ Правило введения ∀ τ1 . . . τn . . . ∀α. σ σPROP2 , α ∈ FV(τ1, . . . , τn) σ[α := τ] ∀α. σ Γ M : ∀α. σ Γ τ : ∗ Γ, α:∗ M:σ λ2 Γ M τ : σ[α := τ] Γ Λα. M : ∀α. σ 4
  5. 5. Стандартные логические связкиCистема λ2 позволяет определить стандартные логическиесвязки: ⊥ ≡ ∀α . α ¬σ ≡ σ → ⊥ σ∧τ ≡ ∀α. (σ → τ → α) → α σ∨τ ≡ ∀α. (σ → α) → (τ → α) → α ∃α. σ ≡ ∀β. (∀α. σ → β) → βПри этом оказываются возможными все стандартные (кон-структивные) выводы. 5
  6. 6. Свойства ⊥Напомним, что ⊥ ≡ ∀α. α.Терм этого типа позволяет породить терм любого типа σ : ∗, x : ⊥ (x σ) : σ σ:∗ λx⊥. (x σ) : ⊥ → σОднако тип ⊥ не населён в λ2 не существует замкнутоготерма с таким типом.С логической точки зрения ⊥ это абсурд, заведомо ложноеутверждение. 6
  7. 7. Связка ¬ (отрицание)В λ2 связка ¬ может быть определена так: ¬σ ≡ σ → ⊥ Правило удаления ¬ Правило введения ¬ [σ] [σ] . . . . . . σ ¬σ τ ¬τ τ ¬σПокажем, что они выразимы в λ2. 7
  8. 8. Связка ¬ (2)Удаление ¬. Тип σ → ¬σ → τ ≡ σ → (σ → ⊥) → τ ≡ σ → (σ → ∀α. α) → τТерм этого типа (в контексте Γ = σ : ∗, τ : ∗) λxσ. λf σ→⊥. f x τИз противоречия следует все что угодно.Введение ¬. Тип (σ → τ) → (σ → ¬τ) → ¬σ ≡ (σ → τ) → (σ → τ → ⊥) → σ → ⊥Терм этого типа λ f σ→τ. λ gσ→τ→⊥. λ xσ. g x (f x)Доказательство приведением к нелепости reductio ad absurdum. 8
  9. 9. Связка ∧ (конъюнкция)В λ2 связка ∧ может быть определена так: σ ∧ τ ≡ ∀α. (σ → τ → α) → αα ∈ FV(σ), α ∈ FV(τ). Правила удаления ∧ Правило введения ∧ σ∧τ σ∧τ σ τ σ τ σ∧τПокажем, что они выразимы в λ2. 9
  10. 10. Введение ∧Введение ∧. Тип σ → τ → (σ ∧ τ) ≡ σ → τ → (∀α. (σ → τ → α) → α)Терм этого типа λ xσ yτ. Λ α. λ f σ→τ→α. f x yВ стандартной интерпретации λ2, как языка программирова-ния, этот терм описывает пару (двухэлементный кортеж): σ : ∗, τ : ∗, x : σ, y : τ x, y : σ × τ 10
  11. 11. Удаление ∧Удаление ∧ (1). Тип (σ ∧ τ) → σ ≡ (∀α. (σ → τ → α) → α) → σТерм этого типа λ fσ ∧ τ. f σ (λ xσ yτ. x) σ : ∗, τ : ∗, f : σ ∧ τ f σ : (σ → τ → σ) → σ σ : ∗, τ : ∗, f : σ ∧ τ f σ (λ xσ yτ. x) : σУдаление ∧ (2). Тип (σ ∧ τ) → τ ≡ (∀α. (σ → τ → α) → α) → τТерм этого типа λ f σ∧τ. f τ (λ xσ yτ. y) σ : ∗, τ : ∗, f : σ ∧ τ f τ : (σ → τ → τ) → τ σ : ∗, τ : ∗, f : σ ∧ τ f τ (λ xσ yτ. y) : τ 11
  12. 12. Связка ∨ (дизъюнкция)В λ2 связка ∨ может быть определена так: σ ∨ τ ≡ ∀α. (σ → α) → (τ → α) → αα ∈ FV(σ), α ∈ FV(τ). Правило удаления ∨ Правила введения ∨ [σ] [τ] σ∨τ . . . . . . ρ ρ σ τ ρ σ∨τ σ∨τПокажем, что они выразимы в λ2. 12
  13. 13. Введение ∨Введение ∨ (1). Тип σ → (σ ∨ τ) = σ → (∀α. (σ → α) → (τ → α) → α)Терм этого типа λ xσ. Λ α. λ fσ→α gτ→α. f xВведение ∨ (2). Тип τ → (σ ∨ τ) = τ → (∀α. (σ → α) → (τ → α) → α)Терм этого типа λ yτ. Λ α. λ fσ→α gτ→α. g y 13
  14. 14. Удаление ∨Удаление ∨. Тип (σ ∨ τ) → (σ → ρ) → (τ → ρ) → ρ = (∀α. (σ → α) → (τ → α) → α) → (σ → ρ) → (τ → ρ) → ρТерм этого типа λ hσ∨τ fσ→ρ gτ→ρ. h ρ f gПостроение терма σ : ∗, τ : ∗, ρ : ∗, h : σ ∨ τ h ρ : (σ → ρ) → (τ → ρ) → ρЭто правило носит название доказательство разбором слу-чаев. 14
  15. 15. Экзистенциальные типыТрактовка ∀α. σ:Функция из типов в термы, которая любому типу τ ставитв соответствие терм с типом σ[α := τ].Для σ = α → α имеем σ[α := τ] = τ → τ: Λα. λxα. x : ∀α. α → α (Λα. λxα. x)τ →β λxτ. x : τ → τТрактовка ∃α. σ:Пара из некоторого типа τ и терма, имеющего тип σ[α := τ].Для σ = α → γ имеем: γ, λxγ. x : ∃α. α → γпоскольку σ[α := γ] = γ → γ и λxγ. x : γ → γ. 15
  16. 16. ∃ (квантор существования)В λ2 ∃ может быть определён так: ∃α . σ ≡ ∀β. (∀α. σ → β) → ββ ∈ FV(σ). Правило удаления ∃ Правило введения ∃ [σ] ∃α. σ . . . ρ σ[α := τ] ρ ∃α. σПокажем, что они выразимы в λ2. 16
  17. 17. Введение ∃Введение ∃. Тип σ[α := τ] → ∃α. σ = σ[α := τ] → ∀β. (∀α. σ → β) → βТерм этого типа (в контексте Γ = τ : ∗) λ xσ[α:=τ]. Λβ. λf∀α. σ→β. f τ xПостроение терма τ : ∗, σ : ∗, β : ∗, f : ∀α. σ → β f τ : σ[α := τ] → β τ : ∗, σ : ∗, β : ∗, f : ∀α. σ → β, x : σ[α := τ] fτx : β 17
  18. 18. Удаление ∃Удаление ∃. Тип ∃α. σ → (σ → ρ) → ρ = (∀β. (∀α. σ → β) → β) → (σ → ρ) → ρТерм этого типа λ f ∃α. σ. λ gσ→ρ. f ρ (Λ α. g)Построение терма f : ∃α. σ (f ρ) : (∀α. σ → ρ) → ρ g:σ→ρ (Λα. g) : ∀α. σ → ρ 18
  19. 19. Кодирование в λ2: булев тип Bool = ∀α. α → α → αКонстант этого типа в точности две: TRUE : Bool и FALSE : Bool: TRUE = Λα. λ tα fα. t FALSE = Λα. λ tα fα. fУсловный оператор задаёт способ использования для Bool: IIF : Bool → ρ → ρ → ρ IIF = λ eBool.λxρ yρ. e ρ x y IIF e = λxρ yρ. e ρ x y IIF e x y = e ρ x y Комбин´торный а синтаксис часто удобнее лямбд. 19
  20. 20. Кодирование в λ2: булев тип (2)Проверка (в контексте ρ : ∗, a : ρ, b : ρ) IIF TRUE a b →β TRUE ρ a b = (Λα. λtα fα. t) ρ a b →β (λ tρ fρ. t) a b →β a IIF FALSE a b →β FALSE ρ a b = (Λα. λtα fα. f) ρ a b →β (λ tρ fρ. f) a b →β b 20
  21. 21. Кодирование в λ2: булев тип (3)Операторы AND, OR и NOT. AND : Bool → Bool → Bool AND x y = Λα. λtα fα. x α (y α t f) fСиним выделено отличие от бестиповой лямбды. OR : Bool → Bool → Bool OR x y = ??? самостоятельно NOT : Bool → Bool NOT x = ??? самостоятельно 21
  22. 22. Кодирование в λ2: двухэлементный кортежТип пары значений с типами σ и τ (произведение типов σ × τ)можно задать так: σ × τ ≡ ∀α. (σ → τ → α) → αОтметим, что σ × τ ≡ σ ∧ τ.Любые два значения a : σ и b : τ порождают значение a, bтипа их произведения σ × τ: PAIR a b ≡ a, b ≡ Λ α. λ fσ→τ→α. f a bТип этого конструктора пары σ→τ→σ × τ ≡ σ → τ → ∀α. (σ → τ → α) → α 22
  23. 23. Кодирование в λ2: двухэлементный кортеж (2)Две проекции пары p : σ × τ FST : σ × τ → σ ≡ (∀α. (σ → τ → α) → α) → σ FST p ≡ p σ (λ xσ yτ. x) SND : σ × τ → τ ≡ (∀α. (σ → τ → α) → α) → τ SND p ≡ p τ (λ xσ yτ. y)Итератор для пары p : σ × τ UNCURRY : (σ → τ → ρ) → σ × τ → ρ UNCURRY ≡ λfσ→τ→ρ pσ×τ. p ρ f UNCURRY f p ≡ p ρ fВыразите FST и SND в терминах UNCURRY. 23
  24. 24. Кодирование в λ2: размеченное объединениеТип размеченного объединения значений типов σ и τ (суммытипов σ + τ) можно задать так: σ + τ ≡ ∀α. (σ → α) → (τ → α) → αОтметим, что σ + τ ≡ σ ∨ τ.В σ + τ хранится либо значение типа σ, либо типа τ, инъек-тированные в него одним из двух конструкторов INJL : σ → σ + τ INJL a ≡ Λα. λ fσ→α gτ→α. f a INJR : τ → σ + τ INJR b ≡ Λα. λ fσ→α gτ→α. g b 24
  25. 25. Кодирование в λ2: размеченное объединение (2) σ + τ ≡ ∀α. (σ → α) → (τ → α) → α Итератор для размеченного объединения hσ+τ(разбор случаев): CASES : (σ → ρ) → (τ → ρ) → (σ + τ) → ρ CASES ≡ λfσ→ρ gτ→ρ hσ+τ. h ρ f g CASES f g h ≡ h ρ f gρ задает тип результата разбора, а f и g являются обработ-чиками допустимых вариантов хранения. 25
  26. 26. Кодирование в λ2: размеченное объединение (3) TST1 : Bool + Nat TST1 ≡ INJL FALSE ≡ Λα. λ fBool→α gNat→α. f FALSE TST2 : Bool + Nat TST2 ≡ INJR 42 ≡ Λα. λ fBool→α gNat→α. g 42CASES f g h ≡ h ρ f g, где f : σ → ρ, g : τ → ρ, h : σ + τ NOT : Bool → Bool ISZRO : Nat → Bool CASES NOT ISZRO TST1 : Bool CASES NOT ISZRO TST1 →β NOT FALSE →β TRUE CASES NOT ISZRO TST2 : Bool CASES NOT ISZRO TST2 →β ISZRO 42 →β FALSE 26
  27. 27. Кодирование в λ2: натуральные числаКаков тип, например, 3 = λz s. s (s (s z))?Если выбрать z : α, то из аппликаций ясно, что s : α → α.Поэтому естественно определить Nat = ∀α. α → (α → α) → α(или, переставив в абстракции s и z, ∀α. (α → α) → α → α)Конструкторы для Nat ZERO : Nat ZERO = Λα. λzα sα→α. z SUCC : Nat → Nat SUCC n = Λα. λzα sα→α. s (n α z s)Индуктивный параметр перевычисляется . 27
  28. 28. Кодирование в λ2: натуральные числа (2)Любое натуральное число выразимо через конструкторы n = Λα. λ zα sα→α. sn(z) = SUCCn(ZERO)В ЯП конструкторы часто вводят как примитивы:data Nat = ZERO | SUCC NatИтератор для n : Nat IT : ρ → (ρ → ρ) → Nat → ρ IT ≡ λxρ fρ→ρ nNat. n ρ x f IT x f n ≡ n ρ x f 28
  29. 29. Кодирование в λ2: натуральные числа (3)Итерирование происходит ожидаемым образом(контекст ρ : ∗, x : ρ, f : ρ → ρ; IT x f n ≡ n ρ x f): IT x f ZERO ≡ (Λα. λzα sα→α. z) ρ x f →β (λzρ sρ→ρ. z) x f →β (λsρ→ρ. x) f →β x IT x f (SUCC n) ≡ (Λα. λzα sα→α. s (n α z s)) ρ x f →β (λzρ sρ→ρ. s (n ρ z s)) x f →β (λsρ→ρ. s (n ρ x s)) f →β f (n ρ x f) = f (IT x f n) 29
  30. 30. Кодирование в λ2: натуральные числа (4)Рекурсия в терминах итерации XZ : σ → σ × Nat XZ x ≡ x, ZERO FS : (σ → Nat → σ) → σ × Nat → σ × Nat FS f p ≡ f (FST p) (SND p), SUCC (SND p) REC : Nat → σ → (σ → Nat → σ) → σ REC n x f ≡ FST (IT (XZ x) (FS f) n)Итерирование IT x f n ≡ n ρ x f идёт с типом ρ ≡ σ × Nat.В частности, PRED : Nat → Nat PRED n ≡ REC n ZERO (λ xNat yNat. y) 30
  31. 31. Кодирование в λ2: спискиКаков тип [3, 7, 42] = λn c. c 3 (c 7 (c 42 n))?Если выбрать n : α, то c : Nat → α → α. Определим ListNat ≡ ∀α. α → (Nat → α → α) → α List σ ≡ ∀α. α → (σ → α → α) → αКонструкторы для List σ NIL : List σ NIL ≡ Λα. λnα cσ→α→α. n CONS : σ → List σ → List σ CONS x l ≡ Λα. λnα cσ→α→α. c x (l α n c) [3, 7, 42] = CONS 3 (CONS 7 (CONS 42 NIL)) 31
  32. 32. Кодирование в λ2: списки (2)Итератор для l : List σ (свёртка) FOLD : ρ → (σ → ρ → ρ) → List σ → ρ FOLD ≡ λxρ fσ→ρ→ρ lList σ. l ρ x f FOLD x f l ≡ l ρ x fПроверьте, что свёртка ведёт себя ожидаемо, то есть FOLD x f NIL β x FOLD x f (CONS e l) β f e (l ρ x f) = f e (FOLD x f l)Пример свёртки: FOLD [3, 7, 42] x f = f 3 (f 7 (f 42 x)) 32
  33. 33. Общая теория (индуктивных типов Мартин-Лёфа)Рассмотрим SomeType = ∀α. τ1 → τ2 → . . . → τn → αгде τi зависит от α, имея α по крайней мере в самой правойпозиции: τi = . . . → α Количество конструкторов равно n ( арности SomeType): ≡ ∀α. α → α 1 штука σ × τ ≡ ∀α. (σ → τ → α) → α 1 штука Bool ≡ ∀α. α → α → α 2 штуки σ + τ ≡ ∀α. (σ → α) → (τ → α) → α 2 штуки List σ ≡ ∀α. α → (σ → α → α) → α 2 штуки 33
  34. 34. Теория типов Мартин-Лёфа: тип конструктора SomeType = ∀α. τ1 → τ2 → . . . → τn → α Арность i-го конструктора равна арности τi. Тип i-го конструктора fi : τi[α := SomeType].Например, для списка fi : τi[α := List σ]: List σ ≡ ∀α. α → (σ → α → α) → α NIL : List σ CONS : σ → List σ → List σ 34
  35. 35. Теория типов Мартин-Лёфа: код конструктораПусть τi = σ → τ → α → α. Тип i-го конструктора fi : σ → τ → SomeType → SomeType Построение i-ого конструктора однозначная процедура: SomeType fi = λxσ xτ a1 1 2 . {...} : σ → τ → SomeType → SomeType fi x1 x2 a1 = {...} : SomeType τ τ fi x1 x2 a1 = Λα. λt11 t22 . . . tτn . ti {...} n τ τ fi x1 x2 a1 = Λα. λt11 t22 . . . tτn . ti x1 x2 (a1 α t1 t2 . . . tn) nИндуктивные параметры реконструируются . NIL ≡ Λα. λnα cσ→α→α. n CONS x l ≡ Λα. λnα cσ→α→α. c x (l α n c) 35
  36. 36. Теория типов Мартин-Лёфа: итераторыЕсли SomeType = ∀α. τ1 → τ2 → . . . → τn → α, то тип итератора IT : τ1[α := ρ] → τ2[α := ρ] → . . . → τn[α := ρ] → SomeType → ρКод итератора тривиален; для s : SomeType имеем τ [α:=ρ] τ [α:=ρ] τ [α:=ρ] SomeType IT = λx11 x22 . . . xnn s . s ρ x1 x2 . . . xn IT x1 x2 . . . xn s = s ρ x1 x2 . . . xnВспомним итераторы σ+τ CASES f g h ≡ h ρ f g σ×τ UNCURRY f p ≡ p ρ f List σ FOLD x f l ≡ l ρ x f 36
  37. 37. Домашнее заданиеРеализуйте функции OR : Bool → Bool → Bool и NOT : Bool → Bool.Задайте в λ2 перечислительный тип Three, населённый ровнотремя константами ONE : Three, TWO : Three, THREE : Three.Выпишите его конструкторы и итератор для него.Реализуйте функцию SHIFT : Three → Three со следующим по-ведением: SHIFT ONE = TWO SHIFT TWO = THREE SHIFT THREE = ONE 37
  38. 38. Домашнее задание (2)Выразите FST и SND в терминах UNCURRY.Выразите PLUS и MULT для Nat в терминах IT.Выразите MAP : (σ → τ) → List σ → List τ в терминах FOLD.Определите в λ2 индуктивный тип Tree σ τ, задающий бинар-ное дерево, хранящее в узлах значения типа σ, а в листьях типа τ.Выпишите его конструкторы и итератор для него. 38
  39. 39. Литература (1)TAPL гл. 23, 24Benjamin C. Pierce, Types and Programming Languages, MITPress, 2002http://www.cis.upenn.edu/~bcpierce/taplITT гл. 5Herman Geuvers, Introduction to Type TheoryAlfa Lernet Summer school 2008, Uruguayhttp://www.cs.ru.nl/H.Geuvers/Uruguay2008SummerSchool.html 39
  40. 40. Литература (2)ОЯП гл. 9Дж.Митчелл, Основания языков программирования,М.-Ижевск, НИЦ РХД, 2010PAT гл. 11Jean-Yves Girard, Paul Taylor, Yves Lafont, Proofs and Types,Cambridge University Press, 1989 40

×