Alexander Kuklev (akuklev) wrote,
Alexander Kuklev
akuklev

Кортежи и enum-типы в лямбда-исчислении

Коль скоро я в прошлом посте написал про теоретико-множественное представление пары, стóит, наверное, рассказать и про лямбда-исчисленческое представление и, заодно, про представление типов-перечислений.
Сразу предупрежу, лямбда-термы я люблю записывать вот так: [x|f(x)]. Вертикальных черт может быть несколько: [x|y|f(x,y)] = λx.λy.f(x,y).

Итак, кортеж представляется следующим образом:
(a, b) = [f|f a b]
(a, b, c) = [f|f a b c]
...

Операторы проекции применяются справа и обозначаются .1, .2 и так далее. Операторы проекции пар, троек и кортежей другой арности различаются:
.1(2) := [a|b|a]
.2(2) := [a|b|b]    
.1(3) := [a|b|c|a]
.2(3) := [a|b|c|b]
.3(3) := [a|b|c|c]    

...

Несложно увидеть, что (a, b).1 = a,   (a, b).2 = b и так далее.

При использовании типизированного лямбда-исчисления верхний индекс как правило можно опускать, т.к. он однозначно определяется из контекста.
Лямбда-выражения, соответствующие кортежам и проекциям, не могут быть статически типизированы, поэтому в типизированных (первого порядка) вариантах лямбда-исчисления, они наделяются особенными типами: кортежи имеют тип A × B × ... × C, где A, B, ..., C — типы элементов кортежа, а операторы проекции арности n выделяют в специальный тип, обозначаемый n.

В основанных на лямбда-исчислении прикладных языках обычно вводится синтаксическая глазурь: можно объявлять типы-перечисления
Axis := #{x. y, z}
и именованные кортежи
point := (x: 1, y: 2.5, z: 0).
Представителями типа Axis в таком случае являются проекции .x(Axix), .y(Axix) и .z(Axix), которые можно применять к именованным кортежам: point.x = 1. На деле эта синтаксическая глазурь преобразуется в обычные нумерные типы и проекции:
Axis ≡ 3,
point ≡ (1, 2.5, 0),
.z(Axix) ≡ .3(3).
Subscribe

  • (no subject)

    Встретил фотографию толпы футбольных фанатов, и она меня скорее напугала, у меня уж точно нет желания быть там среди них. Но внезапно я понял, что…

  • Прогресс

    Десять дней назад, вторая ступень SpaceX'овского корабля Starship своим ходом слетала своим ходом на десять километров вверх, и усмепшно приземлилась…

  • О водосбережении

    Как известно, питьевая вода во многих странах дефицитный ресурс. И даже в дождливой Германии летом иногда случаются засухи, в результате которых она…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments