SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Системы типизации лямбда-исчисления

Лекция 8. Полиморфная система: связь с логикой и
                 кодирование

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




                   27.03.2011

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



                                             1
Интуиционистская пропозициональная логика второго
                 порядка PROP2


Существует изоморфизм между λ2 и логической системой
PROP2.

Типы в λ2    формулы в PROP2.
Термы в λ2    доказательства в PROP2.

PROP2    конструктивная система; в ней, например, закон
Пирса
                   ∀α β. ((α → β) → α) → α
невыводим.

                                                  2
PROP2: →


Импликация унаследована от PROP:

           Правило удаления →   Правило введения →

                                          [σ]
                                           .
                                           .
                                           .
                 σ→τ    σ                  τ
   PROP2
                   τ                     σ→τ


           Γ   M : σ→τ Γ N:σ         Γ, x:σ M:τ
     λ2
                Γ MN : τ           Γ λ xσ. M : σ → τ


                                                       3
PROP2: ∀

Правила введения и удаления квантора ∀ соответствуют уни-
версальным Λ-абстракции и применению:


         Правило удаления ∀             Правило введения ∀

                                  τ1 . . . τn
                                       .
                                       .
                                       .
                   ∀α. σ               σ
PROP2                                         ,   α ∈ FV(τ1, . . . , τn)
                 σ[α := τ]         ∀α. σ


         Γ    M : ∀α. σ Γ τ : ∗            Γ, α:∗ M:σ
   λ2
             Γ M τ : σ[α := τ]            Γ Λα. M : ∀α. σ

                                                                  4
Стандартные логические связки


Cистема λ2 позволяет определить стандартные логические
связки:

                ⊥ ≡ ∀α . α
               ¬σ ≡ σ → ⊥
              σ∧τ ≡ ∀α. (σ → τ → α) → α
              σ∨τ ≡ ∀α. (σ → α) → (τ → α) → α
             ∃α. σ ≡ ∀β. (∀α. σ → β) → β


При этом оказываются возможными все стандартные (кон-
структивные) выводы.

                                                 5
Свойства ⊥



Напомним, что ⊥ ≡ ∀α. α.
Терм этого типа позволяет породить терм любого типа

                σ : ∗, x : ⊥   (x σ) : σ
                       σ:∗     λx⊥. (x σ) : ⊥ → σ


Однако тип ⊥ не населён в λ2          не существует замкнутого
терма с таким типом.

С логической точки зрения ⊥        это абсурд, заведомо ложное
утверждение.

                                                         6
Связка ¬ (отрицание)


В λ2 связка ¬ может быть определена так:

                           ¬σ ≡ σ → ⊥

        Правило удаления ¬      Правило введения ¬

                                        [σ]        [σ]
                                         .
                                         .
                                         .          .
                                                    .
                                                    .
              σ       ¬σ                 τ         ¬τ
                  τ                           ¬σ


Покажем, что они выразимы в λ2.

                                                         7
Связка ¬ (2)

Удаление ¬. Тип
         σ → ¬σ → τ ≡ σ → (σ → ⊥) → τ ≡ σ → (σ → ∀α. α) → τ
Терм этого типа (в контексте Γ = σ : ∗, τ : ∗)
                           λxσ. λf σ→⊥. f x τ
Из противоречия следует все что угодно.

Введение ¬. Тип
       (σ → τ) → (σ → ¬τ) → ¬σ ≡ (σ → τ) → (σ → τ → ⊥) → σ → ⊥
Терм этого типа
                   λ f σ→τ. λ gσ→τ→⊥. λ xσ. g x (f x)
Доказательство приведением к нелепости                  reductio ad absurdum.
                                                                   8
Связка ∧ (конъюнкция)



В λ2 связка ∧ может быть определена так:

                   σ ∧ τ ≡ ∀α. (σ → τ → α) → α
α ∈ FV(σ), α ∈ FV(τ).

         Правила удаления ∧      Правило введения ∧

             σ∧τ        σ∧τ              σ         τ
              σ          τ                   σ∧τ


Покажем, что они выразимы в λ2.

                                                       9
Введение ∧


Введение ∧. Тип

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


Терм этого типа

                     λ xσ yτ. Λ α. λ f σ→τ→α. f x y


В стандартной интерпретации λ2, как языка программирова-
ния, этот терм описывает пару (двухэлементный кортеж):

                  σ : ∗, τ : ∗, x : σ, y : τ   x, y : σ × τ

                                                              10
Удаление ∧

Удаление ∧ (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
Связка ∨ (дизъюнкция)

В λ2 связка ∨ может быть определена так:

                σ ∨ τ ≡ ∀α. (σ → α) → (τ → α) → α
α ∈ FV(σ), α ∈ FV(τ).

         Правило удаления ∨       Правила введения ∨

                   [σ]      [τ]
         σ∨τ        .
                    .
                    .        .
                             .
                             .
                    ρ        ρ        σ          τ
                   ρ                 σ∨τ        σ∨τ


Покажем, что они выразимы в λ2.
                                                       12
Введение ∨


Введение ∨ (1). Тип

          σ → (σ ∨ τ) = σ → (∀α. (σ → α) → (τ → α) → α)
Терм этого типа

                   λ xσ. Λ α. λ fσ→α gτ→α. f x
Введение ∨ (2). Тип

          τ → (σ ∨ τ) = τ → (∀α. (σ → α) → (τ → α) → α)
Терм этого типа

                   λ yτ. Λ α. λ fσ→α gτ→α. g y

                                                          13
Удаление ∨


Удаление ∨. Тип

           (σ ∨ τ) → (σ → ρ) → (τ → ρ) → ρ
       = (∀α. (σ → α) → (τ → α) → α) → (σ → ρ) → (τ → ρ) → ρ
Терм этого типа

                         λ hσ∨τ fσ→ρ gτ→ρ. h ρ f g
Построение терма

       σ : ∗, τ : ∗, ρ : ∗, h : σ ∨ τ   h ρ : (σ → ρ) → (τ → ρ) → ρ
Это правило носит название доказательство разбором слу-
чаев.

                                                                      14
Экзистенциальные типы

Трактовка ∀α. σ:
Функция из типов в термы, которая любому типу τ ставит
в соответствие терм с типом σ[α := τ].
Для σ = α → α имеем σ[α := τ] = τ → τ:
                     Λα. λxα. x : ∀α. α → α
                     (Λα. λxα. x)τ →β λxτ. x : τ → τ


Трактовка ∃α. σ:
Пара из некоторого типа τ и терма, имеющего тип σ[α := τ].
Для σ = α → γ имеем:
                         γ, λxγ. x : ∃α. α → γ
поскольку σ[α := γ] = γ → γ и λxγ. x : γ → γ.
                                                       15
∃ (квантор существования)

В λ2 ∃ может быть определён так:

                     ∃α . σ ≡ ∀β. (∀α. σ → β) → β
β ∈ FV(σ).

         Правило удаления ∃         Правило введения ∃

                          [σ]
             ∃α. σ         .
                           .
                           .
                           ρ               σ[α := τ]
                      ρ                      ∃α. σ


Покажем, что они выразимы в λ2.
                                                         16
Введение ∃



Введение ∃. Тип

          σ[α := τ] → ∃α. σ = σ[α := τ] → ∀β. (∀α. σ → β) → β
Терм этого типа (в контексте Γ = τ : ∗)

                        λ xσ[α:=τ]. Λβ. λf∀α. σ→β. f τ x
Построение терма

                    τ : ∗, σ : ∗, β : ∗, f : ∀α. σ → β   f τ : σ[α := τ] → β
     τ : ∗, σ : ∗, β : ∗, f : ∀α. σ → β, x : σ[α := τ]   fτx : β



                                                                               17
Удаление ∃



Удаление ∃. Тип

      ∃α. σ → (σ → ρ) → ρ = (∀β. (∀α. σ → β) → β) → (σ → ρ) → ρ
Терм этого типа

                     λ f ∃α. σ. λ gσ→ρ. f ρ (Λ α. g)
Построение терма

                  f : ∃α. σ     (f ρ) : (∀α. σ → ρ) → ρ
                 g:σ→ρ          (Λα. g) : ∀α. σ → ρ



                                                                  18
Кодирование в λ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
Кодирование в λ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
Кодирование в λ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
Кодирование в λ2: двухэлементный кортеж

Тип пары значений с типами σ и τ (произведение типов σ × τ)
можно задать так:

                 σ × τ ≡ ∀α. (σ → τ → α) → α
Отметим, что σ × τ ≡ σ ∧ τ.

Любые два значения a : σ и b : τ порождают значение a, b
типа их произведения σ × τ:

           PAIR a b ≡   a, b   ≡ Λ α. λ fσ→τ→α. f a b


Тип этого конструктора пары

          σ→τ→σ × τ     ≡ σ → τ → ∀α. (σ → τ → α) → α
                                                        22
Кодирование в λ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
Кодирование в λ2: размеченное объединение

Тип размеченного объединения значений типов σ и τ (суммы
типов σ + τ) можно задать так:
               σ + τ ≡ ∀α. (σ → α) → (τ → α) → α
Отметим, что σ + τ ≡ σ ∨ τ.

В σ + τ хранится либо значение типа σ, либо типа τ, инъек-
тированные в него одним из двух конструкторов
                 INJL : σ → σ + τ
               INJL a ≡ Λα. λ fσ→α gτ→α. f a

                 INJR : τ → σ + τ
               INJR b ≡ Λα. λ fσ→α gτ→α. g b
                                                     24
Кодирование в λ2: размеченное объединение (2)




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


  Итератор для размеченного объединения hσ+τ
(разбор случаев):

              CASES   :   (σ → ρ) → (τ → ρ) → (σ + τ) → ρ
              CASES ≡ λfσ→ρ gτ→ρ hσ+τ. h ρ f g
          CASES f g h ≡ h ρ f g
ρ задает тип результата разбора, а f и g являются обработ-
чиками допустимых вариантов хранения.

                                                            25
Кодирование в λ2: размеченное объединение (3)



        TST1 : Bool + Nat
        TST1 ≡ INJL FALSE ≡ Λα. λ fBool→α gNat→α. f FALSE
        TST2 : Bool + Nat
        TST2 ≡ INJR 42 ≡ Λα. λ fBool→α gNat→α. g 42
CASES 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
Кодирование в λ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
Кодирование в λ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
Кодирование в λ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
Кодирование в λ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
Кодирование в λ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
Кодирование в λ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
Общая теория (индуктивных типов Мартин-Лёфа)

Рассмотрим

             SomeType = ∀α. τ1 → τ2 → . . . → τn → α
где τi зависит от α, имея α по крайней мере в самой правой
позиции: τi = . . . → α
  Количество конструкторов равно n ( арности SomeType):

                ≡ ∀α. α → α    1 штука
          σ × τ ≡ ∀α. (σ → τ → α) → α    1 штука
          Bool ≡ ∀α. α → α → α      2 штуки
          σ + τ ≡ ∀α. (σ → α) → (τ → α) → α    2 штуки
         List σ ≡ ∀α. α → (σ → α → α) → α     2 штуки


                                                         33
Теория типов Мартин-Лёфа: тип конструктора



               SomeType = ∀α. τ1 → τ2 → . . . → τn → α

  Арность i-го конструктора равна арности τi.

  Тип i-го конструктора fi : τi[α := SomeType].

Например, для списка fi : τi[α := List σ]:
                 List σ ≡ ∀α. α → (σ → α → α) → α

                   NIL   :   List σ
                  CONS   :   σ → List σ → List σ


                                                         34
Теория типов Мартин-Лёфа: код конструктора

Пусть τ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
Теория типов Мартин-Лёфа: итераторы


Если 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
Домашнее задание


Реализуйте функции 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
Домашнее задание (2)



Выразите FST и SND в терминах UNCURRY.

Выразите PLUS и MULT для Nat в терминах IT.

Выразите MAP : (σ → τ) → List σ → List τ в терминах FOLD.

Определите в λ2 индуктивный тип Tree σ τ, задающий бинар-
ное дерево, хранящее в узлах значения типа σ, а в листьях
  типа τ.
Выпишите его конструкторы и итератор для него.


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



TAPL гл. 23, 24
Benjamin C. Pierce, Types and Programming Languages, MIT
Press, 2002

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

ITT гл. 5
Herman Geuvers, Introduction to Type Theory
Alfa Lernet Summer school 2008, Uruguay

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

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




ОЯП гл. 9
Дж.Митчелл, Основания языков программирования,
М.-Ижевск, НИЦ РХД, 2010

PAT гл. 11
Jean-Yves Girard, Paul Taylor, Yves Lafont, Proofs and Types,
Cambridge University Press, 1989




                                                        40

Mais conteúdo relacionado

Mais procurados

20110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture0320110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture03Computer Science Club
 
Doppler reflectometry in large devices
Doppler reflectometry in large devicesDoppler reflectometry in large devices
Doppler reflectometry in large devicesalexandersurkov
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Nikolay Grebenshikov
 
Исследование производной
Исследование производнойИсследование производной
Исследование производнойagafonovalv
 
презентиция для кафедры 2
презентиция для кафедры 2презентиция для кафедры 2
презентиция для кафедры 2NeverMora
 
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Nikolay Grebenshikov
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IIДмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IIPlatonov Sergey
 
Tr fn polon hub test
Tr fn polon hub testTr fn polon hub test
Tr fn polon hub testboogii79
 
презентиция для кафедры
презентиция для кафедрыпрезентиция для кафедры
презентиция для кафедрыNeverMora
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Nikolay Grebenshikov
 
Тригонометрические функции числового аргумента
Тригонометрические функции числового аргументаТригонометрические функции числового аргумента
Тригонометрические функции числового аргументаFormula.co.ua
 

Mais procurados (20)

Lection02
Lection02Lection02
Lection02
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture0320110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture03
 
Doppler reflectometry in large devices
Doppler reflectometry in large devicesDoppler reflectometry in large devices
Doppler reflectometry in large devices
 
10474
1047410474
10474
 
Pr i-7
Pr i-7Pr i-7
Pr i-7
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
 
Исследование производной
Исследование производнойИсследование производной
Исследование производной
 
презентиция для кафедры 2
презентиция для кафедры 2презентиция для кафедры 2
презентиция для кафедры 2
 
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IIДмитрий Кашицын, Вывод типов в динамических и не очень языках II
Дмитрий Кашицын, Вывод типов в динамических и не очень языках II
 
Tr fn polon hub test
Tr fn polon hub testTr fn polon hub test
Tr fn polon hub test
 
diploma.RC
diploma.RCdiploma.RC
diploma.RC
 
Lection07
Lection07Lection07
Lection07
 
Lection01
Lection01Lection01
Lection01
 
презентиция для кафедры
презентиция для кафедрыпрезентиция для кафедры
презентиция для кафедры
 
Get Ft
Get FtGet Ft
Get Ft
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
 
Pr i-5
Pr i-5Pr i-5
Pr i-5
 
Тригонометрические функции числового аргумента
Тригонометрические функции числового аргументаТригонометрические функции числового аргумента
Тригонометрические функции числового аргумента
 
9 cifi otc
9 cifi otc9 cifi otc
9 cifi otc
 

Semelhante a 20110327 systems of_typed_lambda_calculi_moskvin_lecture08

20110313 systems of_typed_lambda_calculi_moskvin_lecture05
20110313 systems of_typed_lambda_calculi_moskvin_lecture0520110313 systems of_typed_lambda_calculi_moskvin_lecture05
20110313 systems of_typed_lambda_calculi_moskvin_lecture05Computer Science Club
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture0220110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture02Computer Science Club
 
тема 4 Напряженное и деформированное состояние в точке
тема 4 Напряженное и деформированное состояние в точкетема 4 Напряженное и деформированное состояние в точке
тема 4 Напряженное и деформированное состояние в точкеАркадий Захаров
 
4.8. курс лекций афу
4.8. курс лекций афу4.8. курс лекций афу
4.8. курс лекций афуGKarina707
 
тема 8 4 Перемещения при изгибе
тема 8 4  Перемещения при изгибетема 8 4  Перемещения при изгибе
тема 8 4 Перемещения при изгибеАркадий Захаров
 
20110515 systems of typed lambda_calculi_moskvin_lecture10
20110515 systems of typed lambda_calculi_moskvin_lecture1020110515 systems of typed lambda_calculi_moskvin_lecture10
20110515 systems of typed lambda_calculi_moskvin_lecture10Computer Science Club
 
20110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture1120110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture11Computer Science Club
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture0220110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture02Computer Science Club
 
20110306 systems of_typed_lambda_calculi_moskvin_lecture03
20110306 systems of_typed_lambda_calculi_moskvin_lecture0320110306 systems of_typed_lambda_calculi_moskvin_lecture03
20110306 systems of_typed_lambda_calculi_moskvin_lecture03Computer Science Club
 
20111015 inroduction to_combinatorics_on_words_frid_lecture02
20111015 inroduction to_combinatorics_on_words_frid_lecture0220111015 inroduction to_combinatorics_on_words_frid_lecture02
20111015 inroduction to_combinatorics_on_words_frid_lecture02Computer Science Club
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture01
20110224 systems of_typed_lambda_calculi_moskvin_lecture0120110224 systems of_typed_lambda_calculi_moskvin_lecture01
20110224 systems of_typed_lambda_calculi_moskvin_lecture01Computer Science Club
 
Математическое дополнение
Математическое дополнениеМатематическое дополнение
Математическое дополнениеBigVilly
 
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияПрогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияGleb Zakhodiakin
 
Решение систем линейных уравнений: трехдиагональные, симметричные и положител...
Решение систем линейных уравнений: трехдиагональные, симметричные и положител...Решение систем линейных уравнений: трехдиагональные, симметричные и положител...
Решение систем линейных уравнений: трехдиагональные, симметричные и положител...Theoretical mechanics department
 

Semelhante a 20110327 systems of_typed_lambda_calculi_moskvin_lecture08 (14)

20110313 systems of_typed_lambda_calculi_moskvin_lecture05
20110313 systems of_typed_lambda_calculi_moskvin_lecture0520110313 systems of_typed_lambda_calculi_moskvin_lecture05
20110313 systems of_typed_lambda_calculi_moskvin_lecture05
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture0220110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
 
тема 4 Напряженное и деформированное состояние в точке
тема 4 Напряженное и деформированное состояние в точкетема 4 Напряженное и деформированное состояние в точке
тема 4 Напряженное и деформированное состояние в точке
 
4.8. курс лекций афу
4.8. курс лекций афу4.8. курс лекций афу
4.8. курс лекций афу
 
тема 8 4 Перемещения при изгибе
тема 8 4  Перемещения при изгибетема 8 4  Перемещения при изгибе
тема 8 4 Перемещения при изгибе
 
20110515 systems of typed lambda_calculi_moskvin_lecture10
20110515 systems of typed lambda_calculi_moskvin_lecture1020110515 systems of typed lambda_calculi_moskvin_lecture10
20110515 systems of typed lambda_calculi_moskvin_lecture10
 
20110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture1120110522 systems of typed lambda_calculi_moskvin_lecture11
20110522 systems of typed lambda_calculi_moskvin_lecture11
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture0220110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
 
20110306 systems of_typed_lambda_calculi_moskvin_lecture03
20110306 systems of_typed_lambda_calculi_moskvin_lecture0320110306 systems of_typed_lambda_calculi_moskvin_lecture03
20110306 systems of_typed_lambda_calculi_moskvin_lecture03
 
20111015 inroduction to_combinatorics_on_words_frid_lecture02
20111015 inroduction to_combinatorics_on_words_frid_lecture0220111015 inroduction to_combinatorics_on_words_frid_lecture02
20111015 inroduction to_combinatorics_on_words_frid_lecture02
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture01
20110224 systems of_typed_lambda_calculi_moskvin_lecture0120110224 systems of_typed_lambda_calculi_moskvin_lecture01
20110224 systems of_typed_lambda_calculi_moskvin_lecture01
 
Математическое дополнение
Математическое дополнениеМатематическое дополнение
Математическое дополнение
 
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессияПрогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
Прогнозирование - Лекция 2. Корреляционный анализ и простая линейная регрессия
 
Решение систем линейных уравнений: трехдиагональные, симметричные и положител...
Решение систем линейных уравнений: трехдиагональные, симметричные и положител...Решение систем линейных уравнений: трехдиагональные, симметричные и положител...
Решение систем линейных уравнений: трехдиагональные, симметричные и положител...
 

Mais de Computer Science Club

20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugsComputer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

Mais de Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 

20110327 systems of_typed_lambda_calculi_moskvin_lecture08

  • 1. Системы типизации лямбда-исчисления Лекция 8. Полиморфная система: связь с логикой и кодирование Денис Москвин 27.03.2011 CS Club при ПОМИ РАН 1
  • 2. Интуиционистская пропозициональная логика второго порядка PROP2 Существует изоморфизм между λ2 и логической системой PROP2. Типы в λ2 формулы в PROP2. Термы в λ2 доказательства в PROP2. PROP2 конструктивная система; в ней, например, закон Пирса ∀α β. ((α → β) → α) → α невыводим. 2
  • 3. PROP2: → Импликация унаследована от PROP: Правило удаления → Правило введения → [σ] . . . σ→τ σ τ PROP2 τ σ→τ Γ M : σ→τ Γ N:σ Γ, x:σ M:τ λ2 Γ MN : τ Γ λ xσ. M : σ → τ 3
  • 4. PROP2: ∀ Правила введения и удаления квантора ∀ соответствуют уни- версальным Λ-абстракции и применению: Правило удаления ∀ Правило введения ∀ τ1 . . . τn . . . ∀α. σ σ PROP2 , α ∈ FV(τ1, . . . , τn) σ[α := τ] ∀α. σ Γ M : ∀α. σ Γ τ : ∗ Γ, α:∗ M:σ λ2 Γ M τ : σ[α := τ] Γ Λα. M : ∀α. σ 4
  • 5. Стандартные логические связки Cистема λ2 позволяет определить стандартные логические связки: ⊥ ≡ ∀α . α ¬σ ≡ σ → ⊥ σ∧τ ≡ ∀α. (σ → τ → α) → α σ∨τ ≡ ∀α. (σ → α) → (τ → α) → α ∃α. σ ≡ ∀β. (∀α. σ → β) → β При этом оказываются возможными все стандартные (кон- структивные) выводы. 5
  • 6. Свойства ⊥ Напомним, что ⊥ ≡ ∀α. α. Терм этого типа позволяет породить терм любого типа σ : ∗, x : ⊥ (x σ) : σ σ:∗ λx⊥. (x σ) : ⊥ → σ Однако тип ⊥ не населён в λ2 не существует замкнутого терма с таким типом. С логической точки зрения ⊥ это абсурд, заведомо ложное утверждение. 6
  • 7. Связка ¬ (отрицание) В λ2 связка ¬ может быть определена так: ¬σ ≡ σ → ⊥ Правило удаления ¬ Правило введения ¬ [σ] [σ] . . . . . . σ ¬σ τ ¬τ τ ¬σ Покажем, что они выразимы в λ2. 7
  • 8. Связка ¬ (2) Удаление ¬. Тип σ → ¬σ → τ ≡ σ → (σ → ⊥) → τ ≡ σ → (σ → ∀α. α) → τ Терм этого типа (в контексте Γ = σ : ∗, τ : ∗) λxσ. λf σ→⊥. f x τ Из противоречия следует все что угодно. Введение ¬. Тип (σ → τ) → (σ → ¬τ) → ¬σ ≡ (σ → τ) → (σ → τ → ⊥) → σ → ⊥ Терм этого типа λ f σ→τ. λ gσ→τ→⊥. λ xσ. g x (f x) Доказательство приведением к нелепости reductio ad absurdum. 8
  • 9. Связка ∧ (конъюнкция) В λ2 связка ∧ может быть определена так: σ ∧ τ ≡ ∀α. (σ → τ → α) → α α ∈ FV(σ), α ∈ FV(τ). Правила удаления ∧ Правило введения ∧ σ∧τ σ∧τ σ τ σ τ σ∧τ Покажем, что они выразимы в λ2. 9
  • 10. Введение ∧ Введение ∧. Тип σ → τ → (σ ∧ τ) ≡ σ → τ → (∀α. (σ → τ → α) → α) Терм этого типа λ xσ yτ. Λ α. λ f σ→τ→α. f x y В стандартной интерпретации λ2, как языка программирова- ния, этот терм описывает пару (двухэлементный кортеж): σ : ∗, τ : ∗, x : σ, y : τ x, y : σ × τ 10
  • 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. Связка ∨ (дизъюнкция) В λ2 связка ∨ может быть определена так: σ ∨ τ ≡ ∀α. (σ → α) → (τ → α) → α α ∈ FV(σ), α ∈ FV(τ). Правило удаления ∨ Правила введения ∨ [σ] [τ] σ∨τ . . . . . . ρ ρ σ τ ρ σ∨τ σ∨τ Покажем, что они выразимы в λ2. 12
  • 13. Введение ∨ Введение ∨ (1). Тип σ → (σ ∨ τ) = σ → (∀α. (σ → α) → (τ → α) → α) Терм этого типа λ xσ. Λ α. λ fσ→α gτ→α. f x Введение ∨ (2). Тип τ → (σ ∨ τ) = τ → (∀α. (σ → α) → (τ → α) → α) Терм этого типа λ yτ. Λ α. λ fσ→α gτ→α. g y 13
  • 14. Удаление ∨ Удаление ∨. Тип (σ ∨ τ) → (σ → ρ) → (τ → ρ) → ρ = (∀α. (σ → α) → (τ → α) → α) → (σ → ρ) → (τ → ρ) → ρ Терм этого типа λ hσ∨τ fσ→ρ gτ→ρ. h ρ f g Построение терма σ : ∗, τ : ∗, ρ : ∗, h : σ ∨ τ h ρ : (σ → ρ) → (τ → ρ) → ρ Это правило носит название доказательство разбором слу- чаев. 14
  • 15. Экзистенциальные типы Трактовка ∀α. σ: Функция из типов в термы, которая любому типу τ ставит в соответствие терм с типом σ[α := τ]. Для σ = α → α имеем σ[α := τ] = τ → τ: Λα. λxα. x : ∀α. α → α (Λα. λxα. x)τ →β λxτ. x : τ → τ Трактовка ∃α. σ: Пара из некоторого типа τ и терма, имеющего тип σ[α := τ]. Для σ = α → γ имеем: γ, λxγ. x : ∃α. α → γ поскольку σ[α := γ] = γ → γ и λxγ. x : γ → γ. 15
  • 16. ∃ (квантор существования) В λ2 ∃ может быть определён так: ∃α . σ ≡ ∀β. (∀α. σ → β) → β β ∈ FV(σ). Правило удаления ∃ Правило введения ∃ [σ] ∃α. σ . . . ρ σ[α := τ] ρ ∃α. σ Покажем, что они выразимы в λ2. 16
  • 17. Введение ∃ Введение ∃. Тип σ[α := τ] → ∃α. σ = σ[α := τ] → ∀β. (∀α. σ → β) → β Терм этого типа (в контексте Γ = τ : ∗) λ xσ[α:=τ]. Λβ. λf∀α. σ→β. f τ x Построение терма τ : ∗, σ : ∗, β : ∗, f : ∀α. σ → β f τ : σ[α := τ] → β τ : ∗, σ : ∗, β : ∗, f : ∀α. σ → β, x : σ[α := τ] fτx : β 17
  • 18. Удаление ∃ Удаление ∃. Тип ∃α. σ → (σ → ρ) → ρ = (∀β. (∀α. σ → β) → β) → (σ → ρ) → ρ Терм этого типа λ f ∃α. σ. λ gσ→ρ. f ρ (Λ α. g) Построение терма f : ∃α. σ (f ρ) : (∀α. σ → ρ) → ρ g:σ→ρ (Λα. g) : ∀α. σ → ρ 18
  • 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. Кодирование в λ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. Кодирование в λ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. Кодирование в λ2: двухэлементный кортеж Тип пары значений с типами σ и τ (произведение типов σ × τ) можно задать так: σ × τ ≡ ∀α. (σ → τ → α) → α Отметим, что σ × τ ≡ σ ∧ τ. Любые два значения a : σ и b : τ порождают значение a, b типа их произведения σ × τ: PAIR a b ≡ a, b ≡ Λ α. λ fσ→τ→α. f a b Тип этого конструктора пары σ→τ→σ × τ ≡ σ → τ → ∀α. (σ → τ → α) → α 22
  • 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. Кодирование в λ2: размеченное объединение Тип размеченного объединения значений типов σ и τ (суммы типов σ + τ) можно задать так: σ + τ ≡ ∀α. (σ → α) → (τ → α) → α Отметим, что σ + τ ≡ σ ∨ τ. В σ + τ хранится либо значение типа σ, либо типа τ, инъек- тированные в него одним из двух конструкторов INJL : σ → σ + τ INJL a ≡ Λα. λ fσ→α gτ→α. f a INJR : τ → σ + τ INJR b ≡ Λα. λ fσ→α gτ→α. g b 24
  • 25. Кодирование в λ2: размеченное объединение (2) σ + τ ≡ ∀α. (σ → α) → (τ → α) → α Итератор для размеченного объединения hσ+τ (разбор случаев): CASES : (σ → ρ) → (τ → ρ) → (σ + τ) → ρ CASES ≡ λfσ→ρ gτ→ρ hσ+τ. h ρ f g CASES f g h ≡ h ρ f g ρ задает тип результата разбора, а f и g являются обработ- чиками допустимых вариантов хранения. 25
  • 26. Кодирование в λ2: размеченное объединение (3) TST1 : Bool + Nat TST1 ≡ INJL FALSE ≡ Λα. λ fBool→α gNat→α. f FALSE TST2 : Bool + Nat TST2 ≡ INJR 42 ≡ Λα. λ fBool→α gNat→α. g 42 CASES 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. Кодирование в λ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. Кодирование в λ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. Кодирование в λ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. Кодирование в λ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. Кодирование в λ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. Кодирование в λ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. Общая теория (индуктивных типов Мартин-Лёфа) Рассмотрим SomeType = ∀α. τ1 → τ2 → . . . → τn → α где τi зависит от α, имея α по крайней мере в самой правой позиции: τi = . . . → α Количество конструкторов равно n ( арности SomeType): ≡ ∀α. α → α 1 штука σ × τ ≡ ∀α. (σ → τ → α) → α 1 штука Bool ≡ ∀α. α → α → α 2 штуки σ + τ ≡ ∀α. (σ → α) → (τ → α) → α 2 штуки List σ ≡ ∀α. α → (σ → α → α) → α 2 штуки 33
  • 34. Теория типов Мартин-Лёфа: тип конструктора SomeType = ∀α. τ1 → τ2 → . . . → τn → α Арность i-го конструктора равна арности τi. Тип i-го конструктора fi : τi[α := SomeType]. Например, для списка fi : τi[α := List σ]: List σ ≡ ∀α. α → (σ → α → α) → α NIL : List σ CONS : σ → List σ → List σ 34
  • 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. Теория типов Мартин-Лёфа: итераторы Если 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. Домашнее задание Реализуйте функции 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. Домашнее задание (2) Выразите FST и SND в терминах UNCURRY. Выразите PLUS и MULT для Nat в терминах IT. Выразите MAP : (σ → τ) → List σ → List τ в терминах FOLD. Определите в λ2 индуктивный тип Tree σ τ, задающий бинар- ное дерево, хранящее в узлах значения типа σ, а в листьях типа τ. Выпишите его конструкторы и итератор для него. 38
  • 39. Литература (1) TAPL гл. 23, 24 Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002 http://www.cis.upenn.edu/~bcpierce/tapl ITT гл. 5 Herman Geuvers, Introduction to Type Theory Alfa Lernet Summer school 2008, Uruguay http://www.cs.ru.nl/H.Geuvers/Uruguay2008SummerSchool.html 39
  • 40. Литература (2) ОЯП гл. 9 Дж.Митчелл, Основания языков программирования, М.-Ижевск, НИЦ РХД, 2010 PAT гл. 11 Jean-Yves Girard, Paul Taylor, Yves Lafont, Proofs and Types, Cambridge University Press, 1989 40