SlideShare a Scribd company logo
Системы типизации лямбда-исчисления

Лекция 4. Просто типизированное лямбда-исчисление

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




                    06.03.2011

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




                                             1
Предварительные замечания (1)

Типы представляют собой объекты синтаксической природы
и могут быть присвоены лямбда-термам.

Если M    терм и тип α присвоен M, то пишут

                         M:α


Например, в большинстве систем I : α → α, то есть тожде-
ственной функции может быть приписан тип α → α. Если x,
являющийся аргументом функции I, имеет тип α, то значе-
ние I x тоже имеет тип α.

В общем случае α → β является типом функции из α в β.
                                                   2
Предварительные замечания (2)

Есть два семейства систем типов.
Системы в стиле Карри: Термы те же, что и в бестиповой
теории. Каждый терм обладает множеством различных ти-
пов (пустое, одно- или многоэлементное, бесконечное).
Системы в стиле Чёрча: Термы         аннотированные вер-
сии бестиповых термов. Каждый терм имеет тип (обычно
уникальный), выводимый из способа, которым терм анноти-
рован.

Иногда используют такую терминологию:
Системы в стиле Карри    лямбда-исчисление с присваива-
нием типов.
Системы в стиле Чёрча  системы типизированного лямбда-
исчисления.
                                                   3
Предварительные замечания (3)



Програмистский подход: термы интерпретируются как про-
граммы, а типы  как их частичные спецификации.

Системы в стиле Карри: неявная типизация (например, Haskell,
Ocaml).

Системы в стиле Чёрча: явная типизация (большинство ти-
пизированных языков).

Логический подход: типы интерпретируются как высказы-
вания, а термы как их доказательства.

                                                     4
Типы системы λ→ (1)

Самая простая система   это просто типизированное λ-
исчисление (λ→ или Simple Type Theory (STT)).

Множество типов T системы λ→ определяется индуктивно:
      α, β, . . . ∈ T        (переменные типа)

      σ, τ ∈ T ⇒ (σ → τ) ∈ T (типы пространства функций)
В абстрактном синтаксисе:
                           T ::= V | T → T
Здесь V = {α, β, . . .}   множество типовых переменных.

Соглашение: α, β, γ используем для типовых переменных, а
σ, τ, ρ для произвольных типов.
                                                           5
Типы системы λ→ (2)

Стрелка правоассоциативна: если σ1, . . . , σn ∈ T, то

      σ1 → σ2 → . . . → σn ≡ (σ1 → (σ2 → . . . → (σn−1 → σn) . . .))
Примеры типов

                            (α → β) ≡ α → β
                     (α → (β → γ)) ≡ α → β → γ
                     ((α → β) → γ) ≡ (α → β) → γ
    ((α → β) → ((β → γ) → (α → γ))) ≡ (α → β) → (β → γ) → α → γ
   ((α → β) → (((α → β) → β) → β)) ≡ (α → β) → ((α → β) → β) → β
Всякий тип в λ→ может быть записан в виде

                        σ1 → σ2 → . . . → σn → α
                                                                       6
Как типизировать термы? (1)

Если терм переменная                 как угодно:
x : α, y : α → β, z : (α → β) → ((α → β) → β) → β.


Если терм аппликация M N, то
  M должно быть функцией, то есть иметь стрелочный тип
M : σ → τ;
  N должно быть подходящим аргументом, то есть иметь
тип N : σ;
  вся аппликация должна иметь тип результата применения
функции: (M N) : τ.

Например, для x : α, y : α → β имеем (y x) : β.
Добавив z : β → γ, получим z (y x) : γ.
А какие должны иметь типы x и y, чтобы x (y x) : β?
                                                      7
Как типизировать термы? (2)

Если терм абстракция λx. M, то тип должен быть стрелоч-
ным (λx. M) : σ → τ, причём тип аргумента x : σ и тип тела
абстракции M : τ.

Например, для x : α имеем (λx. x) : α → α.

А надо ли здесь отдельно указывать, что x : α?
Если не указать, то допустимо и (λx. x) : β → β и даже (λx. x) :
(α → β) → (α → β)    стиль Карри.
Если указать (λx : α. x) : α → α, то тип терма определяется
однозначно        стиль Чёрча.

Типизируйте по Чёрчу: λx : ?. λy : ?. x (y x) : ?
                                                          8
Как типизировать термы? (3)

Правила ассоциативности для типов (вправо), аппликации
(влево) и абстракции (вправо) хорошо согласованы друг с
другом:

              F : α → (β → (γ → δ))      (M : α, N : β, P : γ)
              (F M) : β → (γ → δ)
              ((F M) N) : γ → δ
              (((F M) N) P) : δ

                   Q:ρ
                   (λy : τ. Q) : τ → ρ
                   (λx : σ. (λy : τ. Q)) : σ → (τ → ρ)
Зелёные скобки опускаются.
                                                                 9
Предтермы системы λ→ а ля Карри


Множество предтермов (или псевдотермов) Λ строится
из переменных из V = {x, y, z, . . .} с помощью аппликации и
абстракции:

                       x∈V ⇒ x∈Λ
                    M, N ∈ Λ ⇒ (M N) ∈ Λ
                 M ∈ Λ, x ∈ V ⇒ (λx. M) ∈ Λ
В абстрактном синтаксисе

                  Λ ::= V | (Λ Λ) | (λV. Λ)


То есть предтермы     это термы бестипового λ-исчисления.
                                                       10
Предермы системы λ→ а ля Чёрч


Множество предтермов ΛT строится из переменных из V =
{x, y, z, . . .} с помощью аппликации и аннотированной типами
абстракции:

                          x ∈ V ⇒ x ∈ ΛT
                     M, N ∈ ΛT ⇒ (M N) ∈ ΛT
            M ∈ ΛT, x ∈ V, σ ∈ T ⇒ (λx : σ. M) ∈ ΛT
В абстрактном синтаксисе

               ΛT ::= V | (ΛT ΛT) | (λV: T. ΛT)


Все соглашения о скобках и ассоциативности те же, что в Λ.
                                                        11
Примеры предтермов

Система λ→ а ля Карри:

                                  λx y. x
                                  λf g x. f (g x)
                                  λx. x x


Система λ→ а ля Чёрч:

     λx : α. λy : β. x ≡ λxα yβ. x
     λx : α. λy : α. x ≡ λxα yα. x
     λf : α. λg : β. λx : γ. f (g x) ≡ λfα gβ xγ. f (g x)
     λf : (β → γ). λg : (α → β). λx : α. f (g x) ≡ λfβ→γ gα→β xα. f (g x)
     λx : α. x x ≡ λxα. x x
                                                                      12
Утверждение о типизации



Утверждение (о типизации) в λ→                  а ля Карри        имеет вид

                                     M:τ
где M ∈ Λ и τ ∈ T. Тип τ иногда называют предикатом, а
терм M    субъектом утверждения.

    (λx. x) : α → α     (λx. x) : (α → β) → α → β    (λx y. x) : α → β → α


Для λ→      а ля Чёрч        надо лишь заменить Λ на ΛT

(λx : α. x) : α → α   (λxα→β. x) : (α → β) → α → β    (λxα yβ. x) : α → β → α


                                                                         13
Объявления




Объявление      это утверждение (о типизации) с термовой
переменной в качестве субъекта.

                        x:α
                        y:β
                        f:α→β
                        g : (α → β) → γ




                                                   14
Контексты

Контекст    это множество объявлений с различными пе-
ременными в качестве субъекта.
                     Γ = {x1 : σ1, x2 : σ2, . . . , xn : σn}
(контекст иногда называют базисом или окружением)
Фигурные скобки множества иногда опускают:
                 Γ = x : α, y : β, f : α → β, g : (α → β) → γ

Контексты можно расширять, добавляя объявление новой
переменной:
    ∆ = Γ , z : α → γ = x : α, y : β, f : α → β, g : (α → β) → γ, z : α → γ
Контекст можно рассматривать как (частичную) функцию
из множества переменных V в множество типов T.
                                                                          15
Правила типизации λ→                   а ля Карри

Утверждение M : τ называется выводимым в контексте Γ ,
обозначение
                              Γ      M:τ
если его вывод может быть произведен по правилам:

                       (x : σ) ∈ Γ   ⇒     Γ    x:σ

         Γ   M : σ → τ, Γ    N:σ     ⇒     Γ    (M N) : τ

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

Если существуют Γ и τ, такие что Γ               M : τ, то предтерм M
называют (допустимым) термом.
                                                                  16
Правила типизации λ→             а ля Карри         (2)

           (аксиома)         Γ   x : σ, если (x : σ) ∈ Γ

                             Γ   M:σ→τ Γ N:σ
           (удаление →)
                                  Γ (M N) : τ

                              Γ, x:σ M:τ
           (введение →)
                             Γ (λx. M) : σ → τ

Пример дерева вывода типа для λx y. x

                        x : α, y : β   x:α
                       x:α   (λy. x) : β → α
                        (λx y. x) : α → β → α
То есть для любых α, β ∈ T верно         (λx y. x) : α → β → α.
                                                                  17
Правила типизации λ→                   а ля Чёрч

           (аксиома)          Γ    x : σ, если (x : σ) ∈ Γ

                              Γ    M:σ→τ Γ N:σ
           (удаление →)
                                    Γ (M N) : τ

                                   Γ, x:σ M:τ
           (введение →)
                              Γ    (λx : σ. M) : σ → τ

Вывод типа для λxα yβ. x проще

                          x : α, y : β   x:α
                    x:α      (λy : β. x) : β → α
                   (λx : α. λy : β. x) : α → β → α
То есть для каждых α, β ∈ T верно              (λxα yβ. x) : α → β → α.
                                                                          18
Правила для λ→    а ля Карри : естественный вывод

Правила типизации в терминах естественного вывода (от-
брасываемые допущения зачёркиваются):

        Правило удаления → Правило введения →
                                   [x : σ]
                                      .
                                      .
                                      .
           M:σ → τ N:σ             M:τ
             (M N) : τ        (λx. M) : σ → τ


                    [x : α]2   [y : β]1
                           x:α
                                          1
                     (λy. x) : β → α
                                              2
                   (λx y. x) : α → β → α
                                                  19
Правила для λ→      а ля Чёрч : естественный вывод

Правила типизации в терминах естественного вывода (от-
брасываемые допущения зачёркиваются):

        Правило удаления → Правило введения →
                                     [x : σ]
                                        .
                                        .
                                        .
           M:σ → τ N:σ               M:τ
             (M N) : τ        (λx : σ. M) : σ → τ


                       [x : α]2   [y : β]1
                              x:α
                                             1
                      (λy : β. x) : β → α
                                                   2
                 (λx : α. λy : β. x) : α → β → α
                                                       20
Типизируем λf g x. g (f x) и S = λx y z. x z (y z) а ля Карри


                                        [f : α → β]3 [x : α]1
              [g : β → γ]2
                                                 f x:β
                                g (f x) : γ
                                                1
                          λx. g (f x) : α → γ
                                                       2
                   λg x. g (f x) : (β → γ) → α → γ
                                                              3
             λf g x. g (f x) : (α → β) → (β → γ) → α → γ

       [x : α → β → γ]3 [z : α]1               [y : α → β]2 [z : α]1
                x z:β→γ                                y z:β
                                x z (y z) : γ
                                                1
                          λz. x z (y z) : α → γ
                                                       2
                    λy z. x z (y z) : (α → β) → α → γ
                                                                3
           λx y z. x z (y z) : (α → β → γ) → (α → β) → α → γ
                                                                       21
Типизируем λf g x. g (f x) и S = λx y z. x z (y z) а ля Чёрч


                                          [f : α → β]3 [x : α]1
                  [g : β → γ]2
                                                   f x:β
                                  g (f x) : γ
                                                    1
                           λx : α. g (f x) : α → γ
                                                               2
                λg : β → γ. λx : α. g (f x) : (β → γ) → α → γ
                                                                         3
     λf : α → β. λg : β → γ. λx : α. g (f x) : (α → β) → (β → γ) → α → γ

           [x : α → β → γ]3 [z : α]1                [y : α → β]2 [z : α]1
                    x z:β→γ                                 y z:β
                                   x z (y z) : γ
                                                      1
                           λz : α. x z (y z) : α → γ
                                                                  2
                 λy : α → β. λz : α. x z (y z) : (α → β) → α → γ
                                                                              3
λx : α → β → γ. λy : α → β. λz : α. x z (y z) : (α → β → γ) → (α → β) → α → γ
                                                                             22
Примеры: стираем термы




             [α → β]3 [α]1     [α → β → γ]3   [α]1   [α → β]2   [α]1
 [β → γ]2
                   β                  β→γ                  β
            γ                                 γ
                1                                 1
          α→γ                               α→γ
                     2                                 2
     (β → γ) → α → γ                   (α → β) → α → γ
                           3                                   3
 (α → β) → (β → γ) → α → γ       (α → β → γ) → (α → β) → α → γ


Что вышло?

Деревья вывода в системе минимальной пропозициональной
логики PROP! (слева    закон силлогизма)

                                                                23
Cистема минимальной пропозициональной логики


Cистема PROP состоит из:
  Импликационных утверждений, задаваемых следующим аб-
страктным синтаксисом: Prop ::= Var | (Prop → Prop)
  Правил вывода
 Правило удаления → Правило введения →
                             j
                            [σ]
                             .
                             .
                             .
     σ→τ     σ               τ
                                j
          τ                σ→τ
Здесь σ и τ  утверждения, σ в правиле введения проме-
жуточное (отбрасываемое на j-ом шаге).
Вывод утверждения σ из множества неотброшенных (суще-
ственных) допущений ∆ обозначают ∆ PROP σ.
                                                 24
Соответствие Карри-Говарда




Имеется естественное взаимно-однозначное соответствие меж-
ду утверждениями в минимальной пропозициональной логи-
ки PROP и типизируемыми термами в λ→.
Утверждение
                 x1 : τ1, . . . , xn : τn   λ→ M : σ

может быть прочитано так: M есть доказательство σ, исхо-
дящее из предположений τ1, . . . , τn.

Подробнее [ITT 3.3]


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



Сконструируйте терм типа
  (δ → δ → α) → (α → β → γ) → (δ → β) → δ → γ
  (δ → δ → α) → (γ → α) → (α → β) → δ → γ → β (2 штуки)
  ((α → β) → α) → (α → α → β) → α
  ((α → β) → α) → (α → α → β) → β



Добавьте типы в λ-абстракцию и постройте дерево есте-
ственного вывода типа для терма
λx. λy. y (λz. y x) : (γ → ) → ((γ → ) → ) →


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




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

ITT гл. 3
Herman Geuvers, Introduction to Type Theory
Alfa Lernet Summer school 2008, Uruguay
http://www.cs.ru.nl/H.Geuvers/Uruguay2008SummerSchool.html/



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




TAPL гл. 9
Benjamin C. Pierce, Types and Programming Languages, MIT
Press, 2002
http://www.cis.upenn.edu/ bcpierce/tapl

I2FP гл. 4.1
John Harrison, Introduction to Functional Programming
http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/
русский перевод: http://code.google.com/p/funprog-ru/



                                                      28

More Related Content

What's hot

Pr i-3
Pr i-3Pr i-3
Pr i-3
allfira
 
20110327 systems of_typed_lambda_calculi_moskvin_lecture08
20110327 systems of_typed_lambda_calculi_moskvin_lecture0820110327 systems of_typed_lambda_calculi_moskvin_lecture08
20110327 systems of_typed_lambda_calculi_moskvin_lecture08Computer Science Club
 
Исследование производной
Исследование производнойИсследование производной
Исследование производной
agafonovalv
 
Pr i-7
Pr i-7Pr i-7
Pr i-7
allfira
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Nikolay Grebenshikov
 
Pr i-6
Pr i-6Pr i-6
Pr i-6
allfira
 
20080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-0220080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-02Computer Science Club
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
Technosphere1
 
Линейная алгебра - I
Линейная алгебра - IЛинейная алгебра - I
Линейная алгебра - I
DEVTYPE
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Линейная алгебра - II
Линейная алгебра - IIЛинейная алгебра - II
Линейная алгебра - II
DEVTYPE
 
Fractal Geometry
Fractal GeometryFractal Geometry
Fractal Geometry
SSA KPI
 
Основы комбинаторики - I
Основы комбинаторики - IОсновы комбинаторики - I
Основы комбинаторики - I
DEVTYPE
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Nikolay Grebenshikov
 
20111016 inroduction to_combinatorics_on_words_frid_lecture04
20111016 inroduction to_combinatorics_on_words_frid_lecture0420111016 inroduction to_combinatorics_on_words_frid_lecture04
20111016 inroduction to_combinatorics_on_words_frid_lecture04Computer Science Club
 
Основы комбинаторики - II
Основы комбинаторики - IIОсновы комбинаторики - II
Основы комбинаторики - II
DEVTYPE
 
Pr i-8
Pr i-8Pr i-8
Pr i-8
allfira
 

What's hot (20)

Pr i-3
Pr i-3Pr i-3
Pr i-3
 
20110327 systems of_typed_lambda_calculi_moskvin_lecture08
20110327 systems of_typed_lambda_calculi_moskvin_lecture0820110327 systems of_typed_lambda_calculi_moskvin_lecture08
20110327 systems of_typed_lambda_calculi_moskvin_lecture08
 
Pr i-3
Pr i-3Pr i-3
Pr i-3
 
Исследование производной
Исследование производнойИсследование производной
Исследование производной
 
Pr i-7
Pr i-7Pr i-7
Pr i-7
 
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
Лекция №2. Алгоритмические проблемы. Стандартные схемы программ. Предмет "Тео...
 
Pr i-6
Pr i-6Pr i-6
Pr i-6
 
20080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-0220080928 structuralcomplexitytheory lecture01-02
20080928 structuralcomplexitytheory lecture01-02
 
Integral1
Integral1Integral1
Integral1
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
 
Линейная алгебра - I
Линейная алгебра - IЛинейная алгебра - I
Линейная алгебра - I
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
 
Pr i-5
Pr i-5Pr i-5
Pr i-5
 
Линейная алгебра - II
Линейная алгебра - IIЛинейная алгебра - II
Линейная алгебра - II
 
Fractal Geometry
Fractal GeometryFractal Geometry
Fractal Geometry
 
Основы комбинаторики - I
Основы комбинаторики - IОсновы комбинаторики - I
Основы комбинаторики - I
 
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"Лекция №1. Введение. Предмет "Теория вычислительных процессов"
Лекция №1. Введение. Предмет "Теория вычислительных процессов"
 
20111016 inroduction to_combinatorics_on_words_frid_lecture04
20111016 inroduction to_combinatorics_on_words_frid_lecture0420111016 inroduction to_combinatorics_on_words_frid_lecture04
20111016 inroduction to_combinatorics_on_words_frid_lecture04
 
Основы комбинаторики - II
Основы комбинаторики - IIОсновы комбинаторики - II
Основы комбинаторики - II
 
Pr i-8
Pr i-8Pr i-8
Pr i-8
 

Similar to 20110306 systems of_typed_lambda_calculi_moskvin_lecture04

20110327 systems of_typed_lambda_calculi_moskvin_lecture07
20110327 systems of_typed_lambda_calculi_moskvin_lecture0720110327 systems of_typed_lambda_calculi_moskvin_lecture07
20110327 systems of_typed_lambda_calculi_moskvin_lecture07Computer 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
 
Евгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в HaskellЕвгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в Haskell
FProg
 
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
 
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
 
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
 
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
 
20120309 formal semantics shilov_lecture06
20120309 formal semantics shilov_lecture0620120309 formal semantics shilov_lecture06
20120309 formal semantics shilov_lecture06Computer Science Club
 
L11: Метод ансамблей
L11: Метод ансамблейL11: Метод ансамблей
L11: Метод ансамблей
Technosphere1
 
Лекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияЛекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрия
simple_people
 
пугач му по матлогике 2015
пугач му по матлогике 2015пугач му по матлогике 2015
пугач му по матлогике 2015
LIPugach
 
предел последовательности
предел последовательностипредел последовательности
предел последовательностиtomik1044
 
Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1
simple_people
 
Матан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdfМатан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdf
SrgioAlex
 
математик анализ лекц№10
математик анализ лекц№10математик анализ лекц№10
математик анализ лекц№10narangerelodon
 
20111015 inroduction to_combinatorics_on_words_frid_lecture01
20111015 inroduction to_combinatorics_on_words_frid_lecture0120111015 inroduction to_combinatorics_on_words_frid_lecture01
20111015 inroduction to_combinatorics_on_words_frid_lecture01Computer Science Club
 

Similar to 20110306 systems of_typed_lambda_calculi_moskvin_lecture04 (20)

20110327 systems of_typed_lambda_calculi_moskvin_lecture07
20110327 systems of_typed_lambda_calculi_moskvin_lecture0720110327 systems of_typed_lambda_calculi_moskvin_lecture07
20110327 systems of_typed_lambda_calculi_moskvin_lecture07
 
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
 
Евгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в HaskellЕвгений Котельников. Зависимые типы в Haskell
Евгений Котельников. Зависимые типы в Haskell
 
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
 
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
 
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
 
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
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20120309 formal semantics shilov_lecture06
20120309 formal semantics shilov_lecture0620120309 formal semantics shilov_lecture06
20120309 formal semantics shilov_lecture06
 
L11: Метод ансамблей
L11: Метод ансамблейL11: Метод ансамблей
L11: Метод ансамблей
 
Лекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияЛекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрия
 
пугач му по матлогике 2015
пугач му по матлогике 2015пугач му по матлогике 2015
пугач му по матлогике 2015
 
предел последовательности
предел последовательностипредел последовательности
предел последовательности
 
Soboland Sat
Soboland SatSoboland Sat
Soboland Sat
 
20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich
 
Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1
 
4
44
4
 
Матан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdfМатан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdf
 
математик анализ лекц№10
математик анализ лекц№10математик анализ лекц№10
математик анализ лекц№10
 
20111015 inroduction to_combinatorics_on_words_frid_lecture01
20111015 inroduction to_combinatorics_on_words_frid_lecture0120111015 inroduction to_combinatorics_on_words_frid_lecture01
20111015 inroduction to_combinatorics_on_words_frid_lecture01
 

More from Computer Science Club

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
Computer Science Club
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
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_bugs
Computer 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_bugs
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_bugs
Computer 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_lecture11
Computer 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
 

More from 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
 
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
 
20130922 h10 lecture1_matiyasevich
20130922 h10 lecture1_matiyasevich20130922 h10 lecture1_matiyasevich
20130922 h10 lecture1_matiyasevich
 

20110306 systems of_typed_lambda_calculi_moskvin_lecture04

  • 1. Системы типизации лямбда-исчисления Лекция 4. Просто типизированное лямбда-исчисление Денис Москвин 06.03.2011 CS Club при ПОМИ РАН 1
  • 2. Предварительные замечания (1) Типы представляют собой объекты синтаксической природы и могут быть присвоены лямбда-термам. Если M терм и тип α присвоен M, то пишут M:α Например, в большинстве систем I : α → α, то есть тожде- ственной функции может быть приписан тип α → α. Если x, являющийся аргументом функции I, имеет тип α, то значе- ние I x тоже имеет тип α. В общем случае α → β является типом функции из α в β. 2
  • 3. Предварительные замечания (2) Есть два семейства систем типов. Системы в стиле Карри: Термы те же, что и в бестиповой теории. Каждый терм обладает множеством различных ти- пов (пустое, одно- или многоэлементное, бесконечное). Системы в стиле Чёрча: Термы аннотированные вер- сии бестиповых термов. Каждый терм имеет тип (обычно уникальный), выводимый из способа, которым терм анноти- рован. Иногда используют такую терминологию: Системы в стиле Карри лямбда-исчисление с присваива- нием типов. Системы в стиле Чёрча системы типизированного лямбда- исчисления. 3
  • 4. Предварительные замечания (3) Програмистский подход: термы интерпретируются как про- граммы, а типы как их частичные спецификации. Системы в стиле Карри: неявная типизация (например, Haskell, Ocaml). Системы в стиле Чёрча: явная типизация (большинство ти- пизированных языков). Логический подход: типы интерпретируются как высказы- вания, а термы как их доказательства. 4
  • 5. Типы системы λ→ (1) Самая простая система это просто типизированное λ- исчисление (λ→ или Simple Type Theory (STT)). Множество типов T системы λ→ определяется индуктивно: α, β, . . . ∈ T (переменные типа) σ, τ ∈ T ⇒ (σ → τ) ∈ T (типы пространства функций) В абстрактном синтаксисе: T ::= V | T → T Здесь V = {α, β, . . .} множество типовых переменных. Соглашение: α, β, γ используем для типовых переменных, а σ, τ, ρ для произвольных типов. 5
  • 6. Типы системы λ→ (2) Стрелка правоассоциативна: если σ1, . . . , σn ∈ T, то σ1 → σ2 → . . . → σn ≡ (σ1 → (σ2 → . . . → (σn−1 → σn) . . .)) Примеры типов (α → β) ≡ α → β (α → (β → γ)) ≡ α → β → γ ((α → β) → γ) ≡ (α → β) → γ ((α → β) → ((β → γ) → (α → γ))) ≡ (α → β) → (β → γ) → α → γ ((α → β) → (((α → β) → β) → β)) ≡ (α → β) → ((α → β) → β) → β Всякий тип в λ→ может быть записан в виде σ1 → σ2 → . . . → σn → α 6
  • 7. Как типизировать термы? (1) Если терм переменная как угодно: x : α, y : α → β, z : (α → β) → ((α → β) → β) → β. Если терм аппликация M N, то M должно быть функцией, то есть иметь стрелочный тип M : σ → τ; N должно быть подходящим аргументом, то есть иметь тип N : σ; вся аппликация должна иметь тип результата применения функции: (M N) : τ. Например, для x : α, y : α → β имеем (y x) : β. Добавив z : β → γ, получим z (y x) : γ. А какие должны иметь типы x и y, чтобы x (y x) : β? 7
  • 8. Как типизировать термы? (2) Если терм абстракция λx. M, то тип должен быть стрелоч- ным (λx. M) : σ → τ, причём тип аргумента x : σ и тип тела абстракции M : τ. Например, для x : α имеем (λx. x) : α → α. А надо ли здесь отдельно указывать, что x : α? Если не указать, то допустимо и (λx. x) : β → β и даже (λx. x) : (α → β) → (α → β) стиль Карри. Если указать (λx : α. x) : α → α, то тип терма определяется однозначно стиль Чёрча. Типизируйте по Чёрчу: λx : ?. λy : ?. x (y x) : ? 8
  • 9. Как типизировать термы? (3) Правила ассоциативности для типов (вправо), аппликации (влево) и абстракции (вправо) хорошо согласованы друг с другом: F : α → (β → (γ → δ)) (M : α, N : β, P : γ) (F M) : β → (γ → δ) ((F M) N) : γ → δ (((F M) N) P) : δ Q:ρ (λy : τ. Q) : τ → ρ (λx : σ. (λy : τ. Q)) : σ → (τ → ρ) Зелёные скобки опускаются. 9
  • 10. Предтермы системы λ→ а ля Карри Множество предтермов (или псевдотермов) Λ строится из переменных из V = {x, y, z, . . .} с помощью аппликации и абстракции: x∈V ⇒ x∈Λ M, N ∈ Λ ⇒ (M N) ∈ Λ M ∈ Λ, x ∈ V ⇒ (λx. M) ∈ Λ В абстрактном синтаксисе Λ ::= V | (Λ Λ) | (λV. Λ) То есть предтермы это термы бестипового λ-исчисления. 10
  • 11. Предермы системы λ→ а ля Чёрч Множество предтермов ΛT строится из переменных из V = {x, y, z, . . .} с помощью аппликации и аннотированной типами абстракции: x ∈ V ⇒ x ∈ ΛT M, N ∈ ΛT ⇒ (M N) ∈ ΛT M ∈ ΛT, x ∈ V, σ ∈ T ⇒ (λx : σ. M) ∈ ΛT В абстрактном синтаксисе ΛT ::= V | (ΛT ΛT) | (λV: T. ΛT) Все соглашения о скобках и ассоциативности те же, что в Λ. 11
  • 12. Примеры предтермов Система λ→ а ля Карри: λx y. x λf g x. f (g x) λx. x x Система λ→ а ля Чёрч: λx : α. λy : β. x ≡ λxα yβ. x λx : α. λy : α. x ≡ λxα yα. x λf : α. λg : β. λx : γ. f (g x) ≡ λfα gβ xγ. f (g x) λf : (β → γ). λg : (α → β). λx : α. f (g x) ≡ λfβ→γ gα→β xα. f (g x) λx : α. x x ≡ λxα. x x 12
  • 13. Утверждение о типизации Утверждение (о типизации) в λ→ а ля Карри имеет вид M:τ где M ∈ Λ и τ ∈ T. Тип τ иногда называют предикатом, а терм M субъектом утверждения. (λx. x) : α → α (λx. x) : (α → β) → α → β (λx y. x) : α → β → α Для λ→ а ля Чёрч надо лишь заменить Λ на ΛT (λx : α. x) : α → α (λxα→β. x) : (α → β) → α → β (λxα yβ. x) : α → β → α 13
  • 14. Объявления Объявление это утверждение (о типизации) с термовой переменной в качестве субъекта. x:α y:β f:α→β g : (α → β) → γ 14
  • 15. Контексты Контекст это множество объявлений с различными пе- ременными в качестве субъекта. Γ = {x1 : σ1, x2 : σ2, . . . , xn : σn} (контекст иногда называют базисом или окружением) Фигурные скобки множества иногда опускают: Γ = x : α, y : β, f : α → β, g : (α → β) → γ Контексты можно расширять, добавляя объявление новой переменной: ∆ = Γ , z : α → γ = x : α, y : β, f : α → β, g : (α → β) → γ, z : α → γ Контекст можно рассматривать как (частичную) функцию из множества переменных V в множество типов T. 15
  • 16. Правила типизации λ→ а ля Карри Утверждение M : τ называется выводимым в контексте Γ , обозначение Γ M:τ если его вывод может быть произведен по правилам: (x : σ) ∈ Γ ⇒ Γ x:σ Γ M : σ → τ, Γ N:σ ⇒ Γ (M N) : τ Γ, x:σ M:τ ⇒ Γ (λx. M) : σ → τ Если существуют Γ и τ, такие что Γ M : τ, то предтерм M называют (допустимым) термом. 16
  • 17. Правила типизации λ→ а ля Карри (2) (аксиома) Γ x : σ, если (x : σ) ∈ Γ Γ M:σ→τ Γ N:σ (удаление →) Γ (M N) : τ Γ, x:σ M:τ (введение →) Γ (λx. M) : σ → τ Пример дерева вывода типа для λx y. x x : α, y : β x:α x:α (λy. x) : β → α (λx y. x) : α → β → α То есть для любых α, β ∈ T верно (λx y. x) : α → β → α. 17
  • 18. Правила типизации λ→ а ля Чёрч (аксиома) Γ x : σ, если (x : σ) ∈ Γ Γ M:σ→τ Γ N:σ (удаление →) Γ (M N) : τ Γ, x:σ M:τ (введение →) Γ (λx : σ. M) : σ → τ Вывод типа для λxα yβ. x проще x : α, y : β x:α x:α (λy : β. x) : β → α (λx : α. λy : β. x) : α → β → α То есть для каждых α, β ∈ T верно (λxα yβ. x) : α → β → α. 18
  • 19. Правила для λ→ а ля Карри : естественный вывод Правила типизации в терминах естественного вывода (от- брасываемые допущения зачёркиваются): Правило удаления → Правило введения → [x : σ] . . . M:σ → τ N:σ M:τ (M N) : τ (λx. M) : σ → τ [x : α]2 [y : β]1 x:α 1 (λy. x) : β → α 2 (λx y. x) : α → β → α 19
  • 20. Правила для λ→ а ля Чёрч : естественный вывод Правила типизации в терминах естественного вывода (от- брасываемые допущения зачёркиваются): Правило удаления → Правило введения → [x : σ] . . . M:σ → τ N:σ M:τ (M N) : τ (λx : σ. M) : σ → τ [x : α]2 [y : β]1 x:α 1 (λy : β. x) : β → α 2 (λx : α. λy : β. x) : α → β → α 20
  • 21. Типизируем λf g x. g (f x) и S = λx y z. x z (y z) а ля Карри [f : α → β]3 [x : α]1 [g : β → γ]2 f x:β g (f x) : γ 1 λx. g (f x) : α → γ 2 λg x. g (f x) : (β → γ) → α → γ 3 λf g x. g (f x) : (α → β) → (β → γ) → α → γ [x : α → β → γ]3 [z : α]1 [y : α → β]2 [z : α]1 x z:β→γ y z:β x z (y z) : γ 1 λz. x z (y z) : α → γ 2 λy z. x z (y z) : (α → β) → α → γ 3 λx y z. x z (y z) : (α → β → γ) → (α → β) → α → γ 21
  • 22. Типизируем λf g x. g (f x) и S = λx y z. x z (y z) а ля Чёрч [f : α → β]3 [x : α]1 [g : β → γ]2 f x:β g (f x) : γ 1 λx : α. g (f x) : α → γ 2 λg : β → γ. λx : α. g (f x) : (β → γ) → α → γ 3 λf : α → β. λg : β → γ. λx : α. g (f x) : (α → β) → (β → γ) → α → γ [x : α → β → γ]3 [z : α]1 [y : α → β]2 [z : α]1 x z:β→γ y z:β x z (y z) : γ 1 λz : α. x z (y z) : α → γ 2 λy : α → β. λz : α. x z (y z) : (α → β) → α → γ 3 λx : α → β → γ. λy : α → β. λz : α. x z (y z) : (α → β → γ) → (α → β) → α → γ 22
  • 23. Примеры: стираем термы [α → β]3 [α]1 [α → β → γ]3 [α]1 [α → β]2 [α]1 [β → γ]2 β β→γ β γ γ 1 1 α→γ α→γ 2 2 (β → γ) → α → γ (α → β) → α → γ 3 3 (α → β) → (β → γ) → α → γ (α → β → γ) → (α → β) → α → γ Что вышло? Деревья вывода в системе минимальной пропозициональной логики PROP! (слева закон силлогизма) 23
  • 24. Cистема минимальной пропозициональной логики Cистема PROP состоит из: Импликационных утверждений, задаваемых следующим аб- страктным синтаксисом: Prop ::= Var | (Prop → Prop) Правил вывода Правило удаления → Правило введения → j [σ] . . . σ→τ σ τ j τ σ→τ Здесь σ и τ утверждения, σ в правиле введения проме- жуточное (отбрасываемое на j-ом шаге). Вывод утверждения σ из множества неотброшенных (суще- ственных) допущений ∆ обозначают ∆ PROP σ. 24
  • 25. Соответствие Карри-Говарда Имеется естественное взаимно-однозначное соответствие меж- ду утверждениями в минимальной пропозициональной логи- ки PROP и типизируемыми термами в λ→. Утверждение x1 : τ1, . . . , xn : τn λ→ M : σ может быть прочитано так: M есть доказательство σ, исхо- дящее из предположений τ1, . . . , τn. Подробнее [ITT 3.3] 25
  • 26. Домашнее задание Сконструируйте терм типа (δ → δ → α) → (α → β → γ) → (δ → β) → δ → γ (δ → δ → α) → (γ → α) → (α → β) → δ → γ → β (2 штуки) ((α → β) → α) → (α → α → β) → α ((α → β) → α) → (α → α → β) → β Добавьте типы в λ-абстракцию и постройте дерево есте- ственного вывода типа для терма λx. λy. y (λz. y x) : (γ → ) → ((γ → ) → ) → 26
  • 27. Литература (1) LCWT гл. 3 Henk Barendregt, Lambda calculi with types, Handbook of logic in computer science (vol. 2), Oxford University Press, 1993 ITT гл. 3 Herman Geuvers, Introduction to Type Theory Alfa Lernet Summer school 2008, Uruguay http://www.cs.ru.nl/H.Geuvers/Uruguay2008SummerSchool.html/ 27
  • 28. Литература (2) TAPL гл. 9 Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002 http://www.cis.upenn.edu/ bcpierce/tapl I2FP гл. 4.1 John Harrison, Introduction to Functional Programming http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/ русский перевод: http://code.google.com/p/funprog-ru/ 28