Прочитал
Introduction to Type Theory, сейчас перечитываю её в очередной раз и читаю
Lambda calculi with types Барендрегта. Как я и предполагал, начал с тяжелой книги; зато теперь располагаю литературой.
В статье
Introduction to Type Theory особо понравился момент, когда устанавливался изоморфизм в случае полиморфизма, и именно:
Цитата:
Хотя мне всё равно не понятно, почему
(если доказывать без изоморфизма К.-Х.)
Когда я читал intro to generalized type system, я не мог понять, почему те схемы, общие, описанные там, выражали все частные случаи (λ2 и λ→). Так, например, долго пытался понять, почему в λ→
, ведь символ
в λ→ не используется. На самом деле, если мы ограничиваемся только (*,*), то нельзя построить тип, зависящий от терма явно.
Сейчас я хочу уяснить для себя схему построения типов данныв в λ. В статье приводятся примеры для типов натуральных чисел и списков. Хочу разобраться с ними и с тем, как можно построить λ-аналог произвольного типа данных.
Рассмотрим, например, тип данных
пара. В "Синтаксис и семантика" подробно объясняется, почему
выражает пару
. Типизируем её:
Терм
и есть конструктор пары,
есть конструктор пары определенного типа (A,B), а
есть конкретная пара (x,y), где x:A и y:B.
Тут я хочу отвлечься от основной мысли.
при любых x:A и y:B, поскольку мы договорились, что
обозначается вместо
, если z не входит в Y явно. То есть тут механизм отдаленно напоминает K-комбинатор, когда есть определенный результат, совершенно не зависящий от аргумента. В нашем случае, от x и y совершенно не зависит
. Как мне лучше записать и аргументировать свою нотацию, если я хочу подчеркнуть связь с
? Если б был оператор выбора, можно было б им воспользоваться. А так ведь даже не понятно, не вырождены ли сами A и B.
(Оффтоп)
А ведь тип пары есть, по факту, типом, соотв. по К.-Х. конъюнкции, определение которой я процитировал в начале
Каноническая проекция на первый тип:
Типизирую то, что написано в Семантике и Синтаксисе, а именно: если
, то
и
является проекцией.
, при фиксированных типах (A,B). Попробую в λ2 сделать абстракцию по типам:
Как я писал выше, хотелось бы подчеркнуть, что
, тогда
Скажите, пожалуйста, я правильно обобщил тип пары и её проекции?
P.S. не получилось у меня воспользоваться \begin{multline*}\end{multline*}. Пишет Syntax Error.